📄 key05r2.asm
字号:
.pagewidth !160
*****************************************************
* *
* 101 Key, IBM Keyboard Decoder for 68HC705J1A. *
* *
* Craig Peacock (cpeacock@senet.com.au) *
* 6th May 1998 *
* *
* Includes ALTDEC & CTRLHEX Routines *
* *
*****************************************************
; Port A
nreset equ 5 ; Reset Output (Open Drain)
clk equ 6 ; Clock I/O
data equ 7 ; Data I/O
; Port B
TXD equ 5 ; Transmit Data
; Equates for LED Byte
pscrlck equ 4 ; If true, Scroll Lock Pressed
pnumlck equ 3 ; If true, Num Lock Pressed
caplock equ 2 ; If true, Caps Lock is On (Active)
numlock equ 1 ; If true, Num Lock is On (Active)
scrlock equ 0 ; If true, Scroll Lock is On (Active)
; Equates for Status Flag, Byte
rctrl equ 7 ; If true, Right Ctrl Pressed
lctrl equ 6 ; If true, Left Ctrl Pressed
ralt equ 5 ; If true, Right Alt Pressed
lalt equ 4 ; If true, Left Alt Pressed
caploc equ 2 ; If true, Caps Lock Pressed
rshift equ 1 ; If true, Right Shift Key Pressed
lshift equ 0 ; If true, Left Shift Key Pressed
org ram
byte rmb 1 ; Used to hold byte, during Trans & Rec
status rmb 1 ; Status Flags
LED rmb 1 ; LED Flags
asc rmb 3 ; Used for altdec & ctrlhex
PAR rmb 1 ; Used during receive for Parity Tracking
org $7F8
dw start ; Timer Interrupt Vector
dw start ; IRQ Vector
dw start ; Software Interrupt Vector
dw start ; Reset Vector
org $7F1 ; Mask Option Register (MOR)
db $20 ; Osc Internal Res Enabled
org rom
start lda #%00000000 ;PORTA - Inputs
sta ddra ;Set Data Direction Register
sta pdra ;Enable Pull Downs
sta PORTA ;Set nReset, Clk & Data low
lda #%00100111 ;PORTB - I/O
sta ddrb ;Set Data Direction Register
sta pdrb ;Dis/enable Pull Downs
lda #%00100000 ;Transmit Idle
sta PORTB
jmp rstflag ;No Attempt to Reset Keyboard made
;as keyboard would still be in POST
;or BAT Tests, if power applied at
;the same time than the HC705.
*****************************************************
* *
* reset - Sends a Reset Command to the Keyboard. *
* Not a very good effort to reset keyboard, *
* as it doesn't check for ACK or BAT *
* Completion Code. I.e. Reset may not of *
* even Worked! *
* *
*****************************************************
reset lda #$FF ;Reset Keyboard
sta byte
jsr transmit
*****************************************************
* *
* rstflag - Resets Status and LED Flags. Used when *
* a successful Bat Completion code is *
* sent to sync keyboard's LED's to 705's *
* status register *
* *
*****************************************************
rstflag clr status
clr LED
*****************************************************
* *
* main - Main Keyboard Decoding Routine. Once key *
* been decoded, program should return here *
* *
*****************************************************
main jsr Receive ;Get's a Single Byte from the Keyboard.
lda byte
cmp #$F0 ;A Key has been Released
bne main1
jmp release
main1 cmp #$AA ;Successful Completion of BAT
bne main2
jmp rstflag
main2 cmp #$E0 ;Extended Keys
bne main3
jmp extend
main3 cmp #$12 ;Left Shift Key Pressed
bne main4
bset lshift,status
main4 cmp #$59 ;Right Shift Key Pressed
bne main5
bset rshift,status
main5 cmp #$14 ;Left Ctrl
bne main6
bset lctrl,status
jmp clrasc
main6 cmp #$11 ;Left Alt
bne main7
bset lalt,status
jmp clrasc
main7 cmp #$58 ;Caps Lock Pressed
bne main8
brclr caploc,status,caps
bset caploc,status
main8 cmp #$7E ;Scroll Lock Pressed
bne main9
brclr pscrlck,status,scrl
bset pscrlck,status
main9 cmp #$77 ;Num Lock Pressed
bne main10
brclr pnumlck,status,nums
bset pnumlck,status
main10 cmp #$8F ;Last Value in Look-Up Table
blo main11
jmp main ;Out of Bounds
main11 tax
brset caplock,LED,caps_on
brset rshift,status,shifton
brset lshift,status,shifton
cancel lda noshift,x ;Load Lower Case Values
jmp main12
caps_on brset rshift,status,cancel ;If ShiftLock & Shift, Cancel
brset lshift,status,cancel
shifton lda shift,x ;Load Upper Case Values
main12 beq return ;Scan Code not in Lookup Table.
tax
lda status
and #$30 ;Either Alt Key Pressed
beq main13
txa
jmp altdec
main13 lda status
and #$C0 ;Either CTRL Key Pressed
beq main14
txa
jmp ctrlhex
main14 txa
sta byte
jsr RS232T ;Send to RS232
return jmp main
*****************************************************
* *
* caps - Toggle Status of Caps lock and Echo to *
* Keyboard *
* *
*****************************************************
caps bset caploc,status ; Set caploc flag to prevent routine being
; called again
lda LED
eor #$04 ; Toggle Shift Lock Flag
sta LED
jmp LEDshow
*****************************************************
* *
* nums - Toggle Status of Nums lock and Echo to *
* Keyboard *
* *
*****************************************************
nums bset pnumlck,status
lda LED
eor #$02
sta LED
jmp LEDshow
*****************************************************
* *
* scrl - Toggle Status of Scroll lock and Echo to *
* Keyboard *
* *
*****************************************************
scrl bset pscrlck,status
lda LED
eor #$01
sta LED
jmp LEDshow
*****************************************************
* *
* extend - An Extended Key has been Pressed *
* *
*****************************************************
extend jsr Receive ;Get Next byte
lda byte
cmp #$F0 ;An Extended Key Has been Released
bne extend1
jmp rel_ext
extend1 cmp #$11 ;Right Alt Pressed
bne extend2
bset ralt,status
jmp clrasc
extend2 cmp #$14 ;Right Ctrl Pressed
bne extend3
bset rctrl,status
jmp clrasc
extend3 cmp #$71 ;Delete
bne extend4
lda status
and #$C0 ;Either Alt Key Pressed?
beq extend4
lda status
and #$30 ;Either Ctrl Key Pressed?
beq extend4
bset nreset,DDRA
lda #$FF
jsr delay
bclr nreset,DDRA
jmp reset
extend4 cmp #$5A ;Enter Key on Num Keypad
bne extend5
lda #$0D
sta byte
jsr RS232T
extend5 cmp #$4A ; '/' Key on Num Keypad
bne extend6
lda #'/'
sta byte
jsr RS232T
extend6 jmp main ;Return to main
*****************************************************
* *
* release - A Key has been Released *
* *
*****************************************************
release jsr Receive ;Release - Next Byte Garbage in many cases
lda byte
releas3 cmp #$12 ;Left Shift Key Released
bne releas4
bclr lshift,status
releas4 cmp #$59 ;Right Shift Key Released
bne releas5
bclr rshift,status
releas5 cmp #$14 ;Left Ctrl Released
bne releas6
bclr lctrl,status
jmp ctrl_re
releas6 cmp #$11 ;Left Alt Released
bne releas7
bclr lalt,status
jmp alt_rel
releas7 cmp #$58 ;Caps Lock Released
bne releas8
bclr caploc,status
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -