fixed file permissions
[fifth.git] / emulator / kbdrive.inc
1 ; Keyboard driver.\r
2 \r
3 KB_init:\r
4         push    es              \r
5         push    0\r
6         pop     es\r
7         mov     eax, [es:9*4]           ; save old int vectar\r
8         mov     [KB_OldVect], eax \r
9         mov     ax, cs                  ; set new int vector\r
10         shl     eax, 16\r
11         mov     ax, KB_IntHandler\r
12         mov     [es:9*4], eax\r
13         pop     es\r
14         ret\r
15 \r
16 KB_restore:\r
17         mov     eax, [KB_OldVect]\r
18         push    es\r
19         push    0\r
20         pop     es\r
21         mov     [es:9*4], eax \r
22         pop     es\r
23         ret\r
24 \r
25 KB_IntHandler:\r
26         pusha\r
27         in      al, 60h\r
28         mov     bx, [cs:KB_pntin]\r
29         mov     byte [cs:bx+KB_buf], al\r
30         inc     bx\r
31         cmp     bx, 128\r
32         jng     KB_l1\r
33         mov     bx, 0\r
34 KB_l1:  mov     [cs:KB_pntin], bx\r
35         popa\r
36         pushf                   ; Execute default code in old int vector\r
37         call    dword [cs:KB_OldVect]\r
38         iret\r
39 \r
40 KB_read:        ; returns scan code in: dl\r
41         mov     dl, 0\r
42         mov     bx, [KB_pntout]\r
43         cmp     bx, [KB_pntin]\r
44         je      KB_l2\r
45         mov     dl, [bx+KB_buf]\r
46         inc     bx\r
47         cmp     bx, 128\r
48         jng     KB_l3\r
49         mov     bx, 0\r
50 KB_l3:  mov     [KB_pntout], bx\r
51 KB_l2:  ret\r
52 \r
53 KB_OldVect dd 0\r
54 KB_pntin dw 0\r
55 KB_pntout dw 0\r
56 KB_buf  db 0\r
57 times 127 db 0\r