📄 option.asm
字号:
inc key_num
scan_b4_loop1:
bne scan_b4_loop
nop
lda key_num
cmp #2
bcc scan_b5
jmp scan_key_end
scan_b5:
lda #11100000b
sta IOBDIR
sta IOBPLH
lda #11011111b
and IOB
ora #00011111b
sta IOB
lda IOAPAD
eor #0FFH
beq scan_key_end
sta temp2
and key_temp
cmp key_temp
bne scan_b5_loop
eor #0ffh
and temp2
scan_b5_loop:
asl a
bcc scan_b5_loop1
inc key_num
scan_b5_loop1:
bne scan_b5_loop
nop
; jmp scan_key_end
scan_key_end:
rts
;************************************************
scan_option:
stz flag_temp
stz cnt
stz cnt0
stz cnt1
stz cnt2
stz cnt3
stz cnt4
stz cnt5
scan_iob0:
; lda #1
; sta temp1
; jsr delay100us
stz IOBPLH
nop
nop
lda #11000010b
sta IOBDIR
lda #11111101b
and IOB
sta IOB
lda #ffh
sta IOBPLH
nop
nop
jsr delay2ms
lda IOBPAD
and #00000001b
bne cnt_iob0
lda #00000010b
ora IOB
sta IOB
jsr delay2ms
lda IOBPAD
and #00000001b
beq cnt_iob0
inc cnt0
cnt_iob0:
inc cnt
lda cnt
cmp #4
bcc scan_iob0
lda cnt0
cmp #4
bcc reset_iob0
lda #00000001b
ora flag_temp
sta flag_temp
reset_iob0:
stz cnt
; stz cnt1
jsr scan_key
lda key_num
beq scan_iob1
jmp scan_option_end
scan_iob1:
; lda #1
; sta temp1
; jsr delay100us
stz IOBPLH
nop
nop
lda #11000100b
sta IOBDIR
lda #11111011b
and IOB
sta IOB
lda #ffh
sta IOBPLH
nop
nop
jsr delay2ms
lda IOBPAD
and #00000010b
bne cnt_iob1
lda #00000100b
ora IOB
sta IOB
jsr delay2ms
lda IOBPAD
and #00000010b
beq cnt_iob1
inc cnt1
cnt_iob1:
inc cnt
lda cnt
cmp #4
bcc scan_iob1
lda cnt1
cmp #4
bcc reset_iob1
lda #00000010b
ora flag_temp
sta flag_temp
reset_iob1:
stz cnt
; stz cnt2
jsr scan_key
lda key_num
beq scan_iob2
jmp scan_option_end
scan_iob2:
; lda #1
; sta temp1
; jsr delay100us
stz IOBPLH
nop
nop
lda #11001000b
sta IOBDIR
lda #11110111b
and IOB
sta IOB
lda #ffh
sta IOBPLH
nop
nop
jsr delay2ms
lda IOBPAD
and #00000100b
bne cnt_iob2
lda #00001000b
ora IOB
sta IOB
jsr delay2ms
lda IOBPAD
and #00000100b
beq cnt_iob2
inc cnt2
cnt_iob2:
inc cnt
lda cnt
cmp #4
bcc scan_iob2
lda cnt2
cmp #4
bcc reset_iob2
lda #00000100b
ora flag_temp
sta flag_temp
reset_iob2:
stz cnt
; stz cnt3
jsr scan_key
lda key_num
beq scan_iob3
jmp scan_option_end
scan_iob3:
; lda #1
; sta temp1
; jsr delay100us
stz IOBPLH
nop
nop
lda #11010000b
sta IOBDIR
lda #11101111b
and IOB
sta IOB
lda #ffh
sta IOBPLH
nop
nop
jsr delay2ms
lda IOBPAD
and #00001000b
bne cnt_iob3
lda #00010000b
ora IOB
sta IOB
jsr delay2ms
lda IOBPAD
and #00001000b
beq cnt_iob3
inc cnt3
cnt_iob3:
inc cnt
lda cnt
cmp #4
bcc scan_iob3
lda cnt3
cmp #4
bcc reset_iob3
lda #00001000b
ora flag_temp
sta flag_temp
reset_iob3:
stz cnt
; stz cnt4
jsr scan_key
lda key_num
beq scan_iob4
jmp scan_option_end
scan_iob4:
; lda #1
; sta temp1
; jsr delay100us
stz IOBPLH
nop
nop
lda #11100000b
sta IOBDIR
lda #11011111b
and IOB
sta IOB
lda #ffh
sta IOBPLH
nop
nop
jsr delay2ms
lda IOBPAD
and #00010000b
bne cnt_iob4
lda #00100000b
ora IOB
sta IOB
jsr delay2ms
lda IOBPAD
and #00010000b
beq cnt_iob4
inc cnt4
cnt_iob4:
inc cnt
lda cnt
cmp #4
bcc scan_iob4
lda cnt4
cmp #4
bcc reset_iob4
lda #00010000b
ora flag_temp
sta flag_temp
reset_iob4:
; stz cnt
; stz cnt5
jsr scan_key
lda key_num
bne scan_option_end
lda flag_temp
sta flag_iob
scan_option_end:
stz IRQEVT
lda #11000000B
sta IOBDIR
nop
nop
rts
;************************************************
delay100us:
stz IRQEVT
; lda #ffh
; sta IOBDIR
; stz IOB
lda #40
sta delayram
delay100us1:
nop
nop
dec delayram
bne delay100us1
dec temp1
bne delay100us
rts
;************************************************
delay2ms:
stz IRQEVT
lda #10h ;32h/400us ;ffh/2ms
sta delayram
delay2ms1:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
dec delayram
bne delay2ms1
rts
;************************************************
Irq_Isr:
rti
;************************************************
.ORG fffch
.DW Reset
.DW Irq_Isr
;************************************************
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -