.globl _ubox_read_ctl RDPSG = 0x0096 WRTPSG = 0x0093 SNSMAT = 0x0141 _ubox_read_ctl:: or a jr z, is_keyb dec a jr z, is_joy1 dec a jr z, is_joy2 xor a ret is_joy2: ; select ld e, #0xcf jr call_psg is_joy1: ; select ld e, #0x8f call_psg: ld a, #0x0f call WRTPSG ld a, #0x0e di call RDPSG ei cpl and #0x3f ld e, a ; button 2 (M) ld a, #4 call SNSMAT rra rra rra ld a, #0x20 jr nc, joy_extra_m xor a joy_extra_m: or e ret is_keyb: ; button 2 (M) ld a, #4 call SNSMAT rra rra rra ld e, #0x20 jr nc, is_keyb_dir ld e, #0 is_keyb_dir: ; direction ld a, #8 call SNSMAT cpl rrca rrca ld c, a and #4 ld b, a ; b has left ld a, c rrca rrca ld c, a and #0x18 or b ld b, a ; added space and right ld a, c rrca and #3 or b ; added down and up or e ; added 2nd fire (M) ret