.define .rck ! Range check ! Expects on stack: address of range check descriptor ! index ! Yields index on stack unchanged ! Causes a trap if index is out of bounds .rck: pop h shld .retadr mov h,b mov l,c shld .bcreg pop h ! hl = return address pop d ! de = index mov c,m ! bc = lower bound inx h mov b,m inx h mov a,d xor b jm 1f ! jump if index and l.b. have different signs mov a,e sub c mov a,d sbb b jmp 2f 1: xor b ! now a = d again 2: cm erange ! trap if index too small mov c,m inx h mov b,m mov a,d xor b jm 1f ! jump if index and u.b. have different signs mov a,c sub e mov a,b sbb d jmp 2f 1: xor d ! now a = b 2: cm erange ! trap if index is too large lhld .bcreg mov b,h mov c,l lhld .retadr pchl