Please consider a donation to the Higher Intellect project. See https://preterhuman.net/donate.php or the Donate to Higher Intellect page for more info.

IRQSTAT.C

From Higher Intellect Vintage Wiki
Jump to navigation Jump to search
/* IRQSTAT Reports IRQ status */

#include <stdio.h>
#include <conio.h>
#include <dos.h>

#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);
}