home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************/
- /*** A UTILITY PROGRAM TO PROVIDE INTERRUPT VECTOR LISTINGS ***/
- /*** ALSO LOCATES OPTIONAL ROMS INSTALLED IN SYSTEM ***/
- /*** ***/
- /********************************************************************/
- #include (string.h)
- #include (stdlib.h)
-
- struct vector { /*global structure to store vectors*/
- unsigned int seg;
- unsigned int off;
- } interrupt [256]; /*global array of actual vectors */
-
- ******************************************************************/
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- int num,trgt1,trgt2;
- unsigned int far *ptr; /* far pointer used to "peek" memory*/
- void listgrp(), listall(); /* void function declarations */
- for (num=0; num <= 255; num++) { /* begin by reading all vectors */
- ptr = num * 4;
- interrupt [num].seg = *(ptr+1);
- interrupt [num].off = *ptr;
- }
- if (argc == 1) /* if no args, list all vectors */
- listall();
- else if (argc == 2) { /* need either help or one vector */
- if ((! strcmpi(argv[1],"help"))||(! strcmpi[1], "?"))){
- puts("\nINTERRUPT - copyright 1986 by Andrew Fried\n");
- puts("Available Commands :\n");
- puts("\INT\" Print listing of all interrupt vectors to STDOUT.");
- puts("\"INT n\" Display single vector (n=decimal).");
- puts("\"INT n n\" Display range of vectors (n=decimal).");
- puts("\INT ?\" or \"INT ?" or "\INT help\" print out this help list
- ing.");
- puts("\nNote: You may use the DOS \">\" command to redirect program
- output.");
- }
- else{
- trgt1 = atoi (arg[1]);
- listgrp(trgt1, trgt1);
- }
- }
- else if (argc == 3) {
- trgt1 = atoi(argv[1]);
- trgt2 = atoi(argv[2]);
- listgrp(trgt1,trgt2);
- }
- }
- /********************************************************************/
-
- void listall() /* produces full vector listing */
- {
- int num, r1,r2,r3;
-
- puts(" INTERRUPT VECTOR LISTING UTILITY ");
-
- for(num=0; num < 85; num++) {
- r1 = num * 3;
- r2 = r1 + 1;
- r3 = r2 + 1;
- printf("%03d [0x%02X] %04X:%04X %03d [0x%02X] %04X:%04X %03d
- [0x%02X] %04X:%04X\n",
- r1,r1, interrupt[r1].seg,interrupr[r1].off,
- r2,r2, interrupt[r2].seg,interrupt[r2].off,
- r3,r3, interrupt[r3].seg,interrupt[r3].off;
- }
- printf("%s%03d [0x02X] %04X:%04X\n",
- " ",
- 255,255, interrupt[255].seg,interrupt[255].off|);
- romcheck(); /* locate any rom signatures */
-
- /*******************************************************************/
-
- void listgrp(start,stop)
- int start, stop;
- {
-
- int loop;
-
- if ((start<0 || (stop>255)||(start>stop))
- puts("Vector out of range! Program aborted...\n");
- else
- for(loop=start; loop(=stop; loop++)
- printf("%03d [0x%02X] %04X:%04X\n", loop,loop,interrupt[loop].
- seg,interrupt[loop].off);
- }
-
- /*********************************************************************/
-
- romcheck()
- {
- int count=0;
- unsigned long memloc;
- unsigned int far *ptr;
-
- for (memloc=0xC800000; memloc <=0F400000; memloc+=0x800000){
- ptr = memloc;
- if (*ptr==0xAA55) {
- count++;
- printf("\nROM BIOS Signature found at %041X:%041x...\n",
- memloc)>16,memloc&0xFFFF);
- }
- }
- if (count == 0)
- puts("\nNo ROM BIOS Signatures found in memory from C800:0000
- to F400:0000.\n");
- else
- printf("\nROMCHECK located a total of %d ROM Signature(s).\n",
- count);
- return(count);
- }
-
- /********************************************************************/
-