BIOS . 4- , BIOS 0000: 046Ch - . 24 , 0000: 0470h 1.
䳿, - . 2 , . 0000: 0440h , . . 0, .
, - INT 1Ch. ϳ INT 1Ch IRET, INT 1Ch . - 䳿.
, INT 1Ch INT 8h , INT 1Ch . , .
INT 1Ch IRET. INT 8h, . , , :
mov al, 20h
out 20h, al
Intel 8253 ( ' IBM PC IBM PC / XT) 8254 ( ' IBM PC / AT IBM PS / 2), . 8254.
8253 8254, (
. :
0, 4 - .
1, 5 - .
2, 3 -
CR CE CLOCK, GATE 1. CE CLOCK. , GATE 0. GATE 1, . CR, .
. GATE CR CE, .
|
|
CR CE . OUT ' GATE 1. ().
' .
0
0 ( , ). 3 18,2 . INT 8h.
1
1 ' '. OUT DMA, '. , ' '.
2
2 ' , .
?
, 0 , ( 18,2 ). ϳ .
2, , , . .
/ :
40h - 0;
41h - 1;
42h - 2;
43h -
#include <stdio.h>
#include <conio.h>
int main()
{
unsigned i;
printf("\n\n 0\n-------\n");
outp(0x43, 0xe2);
printf("\n : %02.2X",
inp(0x40));
outp(0x43, 0x00);
i = inp(0x40);
i = (inp(0x40) << 8) + i;
printf("\n : %04.4X",i);
printf("\n\n 1\n-------\n");
outp(0x43, 0xe4);
printf("\: %02.2X",inp(0x41));
outp(0x43, 0x40);
i = inp(0x41);
i = (inp(0x41) << 8) + i;
printf("\n : %04.4X",i);
printf("\n\n 2\n-------\n");
outp(0x43, 0xe8);
printf("\: %02.2X",inp(0x42));
outp(0x43, 0x80);
i = inp(0x42);
i = (inp(0x42) << 8) + i;
printf("\n: %04.4X",i);
return 0;