Вопрос по клавиатуре (scan-коды...)

Тема в разделе "WASM.ASSEMBLER", создана пользователем Microedition, 31 дек 2008.

  1. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Запускаю программу без операционной системы,
    должна переводить клавиатуру в 3-ий набор скан-кодов,
    а она остаётся в первом, что не так?
    Код (Text):
    1. mov al, 0xF0
    2. out 0x60, al
    3. call KeyBoard_Wait
    4. mov al, 0x03
    5. out 0x60, al
    6. ...
    7. ...
    8.  
    9. KeyBoard_Wait:
    10. push cx
    11. push ax
    12. mov cx, 0xFFFF
    13. delay:
    14. in al, 0x64
    15. test al, 00000010b
    16. loopnz delay
    17. pop ax
    18. pop cx
    19. ret
    20. ...
    21. ...
     
  2. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    3-ий набор опциональный. Может, дело в этом...

    P.S. Код не смотрел.
     
  3. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Посмотрел у себя... почти один в один, если добавить ожидание в самом начале (перед посылкой байта команды) и самом конце (после посылки байта данных), делать все посылки с запрещенными прерываниями и выполнять проверку на тайм-аут после каждого ожидания.
     
  4. Phantom_84

    Phantom_84 New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2007
    Сообщения:
    820
    Может, ты трансляцию не отключил?..
     
  5. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Вот тогда весь код:
    Код (Text):
    1. org 0x7C00
    2. use16
    3.  
    4. ;;;;;;;;;;;;;;;;;;;;REGUSTERS;;;;;;;;;;;;;;;;;;;;
    5. xor ax, ax
    6. mov ds, ax
    7. mov es, ax
    8. mov ss, ax
    9. mov sp, 0x7DFE
    10.  
    11. ;;;;;;;;;;;;;;;;;;;;KEYBOARD_REPLACEDRIVER;;;;;;;;;;;;;;;;;;;;
    12. mov cx, KeyBoard_Driver
    13. cli
    14. mov word [ds:0x09*0x04], cx
    15. mov word [ds:0x09*0x04+0x0002], 0
    16. sti
    17.  
    18. ;;;;;;;;;;;;;;;;;;;;KEYBOARD_SCANCODES3;;;;;;;;;;;;;;;;;;;;
    19. mov al, 0xF0
    20. out 0x60, al
    21. call KeyBoard_Wait
    22. mov al, 0x03
    23. out 0x60, al
    24.  
    25. ;;;;;;;;;;;;;;;;;;;;KEYBOARD_LOOP;;;;;;;;;;;;;;;;;;;;
    26. mov cx, 0xB800
    27. mov es, cx
    28. @@:
    29. inc byte [es:0x0000]
    30. jmp @B
    31.  
    32. ;;;;;;;;;;;;;;;;;;;;KEYBOARD_WAIT;;;;;;;;;;;;;;;;;;;;
    33. KeyBoard_Wait:
    34. push cx
    35. push ax
    36. mov cx, 0xFFFF
    37. delay:
    38. in al, 0x64
    39. test al, 00000010b
    40. loopnz delay
    41. pop ax
    42. pop cx
    43. ret
    44.  
    45. ;;;;;;;;;;;;;;;;;;;;KEYBOARD_NEWDRIVER;;;;;;;;;;;;;;;;;;;;
    46. KeyBoard_Driver:
    47. pusha
    48. push es
    49. in al,0x60
    50.  
    51. mov si, [cs:csmb]
    52. ;;;;;;;;;;;;;;;;;;;;KEYBOARD_STI;;;;;;;;;;;;;;;;;;;;
    53. push ax
    54. mov al,0x20
    55. out 0x20, al
    56. pop ax
    57. sti
    58.  
    59. ;;;;;;;;;;;;;;;;;;;;SCANCODE_NULL;;;;;;;;;;;;;;;;;;;;
    60. cmp al, 0x00
    61. je @F
    62.  
    63. ;;;;;;;;;;;;;;;;;;;;SCANCODE_TOHEX;;;;;;;;;;;;;;;;;;;;
    64. xor ah, ah
    65. shl ax, 0x04
    66. shr al, 0x04
    67. add ax, 0x3030
    68. cmp ah, 0x3A
    69. jb @F
    70. add ah, 0x07
    71. @@:
    72. cmp al, 0x3A
    73. jb @F
    74. add al, 0x07
    75. @@:
    76.  
    77. ;;;;;;;;;;;;;;;;;;;;SCANCODE_TOVIDEORAM;;;;;;;;;;;;;;;;;;;;
    78. mov cx, 0xB800
    79. mov es, cx
    80.  
    81. mov [es:si], ah
    82. add si, 0x02
    83. mov [es:si], al
    84. add si, 0x06
    85. mov [cs:csmb], si
    86.  
    87. @@:
    88. pop es
    89. popa
    90. iret
    91.  
    92. ;;;;;;;;;;;;;;;;;;;;VIDEORAM_SYMBOLNUMBER;;;;;;;;;;;;;;;;;;;;
    93. csmb dw 0x0002
    94.  
    95. ;;;;;;;;;;;;;;;;;;;;END;;;;;;;;;;;;;;;;;;;;
    96. times (0x0200-0x02-($-BOOT)) db 0x00
    97. db 0x55,0xAA
     
  6. Noga

    Noga New Member

    Публикаций:
    0
    Регистрация:
    10 окт 2008
    Сообщения:
    92
    Вопросик по теме.

    У меня есть программа работающая в пребуте. Как известно на ноутбуках "цифры" - это нампад на стандартной клаве, отсюда вопрос: "Обеспечивает ли производитель совместимость скан-кодов ?".