5dc /* IRQSTAT Reports IRQ status */ #include #include #include #define NUMPORTS 2 typedef struct { unsigned int number; char* name; } irqport; unsigned int status, bit, p8259; static irqport port[] = {{0x21,"0x21"}, {0xA1,"0xA1"}}; static char free[] = "FREE", used[] = "used"; static char* ibm[] = {"Timer", "Keyboard", "2nd 8259", "COM2", "COM1", "LPT2", "Floppy Disk", "LPT1", "Clock", "Redirected IRQ2", "(reserved)", "(reserved)", "(reserved)", "Coprocessor", "Hard Disk", "(reserved)"}; static char* oem[] = {"", "", "Autofax Imager", "", "", "MS Bus Mouse", "", "", "", "", "", "", "", "", "", ""}; main() { clrscr(); printf("IRQSTAT -- Reports IRQ Status for IRQ 0-15\n\n"); printf("\t8259 IRQ Status Assignments\n"); printf("\t---- --- ------ -----------\n"); /* display status of 8259 IRQs */ for (p8259 = 0; p8259 < NUMPORTS; p8259++) { /* get 8259 status port information */ status = inp(port[p8259].number); for (bit = 0; bit <= 7; bit++) { printf("\t%-4s %3d %6s %-15s\n", ((bit == 0) ? port[p8259].name : ""), (bit + (p8259 * 8)), ((status >> bit) & 1) ? free : used, ibm[(bit + (p8259 * 8))]); } if ((p8259 + 1) < NUMPORTS) printf("\n"); } exit(0); } . 0