OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.24/] [monitor/] [monitor/] [common/] [keyboard.s] - Diff between revs 59 and 211

Only display areas with differences | Details | Blame | View Log

Rev 59 Rev 211
;
;
; keyboard.s -- a PC keyboard as input device
; keyboard.s -- a PC keyboard as input device
;
;
 
 
;***************************************************************
;***************************************************************
 
 
        .set    kbdbase,0xF0200000      ; keyboard base address
        .set    kbdbase,0xF0200000      ; keyboard base address
 
 
;       .import cout
;       .import cout
;       .import byteout
;       .import byteout
 
 
        .import xltbl1                  ; kbd translation table 1
        .import xltbl1                  ; kbd translation table 1
        .import xltbl2                  ; kbd translation table 2
        .import xltbl2                  ; kbd translation table 2
 
 
        .export kbdinit                 ; initialize keyboard
        .export kbdinit                 ; initialize keyboard
        .export kbdinchk                ; check if input available
        .export kbdinchk                ; check if input available
        .export kbdin                   ; do keyboard input
        .export kbdin                   ; do keyboard input
 
 
;***************************************************************
;***************************************************************
 
 
        .code
        .code
        .align  4
        .align  4
 
 
kbdinit:
kbdinit:
        jr      $31
        jr      $31
 
 
kbdinchk:
kbdinchk:
        add     $8,$0,kbdbase
        add     $8,$0,kbdbase
        ldw     $2,$8,0
        ldw     $2,$8,0
        and     $2,$2,1
        and     $2,$2,1
        jr      $31
        jr      $31
 
 
kbdin:
kbdin:
        sub     $29,$29,12
        sub     $29,$29,12
        stw     $31,$29,8
        stw     $31,$29,8
        stw     $16,$29,4
        stw     $16,$29,4
        stw     $17,$29,0
        stw     $17,$29,0
kbdin0:
kbdin0:
        jal     kbdinp
        jal     kbdinp
        add     $16,$2,$0                ; key 1 in $16
        add     $16,$2,$0                ; key 1 in $16
        add     $8,$0,0xF0
        add     $8,$0,0xF0
        bne     $16,$8,kbdin2
        bne     $16,$8,kbdin2
kbdin1:
kbdin1:
        jal     kbdinp
        jal     kbdinp
        j       kbdin0
        j       kbdin0
kbdin2:
kbdin2:
        jal     kbdinp
        jal     kbdinp
        add     $17,$2,$0                ; key 2 in $17
        add     $17,$2,$0                ; key 2 in $17
        beq     $17,$16,kbdin2
        beq     $17,$16,kbdin2
        add     $8,$0,0xF0
        add     $8,$0,0xF0
        beq     $17,$8,kbdin3
        beq     $17,$8,kbdin3
        j       kbdin5
        j       kbdin5
kbdin3:
kbdin3:
        jal     kbdinp
        jal     kbdinp
        bne     $2,$16,kbdin2
        bne     $2,$16,kbdin2
kbdin4:
kbdin4:
        add     $4,$16,$0                ; use key 1
        add     $4,$16,$0                ; use key 1
        add     $5,$0,xltbl1             ; with translation table 1
        add     $5,$0,xltbl1             ; with translation table 1
        jal     xlat
        jal     xlat
        j       kbdx
        j       kbdx
kbdin5:
kbdin5:
        jal     kbdinp
        jal     kbdinp
        add     $8,$0,0xF0
        add     $8,$0,0xF0
        bne     $2,$8,kbdin5
        bne     $2,$8,kbdin5
kbdin6:
kbdin6:
        jal     kbdinp
        jal     kbdinp
        beq     $2,$16,kbdin7
        beq     $2,$16,kbdin7
        beq     $2,$17,kbdin9
        beq     $2,$17,kbdin9
        j       kbdin5
        j       kbdin5
kbdin7:
kbdin7:
        jal     kbdinp
        jal     kbdinp
        add     $8,$0,0xF0
        add     $8,$0,0xF0
        bne     $2,$8,kbdin7
        bne     $2,$8,kbdin7
kbdin8:
kbdin8:
        jal     kbdinp
        jal     kbdinp
        bne     $2,$17,kbdin7
        bne     $2,$17,kbdin7
        j       kbdin11
        j       kbdin11
kbdin9:
kbdin9:
        jal     kbdinp
        jal     kbdinp
        add     $8,$0,0xF0
        add     $8,$0,0xF0
        bne     $2,$8,kbdin9
        bne     $2,$8,kbdin9
kbdin10:
kbdin10:
        jal     kbdinp
        jal     kbdinp
        bne     $2,$16,kbdin9
        bne     $2,$16,kbdin9
        j       kbdin11
        j       kbdin11
kbdin11:
kbdin11:
        add     $8,$0,0x12               ; left shift key
        add     $8,$0,0x12               ; left shift key
        beq     $16,$8,kbdin12
        beq     $16,$8,kbdin12
        add     $8,$0,0x59               ; right shift key
        add     $8,$0,0x59               ; right shift key
        beq     $16,$8,kbdin12
        beq     $16,$8,kbdin12
        add     $8,$0,0x14               ; ctrl key
        add     $8,$0,0x14               ; ctrl key
        beq     $16,$8,kbdin14
        beq     $16,$8,kbdin14
        j       kbdin13
        j       kbdin13
kbdin12:
kbdin12:
        add     $4,$17,$0                ; use key 2
        add     $4,$17,$0                ; use key 2
        add     $5,$0,xltbl2             ; with translation table 2
        add     $5,$0,xltbl2             ; with translation table 2
        jal     xlat
        jal     xlat
        j       kbdx
        j       kbdx
kbdin13:
kbdin13:
        add     $4,$16,$0                ; use key 1
        add     $4,$16,$0                ; use key 1
        add     $5,$0,xltbl1             ; with translation table 1
        add     $5,$0,xltbl1             ; with translation table 1
        jal     xlat
        jal     xlat
        j       kbdx
        j       kbdx
kbdin14:
kbdin14:
        add     $4,$17,$0                ; use key 2
        add     $4,$17,$0                ; use key 2
        add     $5,$0,xltbl1             ; with translation table 1
        add     $5,$0,xltbl1             ; with translation table 1
        jal     xlat
        jal     xlat
        and     $2,$2,0xFF-0x60         ; then reset bits 0x60
        and     $2,$2,0xFF-0x60         ; then reset bits 0x60
        j       kbdx
        j       kbdx
kbdx:
kbdx:
        ldw     $17,$29,0
        ldw     $17,$29,0
        ldw     $16,$29,4
        ldw     $16,$29,4
        ldw     $31,$29,8
        ldw     $31,$29,8
        add     $29,$29,12
        add     $29,$29,12
        jr      $31
        jr      $31
 
 
kbdinp:
kbdinp:
        add     $8,$0,kbdbase
        add     $8,$0,kbdbase
kbdinp1:
kbdinp1:
        ldw     $9,$8,0
        ldw     $9,$8,0
        and     $9,$9,1
        and     $9,$9,1
        beq     $9,$0,kbdinp1            ; wait until character ready
        beq     $9,$0,kbdinp1            ; wait until character ready
        ldw     $2,$8,4                 ; get character
        ldw     $2,$8,4                 ; get character
        add     $9,$0,0xE0
        add     $9,$0,0xE0
        beq     $2,$9,kbdinp1           ; ignore E0 prefix
        beq     $2,$9,kbdinp1           ; ignore E0 prefix
        add     $9,$0,0xE1
        add     $9,$0,0xE1
        beq     $2,$9,kbdinp1           ; as well as E1 prefix
        beq     $2,$9,kbdinp1           ; as well as E1 prefix
        jr      $31
        jr      $31
 
 
xlat:
xlat:
        sub     $29,$29,8
        sub     $29,$29,8
        stw     $31,$29,4
        stw     $31,$29,4
        stw     $16,$29,0
        stw     $16,$29,0
        and     $16,$4,0xFF
        and     $16,$4,0xFF
        add     $8,$16,$5
        add     $8,$16,$5
        ldbu    $2,$8,0
        ldbu    $2,$8,0
        bne     $2,$0,xlat1
        bne     $2,$0,xlat1
;       add     $4,$0,'<'
;       add     $4,$0,'<'
;       jal     cout
;       jal     cout
;       add     $4,$16,$0
;       add     $4,$16,$0
;       jal     byteout
;       jal     byteout
;       add     $4,$0,'>'
;       add     $4,$0,'>'
;       jal     cout
;       jal     cout
        add     $2,$16,$0
        add     $2,$16,$0
xlat1:
xlat1:
        ldw     $16,$29,0
        ldw     $16,$29,0
        ldw     $31,$29,4
        ldw     $31,$29,4
        add     $29,$29,8
        add     $29,$29,8
        jr      $31
        jr      $31
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.