📄 keyscan.asm
字号:
;****************************************************************************
;This program abstracted from a real project is based on 80196.
;Variables definitions are omitted. They differ from the article. Please
;refer to the article attached.
;****************************************************************************
;CONSTANTS
K_ALT EQU 39
K_SHIFT EQU 38
KCHAR_MAX EQU 180
;****************************************************************************
;KEY PROCESSING PROGRAM
KEY: CMPB KYFLG,#01
JE KEY1
CMPB KYFLG,#60
JNE KEY2
LDB KYFLG,#40
KEY11: LDB P1IMG,#11111110B
STB P1IMG,P1
LDB CL,#-1
LD SI,#KBUF
KEY12: LCALL INKY
JE KEY13
LDB BH,#10
KEY15: INCB CL
SHR AX,#1
JC KEY14
STB CL,[SI]+
CMP SI,#KBUF+2
JE KEY3
KEY14: DJNZ BH,KEY15
KEY16: SHLB P1IMG,#1
JC KEY12M
CMP SI,#KBUF
JE KEY21
KEY17: LDB AL,KBUF[0]
KEY18: LD BX,#KCTAB
LDB AH,#0
ADD BX,AX
LDB KV,[BX]
SJMP SSJP
KEY12M: ORB P1IMG,#01H
STB P1IMG,P1
SJMP KEY12
KEY13: ADDB CL,#10
SJMP KEY16
KEY1: INCB KYFLG
SJMP KEY11
KEY2: LDB P1IMG,#00H
STB P1IMG,P1
LCALL INKY
JE KEY21
KEY22: INCB KYFLG
SJMP KRET
KEY21: LDB KYFLG,#0
KRET: RET
KEY3: LD BX,#0200H
KEY33: DEC SI
LDB FL,[SI]
CMPB FL,#K_ALT
JE KEY31
LDB FL,[SI]
CMPB FL,#K_SHIFT
JNE KEY32
LDB DL,#160
STB DL,[SI]
KEY34: LDB BL,#1
KEY32: DJNZ BH,KEY33
CMPB BL,#1
JNE KEY17
ADDB AL,KBUF,KBUF+1
SJMP KEY18
KEY31: LDB DL,#80
STB DL,[SI]
SJMP KEY34
INKY: LDB AH,P2
LDB AL,P0
SHRB AH,#3
AND AX,#03FFH
CMP AX,#03FFH
RET
SSJP: CMPB KV,#KCHAR_MAX
JC SSJP1
LCALL EDIT
RET
SSJP1: CMPB KV,#255
JE KRET
SUBB K_CMD,KV,#KCHAR_MAX
CLRB BH
LDB BL,K_CMD
ADD BX,BX
ADDB BL,K_CMD
ADDCB BH,0
ADD BX,#KCMDJP
BR [BX]
KCMDJP: LJMP DELETE ;K_CMD #180
LJMP SHUTDOWN ;K_CMD #181
LJMP CANCEL ;K_CMD #182
LJMP AFFIRM ;K_CMD #183
LJMP UP_ARROW ;K_CMD #184
LJMP HEAD ;K_CMD #185
LJMP HV ;K_CMD #186
LJMP HELP ;K_CMD #187
LJMP PRINT ;K_CMD #188
LJMP R_ARROW ;K_CMD #189
LJMP DN_ARROW ;K_CMD #190
LJMP L_ARROW ;K_CMD #191
LJMP QUIT ;K_CMD #192
LJMP PAGE_DN ;K_CMD #193
LJMP FUNC_F3 ;K_CMD #194
LJMP FUNC_F2 ;K_CMD #195
LJMP FUNC_F1 ;K_CMD #196
LJMP ALT_PGDN ;K_CMD #197
LJMP ALT_F1 ;K_CMD #198
LJMP ALT_F2 ;K_CMD #199
LJMP ALT_F3 ;K_CMD #200
;--------------KEY VALUE----KEY CODE---MEANING
KCTAB: DB 10 ;K0 'A'
DB 11 ;K1 'B'
DB 12 ;K2 'C'
DB 13 ;K3 'D'
DB 14 ;K4 'E'
DB 15 ;K5 'F'
DB 16 ;K6 'G'
DB 17 ;K7 'H'
DB 18 ;K8 'I'
DB 19 ;K9 'J'
DB 23 ;K10 'N'
DB 24 ;K11 'O'
DB 25 ;K12 'P'
DB 26 ;K13 'Q'
DB 27 ;K14 'R'
DB 28 ;K15 'S'
DB 29 ;K16 'T'
DB 30 ;K17 'U'
DB 31 ;K18 'V'
DB 32 ;K19 'W'
DB 120 ;K20 '1/2'
DB 67 ;K21 '%'
DB 122 ;K22 ''C' ,DEGREE
DB 90 ;K23 '{'
DB 85 ;K24 '['
DB 71 ;K25 '('
DB 69 ;K26 '&'
DB 78 ;K27 '/'
DB 96 ;K28 ' ' ,LIFT "
DB 98 ;K29 '`' ,LIFT '
DB 79 ;K30 ':'
DB 76 ;K31 '-' ,MINUS
DB 77 ;K32 '.'
DB 88 ;K33 '^'
DB 62 ;K34 ' ' ,SPACE
DB 196 ;K35 CMD--F1
DB 195 ;K36 CMD--F2
DB 194 ;K37 CMD--F3
DB 255 ;K38 NONE(SHIFT)
DB 255 ;K39 NONE(ALT)
DB 20 ;K40 'K'
DB 21 ;K41 'L'
DB 22 ;K42 'M'
DB 1 ;K43 '1'
DB 2 ;K44 '2'
DB 3 ;K45 '3'
DB 193 ;K46 CMD--DOWN
DB 185 ;K47 CMD--HEAD
DB 187 ;K48 CMD--HELP
DB 182 ;K49 CMD--BACK
DB 33 ;K50 'X'
DB 34 ;K51 'Y'
DB 35 ;K52 'Z'
DB 4 ;K53 '4'
DB 5 ;K54 '5'
DB 6 ;K55 '6'
DB 191 ;K56 CMD--LIFT ARROW
DB 184 ;K57 CMD--UP ARROW
DB 190 ;K58 CMD--DOWN ARROW
DB 189 ;K59 CMD--RIGHT ARROW
DB 75 ;K60 ','
DB 103 ;K61 'Y=',YUN
DB 65 ;K62 '#'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -