Rev 143 | Rev 161 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 143 | Rev 160 | ||
---|---|---|---|
Line 359... | Line 359... | ||
359 | ; test_kbd: |
359 | ; test_kbd: |
360 | ; in al,64h ;÷èòàåì ñîñòîÿíèå êëàâèàòóðû |
360 | ; in al,64h ;÷èòàåì ñîñòîÿíèå êëàâèàòóðû |
361 | ; test al,2 ;ïðîâåðêà áèòà ãîòîâíîñòè |
361 | ; test al,2 ;ïðîâåðêà áèòà ãîòîâíîñòè |
362 | ; loopnz test_kbd |
362 | ; loopnz test_kbd |
Line -... | Line 363... | ||
- | 363 | ||
- | 364 | push 0 |
|
- | 365 | pop es |
|
- | 366 | and word [es:0x9031], 0 |
|
- | 367 | ; check for PCI BIOS |
|
- | 368 | mov ax, 0xB101 |
|
- | 369 | int 0x1A |
|
- | 370 | jc .nopci |
|
- | 371 | cmp edx, 'PCI ' |
|
- | 372 | jnz .nopci |
|
- | 373 | ; find PCI class code |
|
- | 374 | ; class 1 = mass storage |
|
- | 375 | ; subclass 1 = IDE controller |
|
- | 376 | ; a) class 1, subclass 1, programming interface 0x80 |
|
- | 377 | mov ax, 0xB103 |
|
- | 378 | mov ecx, 1*10000h + 1*100h + 0x80 |
|
- | 379 | mov si, 0 ; device index = 0 |
|
- | 380 | int 0x1A |
|
- | 381 | jnc .found |
|
- | 382 | ; b) class 1, subclass 1, programming interface 0x85 |
|
- | 383 | mov ax, 0xB103 |
|
- | 384 | mov ecx, 1*10000h + 1*100h + 0x85 |
|
- | 385 | mov si, 0 ; device index = 0 |
|
- | 386 | int 0x1A |
|
- | 387 | jnc .found |
|
- | 388 | ; c) class 1, subclass 1, programming interface 0x8A |
|
- | 389 | mov ax, 0xB103 |
|
- | 390 | mov ecx, 1*10000h + 1*100h + 0x8A |
|
- | 391 | mov si, 0 |
|
- | 392 | int 0x1A |
|
- | 393 | jc .nopci |
|
- | 394 | .found: |
|
- | 395 | ; get memory base |
|
- | 396 | mov ax, 0xB10A |
|
- | 397 | mov di, 0x20 ; memory base is config register at 0x20 |
|
- | 398 | int 0x1A |
|
- | 399 | jc .nopci |
|
- | 400 | and cx, 0xFFF0 ; clear address decode type |
|
- | 401 | mov [es:0x9031], cx |
|
- | 402 | .nopci: |
|
363 | 403 | ||
364 | mov al,0xf6 ; Ñáðîñ êëàâèàòóðû, ðàçðåøèòü ñêàíèðîâàíèå |
404 | mov al,0xf6 ; Ñáðîñ êëàâèàòóðû, ðàçðåøèòü ñêàíèðîâàíèå |
365 | out 0x60,al |
405 | out 0x60,al |
366 | xor cx,cx |
406 | xor cx,cx |
367 | wait_loop: ; variant 2 |
407 | wait_loop: ; variant 2 |