REGIST will precisely capture a position within microsconds but the MARK goes TRUE only on the following servo cycle, so as a raw edge detection it is no faster than an IN command. The only advantage is that you get to trigger on an edge with REGIST.
ie
REGIST(20)
WAIT UNTIL MARK ' only sees the mark true on the next millisecond.
Even if a 250 usec servo period is selected, it sets only the motion cycle time. The BASIC programs will continue on a round-robin context switch that effectively gives a fast task some run time every msec and slow programs progressively less than that as you run more of them. There are 4 context switches in the BASIC multi-tasking per millisecond. 3 slots for BASIC and 1 slot for the system. It goes something like F, Slow, F, Sys. so each fast task comes around once per msec.
So you might observe 0.9 .. 1.2 msecs response given that the external process is not synced to the servo cycle clock in the MC508.
A useful thing to know is that if you use MOVELINK, you can make it start exactly on a REGIST input. Pre-arm the REGIST, pre-load the MOVELINK and on the rising edge the MOVELINK starts very precisely. And it would do so whatever the SERVO_PERIOD is set to, given that the registration captures the master axis position in hardware.
BASE(1)
REGIST(20)
MOVELINK(10, 12, 2, 2, master_axis, 1) ' load movelink and wait for rising edge.