; MathROM r005: unchanged inherited INKEY instruction body, moved from 0C60
; to E000 to make room for the original numerical constants.
; No 0C60 trampoline: it would corrupt the verified constant bytes.
; The active r004/r005 UI uses the separate K540 keyboard service.
        ORG     &HE000

; BOOT ROM style nonblocking direct scanner/translator.
; BRK follows the established native exit path at 0001h.

INKEY:
        CAL     OFFCHK
        LD      $17,$31
        LD      $0,&H4B
IK_LOOP:
        PST     IA,$0
        GRE     KY,$1
        GRE     KY,$1
        DID     $2
        ANCW    $1,$1
        JR      Z,IK_NONE
        SBC     $0,&H41
        JP      Z,&H0001
        LD      $3,$31
IK_BIT:
        BIDW    $2
        JR      C,IK_INDEX
        AD      $3,$30,IK_BIT
IK_INDEX:
        LD      $5,$0
        SB      $5,$30
        BIU     $5
        BIU     $5
        LD      $4,$5
        BIU     $4
        BIU     $4
        SB      $4,$5
        PST     UA,&H44
        PRE     IX,KEYSCAN
        LDD     $0,(IX+$4)
        LDD     $0,(IX+$3)
        PST     UA,&H54
        JR      IK_RETCHK
IK_NONE:
        SB      $0,$30
        JR      LNZ,IK_LOOP
        LD      $0,$31
IK_RETCHK:
        AN      $0,$0
        JR      Z,IK_RET
        LD      $17,$30
IK_RET:
        LDW     $15,WORK1
        ST      $0,($15)
        RTN
