Keyboard Controller — Änderungen 1895 → 1896

Zeile 178: Zeile 178:
 
== Beispiele zur benutzen der KBC Funktionen ==
 
== Beispiele zur benutzen der KBC Funktionen ==
  
−
=== Ein einfacher Tastatur Handler ===
+
=== Ein einfacher Tastatur Handler in Form eines Bootsektors ===
  
−
... kommt noch ;)
+
Dieses Beispiel zeigt, wie man die Tastatur im Realmode benutzen kann.
 +
Dabei wird bei jedem Tastendruck oder loslassen einer Taste der scancode ausgegeben.
 +
Der Quellcode kann mit NASM oder FASM assembliert werden. Die erzeugte Datei auf den Bootsektor einer Diskette kopieren oder direkt mit einem Emulator benutzen.
 +
 
 +
<pre>
 +
use16
 +
org 0x7C00
 +
 
 +
cli
 +
 
 +
xor  ax, ax
 +
push ax
 +
pop  ds
 +
 
 +
;Standardmäßig ist der IRQ1 im Realmode auf dem Interrupt 9 gemapt
 +
mov word[ds:(9*4)  ], keyboard_handler  ;Offset
 +
mov word[ds:(9*4)+2], 0                ;Segment
 +
 
 +
sti
 +
 
 +
jmp $
 +
 
 +
 
 +
keyboard_handler:
 +
  pusha
 +
 
 +
  ;scancode lesen
 +
  in  al, 0x60
 +
 
 +
  ;Hier kann man mit dem Scancode machen was man will :)
 +
  call write_byte_as_hex
 +
  mov  al, '|'
 +
  call bios.write_char
 +
 
 +
  ;dem PIC1 sagen, dass wir den IRQ verarbeitet haben
 +
  mov al, 0x20
 +
  out 0x20, al
 +
 
 +
  popa
 +
iret
 +
 
 +
 
 +
;Input: al = char
 +
bios.write_char:
 +
  pusha
 +
  mov  ah, 0x0E
 +
  int  0x10
 +
  popa
 +
ret
 +
 
 +
hex_chars: db '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
 +
 
 +
;Input: al = byte
 +
write_byte_as_hex:
 +
  pusha
 +
  and  ax, 0xFF
 +
  push ax
 +
  mov  bx, ax
 +
  shr  bx, 4
 +
  mov  al, [hex_chars+bx]
 +
  call bios.write_char
 +
  pop  bx
 +
  and  bx, 0xF
 +
  mov  al, [hex_chars+bx]
 +
  call bios.write_char
 +
  popa
 +
ret
 +
 
 +
times 510-($-$$) db 0
 +
dw 0xAA55
 +
</pre>
  
 
=== CPU-reset ===
 
=== CPU-reset ===