home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / interrpt.c < prev    next >
Text File  |  1991-02-04  |  4KB  |  118 lines

  1. /*********************************************************************/
  2. /***     A UTILITY PROGRAM TO PROVIDE INTERRUPT VECTOR LISTINGS   ***/
  3. /***         ALSO LOCATES OPTIONAL ROMS INSTALLED IN SYSTEM       ***/
  4. /***                                                              ***/
  5. /********************************************************************/
  6. #include (string.h)
  7. #include (stdlib.h)
  8.  
  9. struct vector {              /*global structure to store vectors*/
  10.     unsigned int seg;
  11.     unsigned int off;
  12. } interrupt [256];          /*global array of actual vectors   */
  13.  
  14. ******************************************************************/
  15.  
  16. main(argc, argv)
  17. int argc;
  18. char *argv[];
  19. {
  20.    int num,trgt1,trgt2;
  21.    unsigned int far *ptr;  /* far pointer used to "peek" memory*/
  22.    void listgrp(), listall(); /* void function declarations */
  23.    for (num=0; num <= 255; num++) {  /* begin by reading all vectors */
  24.      ptr = num * 4;
  25.      interrupt [num].seg = *(ptr+1);
  26.      interrupt [num].off = *ptr;
  27. }
  28. if (argc == 1)             /* if no args, list all vectors */
  29.      listall();
  30. else if (argc == 2) {     /* need either help or one vector */
  31.   if ((! strcmpi(argv[1],"help"))||(! strcmpi[1], "?"))){
  32.     puts("\nINTERRUPT - copyright 1986 by Andrew Fried\n");
  33.     puts("Available Commands :\n");
  34.     puts("\INT\"    Print listing of all interrupt vectors to STDOUT.");
  35.     puts("\"INT n\"  Display single vector (n=decimal).");
  36.     puts("\"INT n n\" Display range of vectors (n=decimal).");
  37.     puts("\INT ?\" or \"INT ?" or "\INT help\"  print out this help list
  38.             ing.");
  39.     puts("\nNote: You may use the DOS \">\" command to redirect program
  40.             output.");
  41.    }
  42.    else{
  43.      trgt1 = atoi (arg[1]);
  44.      listgrp(trgt1, trgt1);
  45.    }
  46. }
  47. else if (argc == 3) {
  48.      trgt1 = atoi(argv[1]);
  49.      trgt2 = atoi(argv[2]);
  50.      listgrp(trgt1,trgt2);
  51.    }
  52. }
  53. /********************************************************************/
  54.  
  55. void listall()              /* produces full vector listing       */
  56. {
  57.    int num, r1,r2,r3;
  58.  
  59.    puts("    INTERRUPT VECTOR LISTING UTILITY                 ");
  60.  
  61.    for(num=0; num < 85; num++) {
  62.      r1 = num * 3;
  63.      r2 = r1 + 1;
  64.      r3 = r2 + 1;
  65.      printf("%03d [0x%02X] %04X:%04X     %03d [0x%02X] %04X:%04X  %03d
  66.               [0x%02X] %04X:%04X\n",
  67.          r1,r1, interrupt[r1].seg,interrupr[r1].off,
  68.          r2,r2, interrupt[r2].seg,interrupt[r2].off,
  69.          r3,r3, interrupt[r3].seg,interrupt[r3].off;
  70. }
  71.    printf("%s%03d [0x02X] %04X:%04X\n",
  72.      "                            ",
  73.      255,255, interrupt[255].seg,interrupt[255].off|);
  74.    romcheck();           /* locate any rom signatures  */
  75.  
  76. /*******************************************************************/
  77.  
  78. void listgrp(start,stop)
  79. int start, stop;
  80. {
  81.  
  82.    int loop;
  83.  
  84.    if ((start<0 || (stop>255)||(start>stop))
  85.      puts("Vector out of range! Program aborted...\n");
  86.    else
  87.      for(loop=start; loop(=stop; loop++)
  88.        printf("%03d [0x%02X] %04X:%04X\n", loop,loop,interrupt[loop].
  89.            seg,interrupt[loop].off);
  90. }
  91.  
  92. /*********************************************************************/
  93.  
  94. romcheck()
  95. {
  96.    int count=0;
  97.    unsigned long memloc;
  98.    unsigned int far *ptr;
  99.  
  100.    for (memloc=0xC800000; memloc <=0F400000; memloc+=0x800000){
  101.        ptr = memloc;
  102.        if (*ptr==0xAA55) {
  103.         count++;
  104.         printf("\nROM BIOS Signature found at %041X:%041x...\n",
  105.               memloc)>16,memloc&0xFFFF);
  106.       }
  107.    }
  108.    if (count == 0)
  109.      puts("\nNo ROM BIOS Signatures found in memory from C800:0000
  110.              to F400:0000.\n");
  111.    else
  112.      printf("\nROMCHECK located a total of %d ROM Signature(s).\n",
  113.              count);
  114.       return(count);
  115.   }
  116.  
  117. /********************************************************************/
  118.