OSRDCH&FFE0

When calling the OSRDCH routine from machine code you will need to use the absolute address &40E0. However, when CALLing this routine from BBC BASIC it is recommended that you use the BBC Micro-compatible address &FFE0.

This routine waits for a keypress, returning the result in A, with the carry flag set if an Escape state was set. It is similar in functionality to the BASIC GET function.

The following example code demonstrates an assembly routine GetKey that returns the ASCII code of the pressed key or -1 if Escape was pressed.

 10 OSRDCH=&40E0
 20 OSBYTE=&40F4
 30 DIM GetKey 24
 40 FOR pass%=0 TO 2
 50   P%=GetKey
 60   [
 70   OPT 0
 80   CALL OSRDCH
 90   JR C,Escape
100   ; Escape wasn't pressed, return A in HLH'L'
110   LD L,A : LD H,0
120   EXX
130   LD HL,0
140   RET
150   .Escape
160   ; Return -1
170   SBC HL,HL
180   EXX
190   SBC HL,HL
200   ; Clear Escape condition
210   LD A,&7C : CALL OSBYTE
220   RET
230   ]
240 NEXT pass%

The above GetKey routine provides an implementation of GET that is immune to Escape being pressed, returning -1 instead.