************************************************************************* * * * OSBYTE 122 KEYBOARD SCAN FROM &10 (16) * * * ************************************************************************* ; F0CC CLC ;clear carry F0CD LDX #&10 ;set X to 10 ; ************************************************************************* * * * OSBYTE 121 KEYBOARD SCAN FROM VALUE IN X * * * ************************************************************************* F0CF BCS &F068 ;if carry set (by osbyte 121) F068 ;Jmps via KEYV and hence back to; ************************************************************************* * Scan Keyboard C=1, V=0 entry via KEYV * ************************************************************************* F0D1 TXA ;if X is +ve goto F0D9 F0D2 BPL &F0D9 ; F0D4 JSR &F02A ;else interrogate keyboard F0D7 BCS &F12E ;if carry set F12E to set Auto scan else F0D9 PHP ;push flags F0DA BCC &F0DE ;if carry clear goto FODE else F0DC LDY #&EE ;set Y so next operation saves to 2cd F0DE STA &01DF,Y ;can be 2cb,2cc or 2cd F0E1 LDX #&09 ;set X to 9 F0E3 JSR &F129 ;select auto scan F0E6 LDA #&7F ;set port A for input on bit 7 others outputs F0E8 STA &FE43 ; F0EB LDA #&03 ;stop auto scan F0ED STA &FE40 ; F0F0 LDA #&0F ;select non-existent keyboard column F (0-9 only!) F0F2 STA &FE4F ; F0F5 LDA #&01 ;cancel keyboard interrupt F0F7 STA &FE4D ; F0FA STX &FE4F ;select column X (9 max) F0FD BIT &FE4D ;if bit 1 =0 there is no keyboard interrupt so F100 BEQ &F123 ;goto F123 F102 TXA ;else put column address in A F103 CMP &01DF,Y ;compare with 1DF+Y F106 BCC &F11E ;if less then F11E F108 STA &FE4F ;else select column again F10B BIT &FE4F ;and if bit 7 is 0 F10E BPL &F11E ;then F11E F110 PLP ;else push and pull flags F111 PHP ; F112 BCS &F127 ;and if carry set goto F127 F114 PHA ;else Push A F115 EOR &0000,Y ;EOR with EC,ED, or EE depending on Y value F118 ASL ;shift left F119 CMP #&01 ;set carry if = or greater than number holds EC,ED,EE F11B PLA ;get back A F11C BCS &F127 ;if carry set F127 F11E CLC ;else clear carry F11F ADC #&10 ;add 16 F121 BPL &F103 ;and do it again if 0=