home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / SYSUTL / IRQR.ZIP / IRQR.PAS < prev   
Encoding:
Pascal/Delphi Source File  |  1988-04-17  |  2.8 KB  |  128 lines

  1. {
  2.    IRQR -- Report status of IRQs in the H248 computer, PC/AT or compatibles.
  3.    Copyright 1988 by Lawrence R. Steeger
  4.  
  5.    Based upon IRQS by Joseph Katz (Copyright 1988 by Joseph Katz), which
  6.    was published in Katz's "C Notes" in SEXTANT No. 34 - Late Spring 1988.
  7.  
  8.    (Turbo Pascal Version 4)
  9.  
  10. }
  11.  
  12. const    NUMPORTS = 2;
  13.         NUMIRQS = 15;
  14.  
  15. type    irqport = record
  16.             number : word;
  17.             name : string[4];
  18.         end;
  19.  
  20. var        status,
  21.         bit,
  22.         p8259 : word;
  23.  
  24. const    ports : array [1..NUMPORTS] of irqport =
  25.                 ((number : $21; name : '0x21'),
  26.                  (number : $A1; name : '0xA1'));
  27.  
  28.         free : string[5] = '>FREE';
  29.         used : string[5] = ' used';
  30.  
  31.         ibm : array[0..NUMIRQS] of string[15] =
  32.                 ('Timer          ',
  33.                   'Keyboard       ',
  34.                   '2nd 8259       ',
  35.                   'COM2           ',
  36.                   'COM1           ',
  37.                   'LPT2           ',
  38.                   'Floppy Disk    ',
  39.                   'LPT1           ',
  40.                   'Clock          ',
  41.                   'Redirected IRQ2',
  42.                   '(reserved)     ',
  43.                   '(reserved)     ',
  44.                   '(reserved)     ',
  45.                   'Coprocessor    ',
  46.                   'Hard Disk      ',
  47.                   '(reserved)     ');
  48.  
  49.         oem : array[0..NUMIRQS] of string[15] =
  50.                 ('               ',
  51.                   '               ',
  52.                   'Autofax Imager ',
  53.                   '               ',
  54.                   '               ',
  55.                   'MS Bus Mouse   ',
  56.                   '               ',
  57.                   '               ',
  58.                   '               ',
  59.                   '               ',
  60.                   '               ',
  61.                   '               ',
  62.                   '               ',
  63.                   '               ',
  64.                   '               ',
  65.                   '               ');
  66.  
  67. function fStr(v, d : integer) : string;
  68.  
  69. { Create a blank-filled, right-justified numeric string }
  70.  
  71. var    s : string;
  72.  
  73. begin
  74.     Str(v:d, s);
  75.     fStr := s;
  76. end;
  77.  
  78. function Portname(p8259, bit : word) : string;
  79.  
  80. { return port name or blanks }
  81.  
  82. begin
  83.     if (bit = 0)
  84.     then portname := ports[(p8259+1)].name
  85.     else portname := '    ';
  86. end;
  87.  
  88. function State(status, bit : byte) : string;
  89.  
  90. { return '>FREE' or ' used' }
  91.  
  92. begin
  93.     if ((status shr bit) and 1) <> 0
  94.     then state := free
  95.     else state := used;
  96. end;
  97.  
  98. begin
  99.     Writeln('IRQR --'#9'Report Status of 8259 Hardware Interrupt Channels');
  100.     Writeln(#9'Copyright 1988 by Lawrence R. Steeger'#13#10);
  101.     Writeln(#9'8259  IRQ  Status   IBM Assignments  OEM Assignments');
  102.     Writeln(#9'----  ---  ------   ---------------  ---------------');
  103.  
  104.     { display status of 8259 IRQs }
  105.  
  106.     for p8259 := 0 to (NUMPORTS - 1)
  107.     do begin
  108.  
  109.         { get 8259 status port information }
  110.  
  111.         status := Port[ports[(p8259+1)].number];
  112.  
  113.         for bit := 0 to 7
  114.         do Writeln(#9 + Portname(p8259, bit) + '  '
  115.                       + fStr((bit + (p8259 * 8)), 3) + '   '
  116.                       + State(status, bit) + '   '
  117.                       + ibm[(bit + (p8259 * 8))] + '  '
  118.                       + oem[(bit + (p8259 * 8))]);
  119.  
  120.         if ((p8259 + 1) < NUMPORTS) then Writeln;
  121.     end;
  122.  
  123.     Halt(0);
  124. end.
  125.  
  126. { end of IRQR.C }
  127.  
  128.