📄 keyscan.asm
字号:
;|---------------------------------------|
;|Program name : KeyScan.asm |
;|Use bady: 83137 |
;|Programer: Alton |
;| |
;|---------------------------------------|
.area Keyscan(code)
.OnOff EQU 0x80
.Power EQU 0x66
.DataLine2 EQU 00000100b
.DataLine7 EQU 01111111b
.D7D1D0 EQU 10000011b
.Line7 EQU 10000000b
;===========================================
.KeyScan::
lda #0h
sta PP
sta0 .KeyC
sta0 .KeyD
lda #.DataLine2 ;Start DataLine data
sta0 .KeyBuf1
lda #0ffh
sta PRT17
sta0 .KeyC
.StartCheck:
lda0 .KeyBuf1
xora #0ffh
sta PRTD
cmpe #.DataLine7 ;End DataLine data
brz .CheckKey
call .ScanLine
lda0 .KeyBuf1
rolc
anda #~01h
sta0 .KeyBuf1
lda0 .KeyD
cmpe #0h
brnz .CheckKey
br .StartCheck
.ScanLine:
lda PRT17
cmpe #0ffh
brz .CheckD7D0D1
sta0 .KeyC
lda0 .KeyBuf1
xora #0ffh
sta .KeyD
ret
.CheckD7D0D1:
lda PRTD
anda #.D7D1D0
cmpe #.D7D1D0
brz .EndLine
cmpe #01h
brz .PD01
cmpe #02h
brz .PD0
cmpe #81h
brz .PD01
cmpe #82h
brz .PD0
cmpe #03h
brz .PD07
ret
.PD0:
lda #0ffh
sta0 .KeyC
lda0 .KeyBuf1
xora #0ffh
sta0 .KeyD
ret
.PD01:
lda #7fh
sta0 .KeyD
lda0 .KeyBuf1
xora #0ffh
anda #~02h
sta0 .KeyC
ret
.PD07:
lda0 .KeyBuf1
cmpe #40h
brnz .EndLine
lda #0ffh
sta0 .KeyC
lda #066h
sta0 .KeyD
.EndLine:
ret
;-----------
.CheckKey:
lda0 .KeyC
cmpe #0ffh
brnz .CheckPd
lda0 .KeyD
cmpe #0ffh
brz .NoKeyCode
cmpe #0h
brz .NoKeyCode
cmpe #.Power
brnz .CheckPd
lda #0h
sta0 .KeyC
lda #.Power
sta0 .KeyD
br .CkRepeaterkey
.CheckPd:
lda0 .KeyC
xora #0ffh
sta0 .KeyC
lda0 .KeyD
xora #0ffh
sta0 .KeyD
call .TransCode
.CkRepeaterkey:
lda #0h
sta PP
lda0 .KeyC
ora .KeyD
sta0 .KeyD
lda0 .KeyBuf
suba .KeyD
brnz .SaveKey
lda0 .KeyCnt
inca
sta0 .KeyCnt
br .SaveKey
.NoKeyCode:
lda #>.Count
sta PP
lda #0h
sta .Count
sta0 .KeyCodeBuf
sta0 .KeyCnt
sta0 .KeyBuf
br .EndScan
.SaveKey:
lda0 .KeyD
sta0 .KeyBuf
lda0 .KeyCnt
anda #0fh
cmpe #03h ;check three times
brnc .EndScan
lda #0h
sta0 .KeyBuf
sta0 .KeyCnt
lda0 .KeyD
sta0 .KeyCodeBuf
.EndScan:
lda #0h
sta PP
ret
;===========================================
.TransCode:
.SftL0:
lda0 .KeyC
cmpe #0h
brnz .SftL1
lda #0h
br .SftR0
.SftL1:
cmpe #01h
brnz .SftL2
lda #80h
br .SftR0
.SftL2:
cmpe #02h
brnz .SftL3
lda #70h
br .SftR0
.SftL3:
cmpe #04h
brnz .SftL4
lda #60h
br .SftR0
.SftL4:
cmpe #10h
brnz .SftL5
lda #40h
br .SftR0
.SftL5:
cmpe #20h
brnz .SftL6
lda #30h
br .SftR0
.SftL6:
cmpe #40h
brnz .SftL7
lda #20h
br .SftR0
.SftL7:
cmpe #80h
brnz .SftL8
lda #10h
br .SftR0
.SftL8:
cmpe #08h
brnz .SftL9
lda #50h
br .SftR0
.SftL9:
cmpe #06h
brnz .SftLA
lda0 .KeyD
cmpe #.Line7
brnz .DualKey
lda #20h
br .SftR0
.SftLA:
cmpe #0ah
brnz .SftLB
lda0 .KeyD
cmpe #.Line7
brnz .DualKey
lda #30h
br .SftR0
.SftLB:
cmpe #12h
brnz .SftLC
lda0 .KeyD
cmpe #.Line7
brnz .DualKey
lda #40h
br .SftR0
.SftLC:
cmpe #22h
brnz .SftLD
lda0 .KeyD
cmpe #.Line7
brnz .DualKey
lda #50h
br .SftR0
.SftLD:
cmpe #042h
brnz .SftR0
lda0 .KeyD
cmpe #.Line7
brnz .DualKey
lda #10h
.SftR0:
sta0 .KeyC
lda0 .KeyD
cmpe #04h
brnz .SftR4
lda #02h
br .PosCD
.SftR4:
cmpe #08h
brnz .SftR5
lda #03h
br .PosCD
.SftR5:
cmpe #10h
brnz .SftR6
lda #04h
br .PosCD
.SftR6:
cmpe #20h
brnz .SftR7
lda #05h
br .PosCD
.SftR7:
cmpe #40h
brnz .SftR8
lda #06h
br .PosCD
.SftR8:
cmpe #80h
brnz .PosCD
lda #07h
.PosCD:
sta0 .KeyD
ret
.DualKey:
lda #0h
sta0 .KeyD
sta0 .KeyC
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -