mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-19 15:30:08 +00:00
242 lines
3.7 KiB
ArmAsm
242 lines
3.7 KiB
ArmAsm
|
|
;==============================
|
|
; Handle Keypress
|
|
;==============================
|
|
handle_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_button:
|
|
lda PADDLE_BUTTON0
|
|
bpl button_clear
|
|
|
|
lda JS_BUTTON_STATE
|
|
bne js_check
|
|
|
|
lda #1
|
|
sta JS_BUTTON_STATE
|
|
lda #' '
|
|
jmp handle_input
|
|
|
|
button_clear:
|
|
lda #0
|
|
sta JS_BUTTON_STATE
|
|
|
|
js_check:
|
|
; jsr handle_joystick
|
|
|
|
js_check_left:
|
|
; lda value0
|
|
; cmp #$20
|
|
; bcs js_check_right ; if less than 32, left
|
|
; lda #'A'
|
|
; bne handle_input
|
|
|
|
js_check_right:
|
|
cmp #$40
|
|
bcc js_check_up
|
|
lda #'D'
|
|
bne handle_input
|
|
|
|
js_check_up:
|
|
; lda value1
|
|
; cmp #$20
|
|
; bcs js_check_down
|
|
; lda #'W'
|
|
|
|
bne handle_input
|
|
|
|
js_check_down:
|
|
cmp #$40
|
|
bcc done_joystick
|
|
lda #'S'
|
|
bne handle_input
|
|
|
|
|
|
done_joystick:
|
|
|
|
|
|
|
|
actually_handle_keypress:
|
|
lda KEYPRESS
|
|
bmi keypress
|
|
|
|
jmp no_keypress
|
|
|
|
keypress:
|
|
and #$7f ; clear high bit
|
|
cmp #' '
|
|
beq handle_input ; make sure not to lose space
|
|
and #$df ; convert uppercase to lower case
|
|
|
|
|
|
handle_input:
|
|
|
|
pha
|
|
jsr restore_bg_14x14 ; restore old background
|
|
inc UPDATE_POINTER
|
|
pla
|
|
|
|
;check_sound:
|
|
; cmp #$14 ; control-T
|
|
; bne check_joystick
|
|
;
|
|
; lda SOUND_STATUS
|
|
; eor #SOUND_DISABLED
|
|
; sta SOUND_STATUS
|
|
; jmp done_keypress
|
|
|
|
; can't be ^J as that's the same as down
|
|
;check_joystick:
|
|
; cmp #$10 ; control-P
|
|
; cmp #'J'
|
|
; bne check_load
|
|
|
|
; lda JOYSTICK_ENABLED
|
|
; eor #1
|
|
; sta JOYSTICK_ENABLED
|
|
; jmp done_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 #'A'
|
|
beq left_pressed
|
|
cmp #8 ; left key
|
|
bne check_right
|
|
left_pressed:
|
|
lda CURSOR_X ; if 41<x<$FE don't decrement
|
|
cmp #41
|
|
bcc do_dec_cursor_x
|
|
cmp #$FE
|
|
bcc done_left_pressed
|
|
do_dec_cursor_x:
|
|
dec CURSOR_X
|
|
done_left_pressed:
|
|
jmp done_keypress
|
|
|
|
check_right:
|
|
cmp #'D'
|
|
beq right_pressed
|
|
cmp #$15 ; right key
|
|
bne check_up
|
|
right_pressed:
|
|
lda CURSOR_X ; if 40<x<$FE don't increment
|
|
cmp #40
|
|
bcc do_inc_cursor_x
|
|
cmp #$FE
|
|
bcc done_right_pressed
|
|
do_inc_cursor_x:
|
|
inc CURSOR_X
|
|
done_right_pressed:
|
|
jmp done_keypress
|
|
|
|
check_up:
|
|
cmp #'W'
|
|
beq up_pressed
|
|
cmp #$0B ; up key
|
|
bne check_down
|
|
up_pressed:
|
|
lda CURSOR_Y ; if 191<y<$F0 don't decrement
|
|
cmp #191
|
|
bcc do_dec_cursor_y
|
|
cmp #$F0
|
|
bcc done_up_pressed
|
|
do_dec_cursor_y:
|
|
dec CURSOR_Y
|
|
dec CURSOR_Y
|
|
dec CURSOR_Y
|
|
dec CURSOR_Y
|
|
|
|
done_up_pressed:
|
|
jmp done_keypress
|
|
|
|
check_down:
|
|
cmp #'S'
|
|
beq down_pressed
|
|
cmp #$0A
|
|
bne check_return
|
|
down_pressed:
|
|
lda CURSOR_Y ; if 191<y<$EE don't decrement
|
|
cmp #191
|
|
bcc do_inc_cursor_y
|
|
cmp #$EE
|
|
bcc done_down_pressed
|
|
do_inc_cursor_y:
|
|
inc CURSOR_Y
|
|
inc CURSOR_Y
|
|
inc CURSOR_Y
|
|
inc CURSOR_Y
|
|
done_down_pressed:
|
|
jmp done_keypress
|
|
|
|
;check_escape:
|
|
; cmp #27
|
|
; bne check_return
|
|
;escape_pressed:
|
|
; inc ESCAPE_PRESSED
|
|
|
|
; jmp done_keypress
|
|
|
|
check_return:
|
|
cmp #' '
|
|
beq return_pressed
|
|
cmp #13
|
|
bne done_keypress
|
|
|
|
return_pressed:
|
|
|
|
; lda IN_SPECIAL
|
|
; beq not_special_return
|
|
|
|
;special_return:
|
|
; jsr handle_special
|
|
|
|
; special case, don't make cursor visible
|
|
; jmp no_keypress
|
|
|
|
;not_special_return:
|
|
|
|
; lda IN_RIGHT
|
|
; beq not_right_return
|
|
|
|
; cmp #1
|
|
; beq right_return
|
|
|
|
;right_uturn:
|
|
; jsr uturn
|
|
; jmp no_keypress
|
|
|
|
;right_return:
|
|
; jsr turn_right
|
|
jmp no_keypress
|
|
|
|
done_keypress:
|
|
lda #1 ; make cursor visible
|
|
sta CURSOR_VISIBLE
|
|
|
|
no_keypress:
|
|
bit KEYRESET
|
|
rts
|
|
|
|
|