Prev: FEA3 Up: Map Next: FEF4
FECD: Input route: Sinclair
This is the input routine for Sinclair joysticks. The Sinclair interface maps Up/Down/Left/Right/Fire to keys 9/8/6/7/0.
Output
A Input value (as per enum input).
inputroutine_sinclair FECD LD BC,$EFFE Load BC with the port number of the keyboard half row for keys 6/7/8/9/0
FED0 IN A,(C) Read that port. We'll receive xxx67890
FED2 CPL The keyboard is active low, so complement the value
FED3 LD BC,$0000 Clear our left_right and up_down variables
FED6 RRCA Rotate '0' out: 0xxx6789
Up
FED7 RRCA Rotate '9' out: 90xxx678
FED8 JR NC,inputroutine_sinclair_0 If carry was set then '9' was pressed, otherwise skip
FEDA LD C,$01 up_down = input_UP
Down
inputroutine_sinclair_0 FEDC RRCA Rotate '8' out: 890xxx67
FEDD JR NC,inputroutine_sinclair_1 If carry was set then '8' was pressed, otherwise skip
FEDF LD C,$02 up_down = input_DOWN
Right
inputroutine_sinclair_1 FEE1 RRCA Rotate '7' out: 7890xxx6
FEE2 JR NC,inputroutine_sinclair_2 If carry was set then '7' was pressed, otherwise skip
FEE4 LD B,$06 left_right = input_RIGHT
Left
inputroutine_sinclair_2 FEE6 RRCA Rotate '6' out: 67890xxx
FEE7 JR NC,inputroutine_sinclair_3 If carry was set then '6' was pressed, otherwise skip
FEE9 LD B,$03 left_right = input_LEFT
Fire
inputroutine_sinclair_3 FEEB AND $08 Is '0' pressed?
FEED JR Z,inputroutine_sinclair_4 Jump forward if not
FEEF LD A,$09 fire = input_FIRE
inputroutine_sinclair_4 FEF1 ADD A,B Combine the fire, up_down and left_right values
FEF2 ADD A,C
FEF3 RET Return
Prev: FEA3 Up: Map Next: FEF4