⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key05r2.asm

📁 使用68HC705J1A写的一个键盘的代码,包括资料说明,一份难得的资料,本人开发键盘时好不容易才找到的资料
💻 ASM
📖 第 1 页 / 共 3 页
字号:
.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 + -