Prev: F408 Up: Map Next: F43D
F41C: Menu key scan
This scans for keys that select an input device.
Used by the routine at check_menu_keys.
Output
A 0/1/2/3/4 if that key was pressed, or 255 if no relevant key was pressed.
menu_keyscan F41C LD BC,$F7FE Set BC to port_KEYBOARD_12345
F41F LD E,$00 Initialise a counter
F421 IN A,(C) Read the port
F423 CPL Invert the bits to turn active low into active high
F424 AND $0F Mask off bits for 1,2,3,4
F426 JR Z,mk_check_for_0 If none were pressed then check for zero
Which key was pressed?
F428 LD B,$04 Set B for 4 iterations
Start loop
mk_loop F42A RRA Shift out a bit
F42B INC E Increment the counter
F42C JR C,mk_found Did a bit carry out? Jump if so
F42E DJNZ mk_loop ...loop
mk_found F430 LD A,E Return 1..4
F431 RET
mk_check_for_0 F432 LD B,$EF Set BC to port_KEYBOARD_09876
F434 IN A,(C) Read the port
F436 AND $01 Was 0 pressed? (note active low)
F438 LD A,E Return 0 if so
F439 RET Z
F43A LD A,$FF Otherwise return $FF
F43C RET
Prev: F408 Up: Map Next: F43D