Subversion Repositories NedoOS

Rev

Rev 1601 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1.     module Console
  2. KEY_UP = 11
  3. KEY_DN = 10
  4. KEY_LT = 8
  5. KEY_RT = 9
  6. BACKSPACE = 12
  7. keyCode db 0
  8.  
  9. BASIC_KEY = #5C08
  10.  
  11. waitForKeyUp:
  12.    xor a : in a, (#fe) : cpl : and 31 : jr nz, waitForKeyUp
  13.    ld (BASIC_KEY), a
  14.    ret
  15.  
  16. getC:
  17.    xor a
  18.    ld (BASIC_KEY),a
  19. getC2:
  20.    ld a,(BASIC_KEY)
  21.    and a : jr z, getC2
  22.    ld b,a
  23.    xor a : ld (BASIC_KEY), a
  24.    ld a, b
  25.    ret
  26.  
  27. peekC:
  28.     xor a: ld (BASIC_KEY),a
  29.     call inkey
  30.     ret
  31.  
  32. inkey:
  33.    ld de,0
  34.    ld bc,$fefe
  35.    in a,(c)
  36.    or $e1
  37.    cp $ff
  38.    jr nz, .keyhitA
  39.  
  40.    ld e,5
  41.    ld b,$fd
  42.    in a,(c)
  43.    or $e0
  44.    cp $ff
  45.    jr nz, .keyhitA
  46.  
  47.    ld e,10
  48.    ld b,$fb
  49.    in a,(c)
  50.    or $e0
  51.    cp $ff
  52.    jr nz, .keyhitA
  53.  
  54.    ld e,15
  55.    ld b,$f7
  56.    in a,(c)
  57.    or $e0
  58.    cp $ff
  59.    jr nz, .keyhitA
  60.  
  61.    ld e,20
  62.    ld b,$ef
  63.    in a,(c)
  64.    or $e0
  65.    cp $ff
  66.    jr nz, .keyhitA
  67.  
  68.    ld e,25
  69.    ld b,$df
  70.    in a,(c)
  71.    or $e0
  72.    cp $ff
  73.    jr nz, .keyhitA
  74.  
  75.    ld e,30
  76.    ld b,$bf
  77.    in a,(c)
  78.    or $e0
  79.    cp $ff
  80.    jr nz, .keyhitA
  81.  
  82.    ld e,35
  83.    ld b,$7f
  84.    in a,(c)
  85.    or $e2
  86.    cp $ff
  87.    ld c,a
  88.    jr nz, .keyhitB
  89.  
  90. .nokey
  91.    xor a
  92.    ret
  93.  
  94. .keyhitA
  95.  
  96.    ld c,a
  97.  
  98.    ld a,b
  99.    cpl
  100.    or $81
  101.    in a,($fe)
  102.    or $e0
  103.    cp $ff
  104.    jr nz, .nokey
  105.  
  106.    ld a,$7f
  107.    in a,($fe)
  108.    or $e2
  109.    cp $ff
  110.    jr nz, .nokey
  111.  
  112. .keyhitB
  113.  
  114.    ld b,0
  115.    ld hl,.rowtbl-$e0
  116.    add hl,bc
  117.    ld a,(hl)
  118.    cp 5
  119.    jr nc, .nokey
  120.    add a,e
  121.    ld e,a
  122.  
  123.    ld hl,.table
  124.    add hl,de
  125.  
  126.    ld a,$fe
  127.    in a,($fe)
  128.    and $01
  129.    jr nz, .nocaps
  130.    ld e,40
  131.    add hl,de
  132.  
  133. .nocaps
  134.  
  135.    ld a,$7f
  136.    in a,($fe)
  137.    and $02
  138.    jr nz, .nosym
  139.    ld e,80
  140.    add hl,de
  141.  
  142. .nosym
  143.  
  144.    ld a,(hl)
  145.    ret
  146.  
  147. .rowtbl
  148.    defb 255,255,255,255,255,255,255
  149.    defb 255,255,255,255,255,255,255,255
  150.    defb 4,255,255,255,255,255,255
  151.    defb 255,3,255,255,255,2,255,1
  152.    defb 0,255
  153.  
  154. .table
  155.    db 0,'z','x','c','v'      ; CAPS SHIFT, Z, X, C, V
  156.    db 'a','s','d','f','g'      ; A, S, D, F, G
  157.    db 'q','w','e','r','t'      ; Q, W, E, R, T
  158.    db '1','2','3','4','5'      ; 1, 2, 3, 4, 5
  159.    db '0','9','8','7','6'      ; 0, 9, 8, 7, 6
  160.    db 'p','o','i','u','y'      ; P, O, I, U, Y
  161.    db 13,'l','k','j','h'       ; ENTER, L, K, J, H
  162.    db ' ',0,'m','n','b'      ; SPACE, SYM SHIFT, M, N, B
  163.  
  164.    ; the following are CAPS SHIFTed
  165.  
  166.    db 0,'Z','X','C','V'      ; CAPS SHIFT, Z, X, C, V
  167.    db 'A','S','D','F','G'      ; A, S, D, F, G
  168.    db 'Q','W','E','R','T'      ; Q, W, E, R, T
  169.    db 7,6,128,129,8            ; 1, 2, 3, 4, 5
  170.    db 12,0,9,11,10             ; 0, 9, 8, 7, 6
  171.    db 'P','O','I','U','Y'      ; P, O, I, U, Y
  172.    db 13,'L','K','J','H'       ; ENTER, L, K, J, H
  173.    db ' ',0,'M','N','B'      ; SPACE, SYM SHIFT, M, N, B
  174.  
  175.    ; the following are SYM SHIFTed
  176.  
  177.    db 0,':',96,'?','/'       ; CAPS SHIFT, Z, X, C, V
  178.    db '~','|',92,'{','}'       ; A, S, D, F, G
  179.    db 131,132,133,'<','>'      ; Q, W, E, R, T
  180.    db '!','@','#','$','%'      ; 1, 2, 3, 4, 5
  181.    db '_',')','(',39,'&'       ; 0, 9, 8, 7, 6
  182.    db 34,';',130,']','['       ; P, O, I, U, Y
  183.    db 13,'=','+','-','^'       ; ENTER, L, K, J, H
  184.    db ' ',0,'.',',','*'      ; SPACE, SYM SHIFT, M, N, B
  185.  
  186.    ; the following are CAPS SHIFTed and SYM SHIFTed ("CTRL" key)
  187.  
  188.    db 0,26,24,3,22           ; CAPS SHIFT, Z, X, C, V
  189.    db 1,19,4,6,7               ; A, S, D, F, G
  190.    db 17,23,5,18,20            ; Q, W, E, R, T
  191.    db 27,28,29,30,31           ; 1, 2, 3, 4, 5
  192.    db 127,0,134,'`',135      ; 0, 9, 8, 7, 6
  193.    db 16,15,9,21,25            ; P, O, I, U, Y
  194.    db 13,12,11,10,8            ; ENTER, L, K, J, H
  195.    db ' ',0,13,14,2          ; SPACE, SYM SHIFT, M, N, B
  196.  
  197.     endmodule