📄 200.asm
字号:
DJNZ R0,SETRP2 ; calculate 2**B (SHOULD BE 1, 2, 4 OR 8)
MUL AB ; (A+8) * 2**B
MOV B,A ; save the result
CLR C
SUBB A,#64
JC SETRP3 ; jump if intermediate result < 64
MOV A,B ; otherwise get back the result
MOV B,#10
DIV AB ; divide by 10
MOV B,#4
MUL AB ; we now have (((A+8) * 2**B) / 10) * 4
JMP SETRP4
SETRP3:
MOV A,#4
MUL AB ; now its ((A+8) * 2**B) * 4
MOV B,#10
DIV AB ; now its (((A+8) * 2**B) * 4) / 10
SETRP4:
MOV RepeatRate,A ; and finally done, save repeat rate
JMP RXEXIT
SETRP5:
CLR C ; test to see if byte is a new command
SUBB A,#0ECH
JC SETRP6
JMP AT_COMMAND ; go process,
SETRP6:
MOV A,#0FEH ; else, send RESEND command and try again
CALL SendResponse
JNC SETRP0 ; try to get data again
SETB ClockOut
SETB DataOut
SETB ClkIn
SETB DataIn
JNB ClkIn,SETRP6 ; if clock high and data low
JB DataIn,SETRP6
JMP FromHost? ; new command being sent
; SetScan sets the keyboard enable flag
SetScan:
POP DPL
POP DPH
SETB KbIsAble
; from here to jmp rxexit is used to control power up case
MOV A,#0FFH
JMP RXEXIT ; acknowledge was sent, so leave
; Setoff stops keyboard scanning, sets keyboard defaults and clears the fifos.
SetOff:
CLR KbIsAble ; stop keyboard scanning
CLR REPEATING
MOV LastDown,#0FFH ; stop any autorepeating
; SetDefa does the same thing as setoff, while scanning continues as it was.
SetDefa:
POP DPL
POP DPH
MOV RepeatRate,#10 ; set Default repeat rate
MOV RepeatDelay,#50 ; set Default repeat delay
MOV HeadPntr,#BufrLow ; clear FIFO
MOV TailPntr,#BufrLow
MOV DebncPtr,#DebncBot ; reset key debounce delay que
JMP RXEXIT
; DoReset performs a reset on the keyboard after the host gets un-busy
; the process can be interrupted by the host, if it does not release
; the clock line before it sends the data line low to send another command.
DoReset:
POP DPL
POP DPH
; let led on for diag purpose
SETB HostReset
CLR P1.0
MOV RptCtr,#127 ; make timer watchdog happy
LP3:
SETB ClockOut ; software watch
SETB DataOut
SETB ClkIn
SETB DataIn
JNB ClkIn,LP3 ; wait until Host sends clock line high
JB DataIn,RSET1 ; if data line low, host wants to send
JMP FromHost? ; so forget reset, process new command
RSET1:
CLR EA ; else, perform power up reset
MOV RepeatRate,#10 ; set Default repeat rate
MOV RepeatDelay,#50 ; set Default repeat delay
MOV HeadPntr,#BufrLow ; clear FIFO
MOV TailPntr,#BufrLow
MOV DebncPtr,#DebncBot ; reset key debounce delay que
SETB DoAAH ; tell initial to send power up code
; Add send echo #0AAH here to meet 486DX speed
JMP MAIN ; go do warm boot from initial
; SendOut is used by the AT message routines to send the last response
; byte and exit its function.
SendOut:
CALL SendResponse
JC SNDIT1
JMP RXEXIT
SNDIT1:
JNB ClkIn,SendOut
JB DataIn,SendOut
JMP FromHost?
;*****************************************
;(9) sends an acknowledge to the IBM AT
ACK: ; background
MOV A,#0FAH
CALL SendResponse
JNC ACK1
SETB ClockOut ; software watch
SETB DataOut
SETB ClkIn
SETB DataIn
JB ClkIn,ACK
JB DataIn,ACK
ACK1:
RET
;********************
;(10) Watch dog
;********************
WatchDog:
MOV PSW,#0 ; bank 0
DJNZ WatchCtr,W1 ; if watch count is 0
MOV A,WchDogByte
CJNE A,#0AAH,IV ; if timer modified watchdog memory
MOV WchDogByte,#55H ; then do: Reset watchdog memory
MOV WatchCtr,#100
W1:
RET
IV:
SETB WarmStart ; else, warm Boot Keyboard
JMP MAIN
;**************************************
;(11) test column for Key changes
;**************************************
; background, by Mark Chen
ScanColumn:
PUSH DPH
PUSH DPL
MOV DPTR,#Xmem
MOV A,#0FFH
MOVX @DPTR,A ; pull driver lines all high
MOV A,R1 ; get current Image address
ANL A,#7 ; get right digit
INC A
MOV R0,A ; store in temporary
MOV A,#80H
AdjustColumn:
RL A ; shift drive line bit into
DJNZ R0,AdjustColumn ; correct position, then
CPL A ; complement it
MOVX @DPTR,A ; zero column
CALL Clock20 ; delay for MATRIX to stabilize
MOVX A,@DPTR ; read rows
MOV R0,A ; store snapshot
CALL Clock20 ; delay again for a second look
MOVX A,@DPTR ; read again
ORL A,R0 ; combine the two snapshots
CPL A ; complement results so 1 is down key, 0 is up
XRL A,@R1 ; compare column data to previous status
POP DPL
POP DPH
RET
;*****************
KeyBase:
; A S L KEY
; T P O OFFSET LEGEND
; COLUMN 0
DB 6BH ,00100000B ; LEFT ARROW ;01H ,00000001B ;7 MENU(F9) row 7
DB 5AH ,00000000B ; ENTER ;0AH ,00000001B ;6 HELP(F8) row 6
DB 72H ,00100000B ; DOWN ARROW ;83H ,00000001B ;5 F7 row 5
DB 12H ,00000000B ;64 SHIFT
DB 49H ,00000001B ;38 . ;1AH ,00000000B ;55 Z row 7
DB 1AH ,00000000B ;2 Z ;0CH ,00000001B ;2 F4 row 2
DB 35H ,00000000B ;1 Y ;04H ,00000001B ;1 F3 row 1
DB 22H ,00000000B ;0 X ;06H ,00000001B ;0 F2 row 0
; COLUMN 1
DB 75H ,00100000B ;27 UP ARROW ;6CH ,00100000B ;15 HOME row 7
DB 74H ,00100000B ;36 RIGHT ARROW ;46H ,00000001B ;14 9 row 6
DB 1DH ,00000000B ;45 W ;3EH ,00000001B ;13 8 row 5
DB 2AH ,00000000B ;62 V ;3DH ,00000001B ;12 7 row 4
DB 3CH ,00000000B ;8 U ;4DH ,00000000B ;11 P row 3
DB 2CH ,00000000B ;42 T ;44H ,00000000B ;10 O row 2
DB 1BH ,00000000B ;52 S ;43H ,00000000B ;9 I row 1
DB 2DH ,00000000B ;43 R ;3CH ,00000000B ;8 U row 0
; COLUMN 2
DB 45H ,00000001B ;37 0 ;69H ,00100000B ;23 END row 7
DB 4EH ,00000001B ;19 - ;36H ,00000001B ;22 6 row 6
DB 15H ,00000000B ;46 Q ;2EH ,00000001B ;21 5 row 5
DB 4DH ,00000000B ;11 P ;25H ,00000001B ;20 4 row 4
DB 44H ,00000000B ;10 O ;4EH ,00000001B ;19 - row 3
DB 31H ,00000000B ;60 N ;4BH ,00000000B ;18 L row 2
DB 3AH ,00000000B ;24 M ;42H ,00000000B ;17 K row 1
DB 4BH ,00000000B ;18 L ;3BH ,00000000B ;16 J row 0
; COLUMN 3
DB 1EH ,00000001B ;29 2 ;4CH ,00000001B ;31 ; row 7
DB 16H ,00000001B ;28 1 ;26H ,00000001B ;30 3 row 6
DB 42H ,00000000B ;17 K ;1EH ,00000001B ;29 2 row 5
DB 3BH ,00000000B ;16 J ;16H ,00000001B ;28 1 row 4
DB 43H ,00000000B ;9 I ;75H ,00100000B ;27 UP ARROW row 3
DB 33H ,00000000B ;48 H ;70H ,00100000B ;26 INSERT row 2
DB 34H ,00000000B ;49 G ;71H ,00100000B ;25 DELETE row 1
DB 2BH ,00000000B ;50 F ;3AH ,00000000B ;24 M row 0
; COLUMN 4
DB 2EH ,00000001B ;21 5 ;5AH ,00000000B ;39 ENTER row 7
DB 25H ,00000001B ;20 4 ;49H ,00000001B ;38 . row 6
DB 24H ,00000000B ;44 E ;45H ,00000001B ;37 0 row 5
DB 23H ,00000000B ;51 D ;74H ,00100000B ;36 RIGHT ARROW row 4
DB 21H ,00000000B ;53 C ;72H ,00100000B ;35 DOWN ARROW row 3
DB 32H ,00000000B ;61 B ;6BH ,00100000B ;34 LEFT ARROW row 2
DB 1CH ,00000000B ;47 A ;12H ,00000000B ;33 SHIFT row 1
DB 4AH ,00000001B ; / ;7AH ,00100000B ;32 PAGE DOWN row 0
; COLUMN 5
DB 36H ,00000001B ;22 6 ;1CH ,00000000B ;47 A row 7
DB 46H ,00000001B ;14 9 ;15H ,00000000B ;46 Q row 6
DB 3EH ,00000001B ;13 8 ;1DH ,00000000B ;45 W row 5
DB 3DH ,00000001B ;12 7 ;24H ,00000000B ;44 E row 4
DB 7AH ,00100000B ;32 PAGE DOWN ;2DH ,00000000B ;43 R row 3
DB 3EH ,00000000B ; * ;2EH ,00000000B ; % row 5
DB 71H ,00100000B ;25 DELETE ;35H ,00000000B ;41 Y row 1
DB 70H ,00100000B ;26 INSERT ;05H ,00000001B ;40 F1 row 0
; COLUMN 6
DB 4CH ,00000001B ;31 ; ;1AH ,00000000B ;55 Z row 7
DB 26H ,00000001B ;30 3 ;22H ,00000000B ;54 X row 6
DB 01H ,00000001B ;7 MENU(F9) ;21H ,00000000B ;53 C row 5
DB 7DH ,00100000B ; PAGE UP ;1BH ,00000000B ;52 S row 4
DB 55H ,00000001B ; = ;4CH ,00000001B ; ; row 7
DB 29H ,00000000B ;57 SPACE BAR ;2BH ,00000000B ;50 F row 2
DB 0DH ,00000001B ;59 TAB ;34H ,00000000B ;49 G row 1
DB 76H ,00000000B ;58 ESC ;33H ,00000000B ;48 H row 0
; COLUMN 7
DB 0AH ,00000001B ;6 HELP(F8) ;00H ,00000000B ;63 DEAD POSITION row 7
DB 83H ,00000001B ;5 F7 ;2AH ,00000000B ;62 V row 6
DB 0BH ,00000001B ;4 F6 ;32H ,00000000B ;61 B row 5
DB 03H ,00000001B ;3 F5 ;31H ,00000000B ;60 N row 4
DB 0CH ,00000001B ;2 F4 ;0DH ,00000001B ;59 TAB row 3
DB 04H ,00000001B ;1 F3 ;76H ,00000000B ;58 ESC row 2
DB 06H ,00000001B ;0 F2 ;29H ,00000000B ;57 SPACE BAR row 1
DB 05H ,00000001B ;40 F1 ;7DH ,00100000B ;56 PAGE UP row 0
;++++++++++++++++++++++++++++
; SHIFT KEY BASE TABLE
;++++++++++++++++++++++++++++
ShiftKeyBase:
; COLUMN 0
DB 6BH ,00100000B ; LEFT ARROW ;01H ,00000001B ;7 MENU(F9) row 7
DB 5AH ,00000000B ; ENTER ;0AH ,00000001B ;6 HELP(F8) row 6
DB 72H ,00100000B ; DOWN ARROW ;83H ,00000001B ;5 F7 row 5
DB 12H ,00000000B ;64 SHIFT
DB 49H ,00000001B ;38 . ;1AH ,00000000B ;55 Z row 7
DB 1AH ,00000000B ;2 Z ;0CH ,00000001B ;2 F4 row 2
DB 35H ,00000000B ;1 Y ;04H ,00000001B ;1 F3 row 1
DB 22H ,00000000B ;0 X ;06H ,00000001B ;0 F2 row 0
; COLUMN 1
DB 75H ,00100000B ;27 UP ARROW ;6CH ,00100000B ; HOME row 7
DB 74H ,00100000B ;36 RIGHT ARROW ;49H ,00000000B ; > row 6
DB 1DH ,00000000B ;45 W ;4EH ,00000000B ; _ row 5
DB 2AH ,00000000B ;62 V ;41H ,00000000B ; < row 4
DB 3CH ,00000000B ;8 U ;3DH ,00000000B ; & row 3
DB 2CH ,00000000B ;42 T ;1EH ,00000000B ; @ row 2
DB 1BH ,00000000B ;52 S ;43H ,00000000B ;9 I row 1
DB 2DH ,00000000B ;43 R ;3CH ,00000000B ;8 U row 0
; COLUMN 2
DB 4CH ,00000000B ; : ;69H ,00100000B ; END row 7
DB 41H ,00000000B ; < ;55H ,00000001B ; = row 6
DB 15H ,00000000B ;46 Q ;45H ,00000000B ; ) row 5
DB 4DH ,00000000B ;11 P ;46H ,00000000B ; ( row 4
DB 44H ,00000000B ;10 O ;55H ,00000000B ; + row 3
DB 31H ,00000000B ;60 N ;4BH ,00000000B ;18 L row 2
DB 3AH ,00000000B ;24 M ;42H ,00000000B ;17 K row 1
DB 4BH ,00000000B ;18 L ;3BH ,00000000B ;16 J row 0
; COLUMN 3
DB 1EH ,00000001B ;29 2 ;4CH ,00000001B ;31 ; row 7
DB 16H ,00000001B ;28 1 ;26H ,00000001B ;30 3 row 6
DB 42H ,00000000B ;17 K ;4AH ,00000001B ; / row 5
DB 3BH ,00000000B ;16 J ;3EH ,00000000B ; * row 4
DB 43H ,00000000B ;9 I ;75H ,00100000B ;27 UP ARROW row 3
DB 33H ,00000000B ;48 H ;70H ,00100000B ;26 INSERT row 2
DB 34H ,00000000B ;49 G ;71H ,00100000B ;25 DELETE row 1
DB 2BH ,00000000B ;50 F ;3AH ,00000000B ;24 M row 0
; COLUMN 4
DB 2EH ,00000001B ;21 5 ;5AH ,00000000B ;39 ENTER row 7
DB 25H ,00000001B ;20 4 ;49H ,00000001B ;38 . row 6
DB 24H ,00000000B ;44 E ;41H ,00000001B ; , row 5
DB 23H ,00000000B ;51 D ;74H ,00100000B ; RIGHT ARROW row 4
DB 21H ,00000000B ;53 C ;72H ,00100000B ; DOWN ARROW row 3
DB 32H ,00000000B ;61 B ;66H ,00000000B ; BACK SPACE row 2
DB 1CH ,00000000B ;47 A ;12H ,00000000B ; SHIFT row 1
DB 4AH ,00000001B ; / ;7AH ,00100000B ; PAGE DOWN row 0
; COLUMN 5
DB 3DH ,00000000B ; & ;1CH ,00000000B ;47 A row 7
DB 4EH ,00000000B ; _ ;49H ,00000001B ;38 . row 6
DB 45H ,00000000B ; ) ;15H ,00000000B ; Q row 6
DB 46H ,00000000B ; ( ;2EH ,00000000B ; % row 5
DB 7AH ,00100000B ; PAGE DOWN ;2DH ,00000000B ; R row 3
DB 55H ,00000000B ; + ;2CH ,00000000B ; T row 2
DB 71H ,00100000B ;25 DELETE ;35H ,00000000B ; Y row 1
DB 70H ,00100000B ;26 INSERT ;05H ,00000001B ; F1 row 0
; COLUMN 6
DB 49H ,00000000B ; > ;1AH ,00000000B ; Z row 7
DB 5DH ,00000001B ; \ ;5DH ,00000001B ; \ row 6
DB 01H ,00000001B ;7 MENU(F9) ;21H ,00000000B ; C row 5
DB 7DH ,00100000B ; PAGE UP ;1BH ,00000000B ; S row 4
DB 26H ,00000000B ; # ;23H ,00000000B ; D row 3
DB 29H ,00000000B ; SPACE BAR ;2BH ,00000000B ; F row 2
DB 0DH ,00000001B ; TAB ;0EH ,00000000B ; ~ row 1
DB 76H ,00000000B ; ESC ;4CH ,00000000B ; : row 0
; COLUMN 7
DB 0AH ,00000001B ;6 HELP(F8) ;00H ,00000000B ; DEAD POSITION row 7
DB 83H ,00000001B ;5 F7 ;09H ,00000001B ; F10 row 6
DB 0BH ,00000001B ;4 F6 ;32H ,00000000B ;61 B row 5
DB 03H ,00000001B ;3 F5 ;31H ,00000000B ;60 N row 4
DB 0CH ,00000001B ;2 F4 ;0DH ,00000001B ;59 TAB row 3
DB 04H ,00000001B ;1 F3 ;76H ,00000000B ;58 ESC row 2
DB 06H ,00000001B ;0 F2 ;29H ,00000000B ;57 SPACE BAR row 1
DB 05H ,00000001B ;40 F1 ;7DH ,00100000B ;56 PAGE UP row 0
;************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -