?? key05r2.lst
字號:
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 1
1 *****************************************************
2 * *
3 * 101 Key, IBM Keyboard Decoder for 68HC705J1A. *
4 * *
5 * Craig Peacock (cpeacock@senet.com.au) *
6 * 6th May 1998 *
7 * *
8 * Includes ALTDEC & CTRLHEX Routines *
9 * *
10 *****************************************************
11
12 ; Port A
13
0300 14 nreset equ 5 ; Reset Output (Open Drain)
0300 15 clk equ 6 ; Clock I/O
0300 16 data equ 7 ; Data I/O
17
18 ; Port B
19
0300 20 TXD equ 5 ; Transmit Data
21
22 ; Equates for LED Byte
23
0300 24 pscrlck equ 4 ; If true, Scroll Lock Pressed
0300 25 pnumlck equ 3 ; If true, Num Lock Pressed
0300 26 caplock equ 2 ; If true, Caps Lock is On (Active)
0300 27 numlock equ 1 ; If true, Num Lock is On (Active)
0300 28 scrlock equ 0 ; If true, Scroll Lock is On (Active)
29
30 ; Equates for Status Flag, Byte
31
0300 32 rctrl equ 7 ; If true, Right Ctrl Pressed
0300 33 lctrl equ 6 ; If true, Left Ctrl Pressed
0300 34 ralt equ 5 ; If true, Right Alt Pressed
0300 35 lalt equ 4 ; If true, Left Alt Pressed
36
0300 37 caploc equ 2 ; If true, Caps Lock Pressed
0300 38 rshift equ 1 ; If true, Right Shift Key Pressed
0300 39 lshift equ 0 ; If true, Left Shift Key Pressed
40
00C0 41 org ram
42
00C0 43 byte rmb 1 ; Used to hold byte, during Trans & Rec
00C1 44 status rmb 1 ; Status Flags
00C2 45 LED rmb 1 ; LED Flags
00C3 46 asc rmb 3 ; Used for altdec & ctrlhex
00C6 47 PAR rmb 1 ; Used during receive for Parity Tracking
48
07F8 49 org $7F8
50
07F8 0300 51 dw start ; Timer Interrupt Vector
07FA 0300 52 dw start ; IRQ Vector
07FC 0300 53 dw start ; Software Interrupt Vector
07FE 0300 54 dw start ; Reset Vector
55
07F1 56 org $7F1 ; Mask Option Register (MOR)
07F1 20 57 db $20 ; Osc Internal Res Enabled
58
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 2
0300 59 org rom
60
0300 A600 61 start lda #%00000000 ;PORTA - Inputs
0302 B704 62 sta ddra ;Set Data Direction Register
0304 B710 63 sta pdra ;Enable Pull Downs
0306 B700 64 sta PORTA ;Set nReset, Clk & Data low
65
0308 A627 66 lda #%00100111 ;PORTB - I/O
030A B705 67 sta ddrb ;Set Data Direction Register
030C B711 68 sta pdrb ;Dis/enable Pull Downs
030E A620 69 lda #%00100000 ;Transmit Idle
0310 B701 70 sta PORTB
71
0312 CC031C 72 jmp rstflag ;No Attempt to Reset Keyboard made
73 ;as keyboard would still be in POST
74 ;or BAT Tests, if power applied at
75 ;the same time than the HC705.
76
77 *****************************************************
78 * *
79 * reset - Sends a Reset Command to the Keyboard. *
80 * Not a very good effort to reset keyboard, *
81 * as it doesn't check for ACK or BAT *
82 * Completion Code. I.e. Reset may not of *
83 * even Worked! *
84 * *
85 *****************************************************
86
0315 A6FF 87 reset lda #$FF ;Reset Keyboard
0317 B7C0 88 sta byte
0319 CD0497 89 jsr transmit
90
91 *****************************************************
92 * *
93 * rstflag - Resets Status and LED Flags. Used when *
94 * a successful Bat Completion code is *
95 * sent to sync keyboard's LED's to 705's *
96 * status register *
97 * *
98 *****************************************************
99
031C 3FC1 100 rstflag clr status
031E 3FC2 101 clr LED
102
103 *****************************************************
104 * *
105 * main - Main Keyboard Decoding Routine. Once key *
106 * been decoded, program should return here *
107 * *
108 *****************************************************
109
0320 CD04DE 110 main jsr Receive ;Get's a Single Byte from the Keyboard.
0323 B6C0 111 lda byte
112
0325 A1F0 113 cmp #$F0 ;A Key has been Released
0327 2603 114 bne main1
0329 CC0427 115 jmp release
116
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 3
032C A1AA 117 main1 cmp #$AA ;Successful Completion of BAT
032E 2603 118 bne main2
0330 CC031C 119 jmp rstflag
120
0333 A1E0 121 main2 cmp #$E0 ;Extended Keys
0335 2603 122 bne main3
0337 CC03D4 123 jmp extend
124
033A A112 125 main3 cmp #$12 ;Left Shift Key Pressed
033C 2602 126 bne main4
033E 10C1 127 bset lshift,status
128
0340 A159 129 main4 cmp #$59 ;Right Shift Key Pressed
0342 2602 130 bne main5
0344 12C1 131 bset rshift,status
132
0346 A114 133 main5 cmp #$14 ;Left Ctrl
0348 2605 134 bne main6
034A 1CC1 135 bset lctrl,status
034C CC058A 136 jmp clrasc
137
034F A111 138 main6 cmp #$11 ;Left Alt
0351 2605 139 bne main7
0353 18C1 140 bset lalt,status
0355 CC058A 141 jmp clrasc
142
0358 A158 143 main7 cmp #$58 ;Caps Lock Pressed
035A 2605 144 bne main8
035C 05C154 145 brclr caploc,status,caps
035F 14C1 146 bset caploc,status
147
0361 A17E 148 main8 cmp #$7E ;Scroll Lock Pressed
0363 2605 149 bne main9
0365 09C161 150 brclr pscrlck,status,scrl
0368 18C1 151 bset pscrlck,status
152
036A A177 153 main9 cmp #$77 ;Num Lock Pressed
036C 2605 154 bne main10
036E 07C14D 155 brclr pnumlck,status,nums
0371 16C1 156 bset pnumlck,status
157
0373 A18F 158 main10 cmp #$8F ;Last Value in Look-Up Table
0375 2503 159 blo main11
0377 CC0320 160 jmp main ;Out of Bounds
161
037A 97 162 main11 tax
037B 04C20C 163 brset caplock,LED,caps_on
037E 02C10F 164 brset rshift,status,shifton
0381 00C10C 165 brset lshift,status,shifton
166
0384 D605C8 167 cancel lda noshift,x ;Load Lower Case Values
0387 CC0393 168 jmp main12
169
038A 02C1F7 170 caps_on brset rshift,status,cancel ;If ShiftLock & Shift, Cancel
038D 00C1F4 171 brset lshift,status,cancel
172
0390 D60658 173 shifton lda shift,x ;Load Upper Case Values
174
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 4
0393 271B 175 main12 beq return ;Scan Code not in Lookup Table.
176
0395 97 177 tax
0396 B6C1 178 lda status
0398 A430 179 and #$30 ;Either Alt Key Pressed
039A 2704 180 beq main13
039C 9F 181 txa
039D CC053F 182 jmp altdec
183
03A0 B6C1 184 main13 lda status
03A2 A4C0 185 and #$C0 ;Either CTRL Key Pressed
03A4 2704 186 beq main14
03A6 9F 187 txa
03A7 CC0525 188 jmp ctrlhex
189
03AA 9F 190 main14 txa
03AB B7C0 191 sta byte
03AD CD0593 192 jsr RS232T ;Send to RS232
193
03B0 CC0320 194 return jmp main
195
196 *****************************************************
197 * *
198 * caps - Toggle Status of Caps lock and Echo to *
199 * Keyboard *
200 * *
201 *****************************************************
202
03B3 14C1 203 caps bset caploc,status ; Set caploc flag to prevent routine being
204 ; called again
03B5 B6C2 205 lda LED
03B7 A804 206 eor #$04 ; Toggle Shift Lock Flag
03B9 B7C2 207 sta LED
03BB CC0479 208 jmp LEDshow
209
210 *****************************************************
211 * *
212 * nums - Toggle Status of Nums lock and Echo to *
213 * Keyboard *
214 * *
215 *****************************************************
216
03BE 16C1 217 nums bset pnumlck,status
218
03C0 B6C2 219 lda LED
03C2 A802 220 eor #$02
03C4 B7C2 221 sta LED
03C6 CC0479 222 jmp LEDshow
223
224 *****************************************************
225 * *
226 * scrl - Toggle Status of Scroll lock and Echo to *
227 * Keyboard *
228 * *
229 *****************************************************
230
03C9 18C1 231 scrl bset pscrlck,status
232
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 5
03CB B6C2 233 lda LED
03CD A801 234 eor #$01
03CF B7C2 235 sta LED
03D1 CC0479 236 jmp LEDshow
237
238 *****************************************************
239 * *
240 * extend - An Extended Key has been Pressed *
241 * *
242 *****************************************************
243
03D4 CD04DE 244 extend jsr Receive ;Get Next byte
03D7 B6C0 245 lda byte
246
03D9 A1F0 247 cmp #$F0 ;An Extended Key Has been Released
03DB 2603 248 bne extend1
03DD CC045F 249 jmp rel_ext
250
03E0 A111 251 extend1 cmp #$11 ;Right Alt Pressed
03E2 2605 252 bne extend2
03E4 1AC1 253 bset ralt,status
03E6 CC058A 254 jmp clrasc
255
03E9 A114 256 extend2 cmp #$14 ;Right Ctrl Pressed
03EB 2605 257 bne extend3
03ED 1EC1 258 bset rctrl,status
03EF CC058A 259 jmp clrasc
260
03F2 A171 261 extend3 cmp #$71 ;Delete
03F4 2618 262 bne extend4
03F6 B6C1 263 lda status
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -