mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-28 09:30:41 +00:00
152 lines
2.0 KiB
ArmAsm
152 lines
2.0 KiB
ArmAsm
|
|
;==========================
|
|
; check keyboard
|
|
; for main game
|
|
;==========================
|
|
|
|
; Movement
|
|
; Note in the game, pressing a key starts walking
|
|
; To stop you have to press the same direction again
|
|
|
|
; Text
|
|
; We require ENTER/RETURN pressed before entering text
|
|
; this is mildly annoying, but lets us use
|
|
; WASD to walk. The Apple II+ doesn't have
|
|
; up or down buttons
|
|
|
|
check_keyboard:
|
|
|
|
lda KEYPRESS
|
|
bmi key_was_pressed
|
|
rts
|
|
|
|
key_was_pressed:
|
|
|
|
and #$7f ; strip off high bit
|
|
|
|
;==========================
|
|
; Left
|
|
;==========================
|
|
check_left:
|
|
cmp #$8
|
|
beq left_pressed
|
|
cmp #'A'
|
|
bne check_right
|
|
left_pressed: ; if peasant_moving_left, stop
|
|
; otherwise clear all movement, move left
|
|
|
|
ldx PEASANT_XADD
|
|
|
|
jsr stop_peasant
|
|
|
|
cpx #$FF ; if not left, start moving left
|
|
beq continue_left
|
|
|
|
lda #$FF ; move left
|
|
sta PEASANT_XADD
|
|
|
|
continue_left:
|
|
lda #PEASANT_DIR_LEFT
|
|
sta PEASANT_DIR
|
|
|
|
jmp done_check_keyboard
|
|
|
|
check_right:
|
|
cmp #$15
|
|
beq right_pressed
|
|
cmp #'D'
|
|
bne check_up
|
|
right_pressed:
|
|
|
|
ldx PEASANT_XADD
|
|
|
|
jsr stop_peasant
|
|
|
|
cpx #$1 ; if already right, stop
|
|
beq continue_right
|
|
|
|
lda #$1
|
|
sta PEASANT_XADD
|
|
|
|
continue_right:
|
|
lda #PEASANT_DIR_RIGHT
|
|
sta PEASANT_DIR
|
|
|
|
jmp done_check_keyboard
|
|
|
|
check_up:
|
|
cmp #'W'
|
|
beq up_pressed
|
|
cmp #$0B
|
|
bne check_down
|
|
|
|
up_pressed:
|
|
|
|
ldx PEASANT_YADD
|
|
|
|
jsr stop_peasant
|
|
|
|
cpx #$FC ; if already up, stop
|
|
beq continue_up
|
|
|
|
lda #$FC
|
|
sta PEASANT_YADD
|
|
|
|
continue_up:
|
|
|
|
lda #PEASANT_DIR_UP
|
|
sta PEASANT_DIR
|
|
|
|
|
|
jmp done_check_keyboard
|
|
|
|
check_down:
|
|
cmp #'S'
|
|
beq down_pressed
|
|
cmp #$0A
|
|
bne check_enter
|
|
|
|
down_pressed:
|
|
|
|
ldx PEASANT_YADD
|
|
|
|
jsr stop_peasant
|
|
|
|
cpx #$04 ; if already down, stop
|
|
beq continue_down
|
|
|
|
lda #$4
|
|
sta PEASANT_YADD
|
|
|
|
continue_down:
|
|
lda #PEASANT_DIR_DOWN
|
|
sta PEASANT_DIR
|
|
|
|
jmp done_check_keyboard
|
|
|
|
check_enter:
|
|
cmp #13
|
|
beq enter_pressed
|
|
cmp #' '
|
|
bne done_check_keyboard
|
|
enter_pressed:
|
|
jsr clear_bottom
|
|
jsr hgr_input
|
|
|
|
jsr parse_input
|
|
|
|
jsr clear_bottom
|
|
|
|
done_check_keyboard:
|
|
|
|
bit KEYRESET
|
|
|
|
rts
|
|
|
|
stop_peasant:
|
|
lda #0
|
|
sta PEASANT_XADD
|
|
sta PEASANT_YADD
|
|
rts
|
|
|