📄 key05r2.lst
字号:
03F8 A4C0 264 and #$C0 ;Either Alt Key Pressed?
03FA 2712 265 beq extend4
03FC B6C1 266 lda status
03FE A430 267 and #$30 ;Either Ctrl Key Pressed?
0400 270C 268 beq extend4
0402 1A04 269 bset nreset,DDRA
0404 A6FF 270 lda #$FF
0406 CD05C4 271 jsr delay
0409 1B04 272 bclr nreset,DDRA
040B CC0315 273 jmp reset
274
040E A15A 275 extend4 cmp #$5A ;Enter Key on Num Keypad
0410 2607 276 bne extend5
0412 A60D 277 lda #$0D
0414 B7C0 278 sta byte
0416 CD0593 279 jsr RS232T
280
0419 A14A 281 extend5 cmp #$4A ; '/' Key on Num Keypad
041B 2607 282 bne extend6
041D A62F 283 lda #'/'
041F B7C0 284 sta byte
0421 CD0593 285 jsr RS232T
286
0424 CC0320 287 extend6 jmp main ;Return to main
288
289 *****************************************************
290 * *
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 6
291 * release - A Key has been Released *
292 * *
293 *****************************************************
294
0427 CD04DE 295 release jsr Receive ;Release - Next Byte Garbage in many cases
042A B6C0 296 lda byte
297
042C A112 298 releas3 cmp #$12 ;Left Shift Key Released
042E 2602 299 bne releas4
0430 11C1 300 bclr lshift,status
301
0432 A159 302 releas4 cmp #$59 ;Right Shift Key Released
0434 2602 303 bne releas5
0436 13C1 304 bclr rshift,status
305
0438 A114 306 releas5 cmp #$14 ;Left Ctrl Released
043A 2605 307 bne releas6
043C 1DC1 308 bclr lctrl,status
043E CC0574 309 jmp ctrl_re
310
0441 A111 311 releas6 cmp #$11 ;Left Alt Released
0443 2605 312 bne releas7
0445 19C1 313 bclr lalt,status
0447 CC0556 314 jmp alt_rel
315
044A A158 316 releas7 cmp #$58 ;Caps Lock Released
044C 2602 317 bne releas8
044E 15C1 318 bclr caploc,status
319
0450 A17E 320 releas8 cmp #$7E ;Scroll Lock Released
0452 2602 321 bne releas9
0454 19C1 322 bclr pscrlck,status
323
0456 A177 324 releas9 cmp #$77 ;Num Lock Released
0458 2602 325 bne relea10
045A 17C1 326 bclr pnumlck,status
327
045C CC0320 328 relea10 jmp main ;Return to Main
329
330 *****************************************************
331 * *
332 * rel_ext - An Extended Key has been Released *
333 * *
334 *****************************************************
335
045F CD04DE 336 rel_ext jsr Receive ;Get Next byte
0462 B6C0 337 lda byte
338
0464 A111 339 cmp #$11 ;Right Alt Released
0466 2605 340 bne rel_ex2
0468 1BC1 341 bclr ralt,status
046A CC0556 342 jmp alt_rel
343
046D A114 344 rel_ex2 cmp #$14 ;Right Ctrl Released
046F 2605 345 bne rel_ex3
0471 1FC1 346 bclr rctrl,status
0473 CC0574 347 jmp ctrl_re
348
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 7
0476 CC0320 349 rel_ex3 jmp main ;Return to main
350
351 *****************************************************
352 * *
353 * LEDshow - Copies the 3 LSB of the LED register to *
354 * keyboard for the keyboards Status LED's *
355 * E.g. Num Lock, Caps Lock, Scroll Lock *
356 * Also makes their status present on *
357 * PORTB *
358 * *
359 *****************************************************
360
0479 B6C2 361 LEDshow lda LED
047B AA20 362 ora #$20 ;Set TXD High
047D A427 363 and #$27
047F B701 364 sta PORTB ;Made Status Avalible at PORTB
0481 A6ED 365 lda #$ED
0483 B7C0 366 sta byte
0485 CD0497 367 jsr transmit
0488 CD04DE 368 jsr Receive
048B B6C2 369 lda LED
048D A407 370 and #$07
048F B7C0 371 sta byte
0491 CD0497 372 jsr transmit
0494 CC0320 373 jmp main
374
375 *****************************************************
376 * *
377 * Transmit - Send Data stored at Byte to the *
378 * Keyboard. Result *
379 * *
380 *****************************************************
381
382 transmit
0497 AE08 383 ldx #$08 ;8 Data Bits
0499 1C04 384 bset clk,DDRA ;Set Clock Low
049B A613 385 lda #$13 ;Delay 64uS
049D CD05C4 386 jsr delay
04A0 4F 387 clra ;Clear Parity Register
04A1 1E04 388 bset data,DDRA ;Set Data Low
04A3 1D04 389 bclr clk,DDRA ;Release Clock Line
04A5 CD051E 390 jsr highlow
391
04A8 36C0 392 loop ror byte
04AA 2505 393 bcs mark
394
04AC 1E04 395 space bset data,DDRA ;Clear Bit
04AE CC04B4 396 jmp next
397
04B1 1F04 398 mark bclr data,DDRA ;Clear Bit
04B3 4C 399 inca ;Parity Calculation
400
04B4 CD051E 401 next jsr highlow ;Wait for high to low transition
402
04B7 5A 403 decx
04B8 26EE 404 bne loop
405
04BA A401 406 and #$01
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 8
04BC 2605 407 bne clr_par
04BE 1F04 408 set_par bclr data,DDRA
04C0 CC04C5 409 jmp tr_ackn
04C3 1E04 410 clr_par bset data,DDRA
04C5 CD051E 411 tr_ackn jsr highlow
412
04C8 1F04 413 bclr data,DDRA ;Release Data Line
04CA CD051E 414 jsr highlow
04CD 0E0006 415 brset data,PORTA,error ;Check for Ack
04D0 0D00FD 416 brclr clk,PORTA,* ;Wait for idle line
417
04D3 1C04 418 bset clk,DDRA ;Prevent Keyboard from sending data
419 ;(Clear to Send)
04D5 81 420 rts
421
04D6 A6FF 422 error lda #$FF ;Reset
04D8 B7C0 423 sta byte
04DA CD0497 424 jsr transmit
04DD 81 425 rts
426
427 *****************************************************
428 * *
429 * Receive - Get a Byte from the Keyboard. Result *
430 * stored in byte. *
431 * *
432 *****************************************************
433
04DE AE08 434 Receive ldx #08 ;Number of Bits
04E0 3FC6 435 clr PAR ;Clear Parity Register
04E2 1D04 436 bclr clk,DDRA ;Clear to Send
437
04E4 0C00FD 438 brset clk,PORTA,* ;wait for idle Clock
04E7 0E00F4 439 brset data,PORTA,Receive ;False Start Bit, Restart
440
04EA 36C0 441 Recdata ror byte
04EC CD051E 442 jsr highlow ;Wait for high to low Transision
04EF 0E0005 443 brset data,PORTA,Recset
444
04F2 1FC0 445 bclr 7,byte
04F4 CC04FB 446 jmp Recnext
447
04F7 1EC0 448 Recset bset 7,byte
04F9 3CC6 449 inc PAR
450
04FB 5A 451 Recnext decx
04FC 26EC 452 bne Recdata ;Loop until 8 bits been received
453
04FE CD051E 454 jsr highlow
455
0501 B600 456 lda PORTA ;Read Parity Bit
0503 49 457 rola ;Place in LSbit
0504 49 458 rola
0505 B8C6 459 eor PAR ;Parity Bit Detection
0507 A401 460 and #$01
0509 2709 461 beq r_error
462
050B CD051E 463 jsr highlow
050E 0F0003 464 brclr data,PORTA,r_error ;Stop Bit Detection
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 9
465
0511 1C04 466 bset clk,DDRA ;Prevent Keyboard from sending data
467 ;(Clear to Send)
0513 81 468 rts
469
0514 A6FE 470 r_error lda #$FE ;Resend
0516 B7C0 471 sta byte
0518 CD0497 472 jsr Transmit
051B CC04DE 473 jmp Receive ;Try again
474
475 *****************************************************
476 * *
477 * highlow - Waits for next High to Low Transistion *
478 * on the Clock Line *
479 * *
480 *****************************************************
481
482
051E 0D00FD 483 highlow brclr clk,PORTA,* ;Loop until Clk High
0521 0C00FD 484 brset clk,PORTA,* ;Loop until Clk Low
0524 81 485 rts
486
487 *****************************************************
488 * *
489 * ctrlhex & althex - Make sure keys pressed are *
490 * valid. If not, don't store them. Also converts *
491 * ASCII to binary and stores them in the ASCII *
492 * Storage Location *
493 * *
494 *****************************************************
495
0525 A161 496 ctrlhex cmp #'a' ;Convert 'a' - 'f' to binary
0527 2509 497 blo he1_ran
0529 A166 498 cmp #'f'
052B 2226 499 bhi outrang
052D A057 500 sub #$57
052F CC0549 501 jmp store
502
0532 A141 503 he1_ran cmp #'A' ;Convert 'A' - 'F' to binary
0534 2509 504 blo altdec
0536 A146 505 cmp #'F'
0538 2219 506 bhi outrang
053A A037 507 sub #$37
053C CC0549 508 jmp store
509
053F A130 510 altdec cmp #'0' ;Convert '0' - '9' to binary
0541 2510 511 blo outrang
0543 A139 512 cmp #'9'
0545 220C 513 bhi outrang
0547 A030 514 sub #$30
515
0549 BEC4 516 store ldx asc+1 ;Shift Bytes Left
054B BFC3 517 stx asc+0
054D BEC5 518 ldx asc+2
054F BFC4 519 stx asc+1
0551 B7C5 520 sta asc+2 ;Store as Binary
0553 CC0320 521 outrang jmp main
522
KEY05R2.ASM Assembled with CASM 05/06/1998 18:19 PAGE 10
523 *****************************************************
524 * *
525 * alt_rel Alt Released. (Decimal Enter Routine) *
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -