mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-28 09:30:41 +00:00
184 lines
2.8 KiB
ArmAsm
184 lines
2.8 KiB
ArmAsm
|
|
;==============================
|
|
; Get Keypress
|
|
;==============================
|
|
; returns 0 if nothing pressed
|
|
|
|
; maps joystick to wasd and ' ' and return
|
|
; maps arrow keys to wasd
|
|
; handles sound enable and joystick enable
|
|
|
|
|
|
JS_BUTTON0 = 1
|
|
JS_BUTTON1 = 2
|
|
|
|
get_keypress:
|
|
|
|
; first handle joystick
|
|
lda JOYSTICK_ENABLED
|
|
beq actually_handle_keypress
|
|
|
|
; only check joystick every-other frame
|
|
lda FRAMEL
|
|
and #$1
|
|
beq actually_handle_keypress
|
|
|
|
check_button0:
|
|
lda PADDLE_BUTTON0
|
|
bpl button0_clear
|
|
|
|
lda JS_BUTTON_STATE
|
|
and #JS_BUTTON0
|
|
bne check_button1
|
|
|
|
lda #JS_BUTTON0 ; only register on release
|
|
ora JS_BUTTON_STATE
|
|
sta JS_BUTTON_STATE
|
|
lda #' '
|
|
jmp done_keypress
|
|
|
|
button0_clear:
|
|
lda JS_BUTTON_STATE
|
|
and #<(~JS_BUTTON0) ; hack
|
|
sta JS_BUTTON_STATE
|
|
jmp js_check
|
|
|
|
check_button1:
|
|
lda PADDLE_BUTTON1
|
|
bpl button1_clear
|
|
|
|
lda JS_BUTTON_STATE
|
|
and #JS_BUTTON1
|
|
bne js_check
|
|
|
|
lda #JS_BUTTON1 ; only register on release
|
|
ora JS_BUTTON_STATE
|
|
sta JS_BUTTON_STATE
|
|
lda #13
|
|
jmp done_keypress
|
|
|
|
button1_clear:
|
|
lda JS_BUTTON_STATE
|
|
and #<(~JS_BUTTON1)
|
|
sta JS_BUTTON_STATE
|
|
; jmp js_check
|
|
|
|
|
|
|
|
js_check:
|
|
jsr handle_joystick
|
|
|
|
js_check_left:
|
|
lda value0
|
|
cmp #$20
|
|
bcs js_check_right ; if less than 32, left
|
|
lda #'A'
|
|
jmp done_keypress
|
|
|
|
js_check_right:
|
|
cmp #$40
|
|
bcc js_check_up
|
|
lda #'D'
|
|
jmp done_keypress
|
|
|
|
js_check_up:
|
|
lda value1
|
|
cmp #$20
|
|
bcs js_check_down
|
|
lda #'W'
|
|
jmp done_keypress
|
|
|
|
js_check_down:
|
|
cmp #$40
|
|
bcc done_joystick
|
|
lda #'S'
|
|
jmp done_keypress
|
|
|
|
|
|
done_joystick:
|
|
|
|
|
|
|
|
actually_handle_keypress:
|
|
lda KEYPRESS
|
|
bmi keypress
|
|
|
|
jmp no_keypress
|
|
|
|
keypress:
|
|
and #$7f ; clear high bit
|
|
cmp #'A'
|
|
bcc check_sound ; make sure not to lose space/ctrl
|
|
and #$df ; convert lowercase to uppercase
|
|
|
|
check_sound:
|
|
cmp #$14 ; control-T
|
|
bne check_joystick
|
|
|
|
lda SOUND_STATUS
|
|
eor #SOUND_DISABLED
|
|
sta SOUND_STATUS
|
|
jmp no_keypress
|
|
|
|
; can't be ^J as that's the same as down
|
|
check_joystick:
|
|
cmp #'J' ; J
|
|
bne check_load
|
|
|
|
lda JOYSTICK_ENABLED
|
|
eor #1
|
|
sta JOYSTICK_ENABLED
|
|
jmp no_keypress
|
|
|
|
check_load:
|
|
; cmp #$C ; control-L
|
|
; bne check_save
|
|
|
|
; jsr load_game
|
|
; jmp done_keypress
|
|
|
|
check_save:
|
|
; cmp #$13 ; control-S
|
|
; bne check_left
|
|
|
|
; jsr save_game
|
|
; jmp done_keypress
|
|
|
|
check_left:
|
|
cmp #8 ; left key
|
|
bne check_right
|
|
left_pressed:
|
|
lda #'A'
|
|
bne done_keypress
|
|
|
|
check_right:
|
|
cmp #$15 ; right key
|
|
bne check_up
|
|
right_pressed:
|
|
lda #'D'
|
|
bne done_keypress
|
|
|
|
check_up:
|
|
cmp #$0B ; up key
|
|
bne check_down
|
|
up_pressed:
|
|
lda #'W'
|
|
bne done_keypress
|
|
|
|
check_down:
|
|
cmp #$0A ; down key
|
|
bne check_return
|
|
down_pressed:
|
|
lda #'S'
|
|
bne done_keypress
|
|
|
|
check_return:
|
|
jmp done_keypress
|
|
|
|
no_keypress:
|
|
lda #0
|
|
done_keypress:
|
|
|
|
bit KEYRESET
|
|
rts
|