home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 12 / showints / showints.pas < prev   
Encoding:
Pascal/Delphi Source File  |  1987-10-04  |  19.6 KB  |  730 lines

  1. (* ---------------------------------------------------------- *)
  2. (*                       SHOWINTS.PAS                         *)
  3. (*  Das Programm zeigt BIOS und DOS-Interrupts am Bildschirm  *)
  4. (*    Autor :  H. Weber                                       *)
  5. (*    System:  Turbo Pascal 3.0 & MS-DOS                      *)
  6. (*  folgendes ist aus PASCAL 6/87, Seite 57 ff.:              *)
  7. (*     Include-Files:  BEGININT.INC, EXITINT.INC              *)
  8. (*     Prozeduren   :  INTGET, INTSET, MAKERESIDENT           *)
  9. (* ---------------------------------------------------------- *)
  10. PROGRAM ShowInts;
  11.  
  12. (*$K-*)  (* diese Optionen muessen unbedingt deaktiviert sein *)
  13. (*$U-*)
  14. (*$C-*)
  15. (*$V-*)
  16. (*$I-*)
  17. (*$R-*)
  18.  
  19. TYPE
  20.    IntEntry_ = RECORD    (* EIntrag in Interr.-Vektor-Tabelle *)
  21.                  Offset, Segment : INTEGER;
  22.                END;
  23.    Regs8088_ = RECORD           (* Registersatz der Intel CPU *)
  24.                  CASE INTEGER OF
  25.                    1 : (AX, BX, CX, DX, BP,
  26.                         SI, DI, DS, ES, Flags : INTEGER);
  27.                    2 : (Al, Ah, Bl, Bh, Cl, Ch,
  28.                         Dl, Dh                : BYTE);
  29.                END;
  30.    zeile = RECORD                             (* fuer Anzeige *)
  31.              filler  : ARRAY [1..140] OF BYTE;
  32.              aus : ARRAY [1..10] OF
  33.                      RECORD
  34.                        c : CHAR;
  35.                        a : BYTE;
  36.                      END
  37.            END;
  38.  
  39. CONST                         (* die MS-DOS System-Interrupts *)
  40.    BIOS_zero_division  : BYTE = $00;
  41.    BIOS_non_mask_Int   : BYTE = $02;
  42.    BIOS_overflow       : BYTE = $04;
  43.    BIOS_print_screen   : BYTE = $05;
  44.    BIOS_system_timer   : BYTE = $08;
  45.    BIOS_keyboard       : BYTE = $09;
  46.    BIOS_diskette       : BYTE = $0E;
  47.    BIOS_screen_io      : BYTE = $10;
  48.    BIOS_equipment      : BYTE = $11;
  49.    BIOS_memory_size    : BYTE = $12;
  50.    BIOS_disk_io        : BYTE = $13;
  51.    BIOS_comm_io        : BYTE = $14;
  52.    BIOS_keyboard_io    : BYTE = $16;
  53.    BIOS_printer_io     : BYTE = $17;
  54.    BIOS_boot_strap     : BYTE = $19;
  55.    BIOS_time           : BYTE = $1A;
  56.    terminate_program   : BYTE = $20;
  57.    dos_function_call   : BYTE = $21;
  58.    terminate_address   : BYTE = $22;
  59.    ctrl_c_address      : BYTE = $23;
  60.    critical_error      : BYTE = $24;
  61.    absolute_disk_read  : BYTE = $25;
  62.    absolute_disk_write : BYTE = $26;
  63.    terminate_resident  : BYTE = $27;
  64.  
  65.    OldInt : IntEntry_ = (Offset : 0; Segment : 0);
  66.  
  67.    VideoSeg = $B800;  (* fuer CGA. Fuer MGA: VideoSeg = $B000 *)
  68.    DelTime  = 2;      (* Zur Verzoegerung der Bildschirman-   *)
  69.                       (* zeige z.B. "DelTime = 5"             *)
  70.  
  71. VAR
  72.    anz         : zeile ABSOLUTE VideoSeg:$0000;    (* Anzeige *)
  73.    Value, Code : INTEGER;
  74. (* ---------------------------------------------------------- *)
  75. PROCEDURE IntGet (IntNr : BYTE; VAR Segment, Offset : INTEGER);
  76. VAR Regs8088 : Regs8088_;
  77. BEGIN
  78.    WITH Regs8088 DO BEGIN
  79.       Ah := $35;           Al := IntNr;
  80.       MSDos(Regs8088);
  81.       Segment := ES;       Offset := BX;
  82.    END;
  83. END;
  84. (* ---------------------------------------------------------- *)
  85. PROCEDURE IntSet (IntNr : BYTE; Segment, Offset : INTEGER);
  86. VAR Regs8088 : Regs8088_;
  87.     SaveDS   : INTEGER ABSOLUTE CSeg:$00A0;
  88. BEGIN
  89.    SaveDS := DSeg;
  90.    WITH Regs8088 DO BEGIN
  91.       Ah := $25;           Al := IntNr;
  92.       DS := Segment;       DX := Offset;
  93.       MSDos(Regs8088);
  94.    END;
  95. END;
  96. (* ---------------------------------------------------------- *)
  97. PROCEDURE MakeResident;
  98. VAR Regs8088 : Regs8088_;
  99. BEGIN
  100.    WITH Regs8088 DO BEGIN
  101.       Ah := $31;
  102.       DX := Seg(HeapPtr^) - CSeg + ((Ofs(HeapPtr^) + 15) SHR 4);
  103.       MSDos(Regs8088);
  104.    END;
  105. END;
  106. (* ---------------------------------------------------------- *)
  107. (*               Interrupt Service-Routinen:                  *)
  108. (* ---------------------------------------------------------- *)
  109. PROCEDURE Int00;
  110. (*$I BEGININT.INC *)
  111.    WITH PgmRegs DO BEGIN
  112.       anz.aus[1].c := 'I';
  113.       anz.aus[2].c := 'N';
  114.       anz.aus[3].c := 'T';
  115.       anz.aus[4].c := '0';
  116.       anz.aus[5].c := '0';
  117.       anz.aus[6].c := ' ';
  118.       anz.aus[7].c := ' ';
  119.       anz.aus[8].c := ' ';
  120.       anz.aus[9].c := ' ';
  121.    END;
  122.    Delay(DelTime);
  123. (*$I EXITINT.INC*)
  124.              OldInt);
  125. END;
  126.  
  127. PROCEDURE Int02;
  128. (*$I BEGININT.INC *)
  129.    WITH PgmRegs DO BEGIN
  130.       anz.aus[1].c := 'I';
  131.       anz.aus[2].c := 'N';
  132.       anz.aus[3].c := 'T';
  133.       anz.aus[4].c := '0';
  134.       anz.aus[5].c := '2';
  135.       anz.aus[6].c := ' ';
  136.       anz.aus[7].c := ' ';
  137.       anz.aus[8].c := ' ';
  138.       anz.aus[9].c := ' ';
  139.    END;
  140.    Delay(DelTime);
  141. (*$I EXITINT.INC*)
  142.              OldInt);
  143. END;
  144.  
  145. PROCEDURE Int04;
  146. (*$I BEGININT.INC *)
  147.    WITH PgmRegs DO BEGIN
  148.       anz.aus[1].c := 'I';
  149.       anz.aus[2].c := 'N';
  150.       anz.aus[3].c := 'T';
  151.       anz.aus[4].c := '0';
  152.       anz.aus[5].c := '4';
  153.       anz.aus[6].c := ' ';
  154.       anz.aus[7].c := ' ';
  155.       anz.aus[8].c := ' ';
  156.       anz.aus[9].c := ' ';
  157.    END;
  158.    Delay(DelTime);
  159. (*$I EXITINT.INC*)
  160.              OldInt);
  161. END;
  162.  
  163. PROCEDURE Int05;
  164. (*$I BEGININT.INC *)
  165.    WITH PgmRegs DO BEGIN
  166.       anz.aus[1].c := 'I';
  167.       anz.aus[2].c := 'N';
  168.       anz.aus[3].c := 'T';
  169.       anz.aus[4].c := '0';
  170.       anz.aus[5].c := '5';
  171.       anz.aus[6].c := ' ';
  172.       anz.aus[7].c := ' ';
  173.       anz.aus[8].c := ' ';
  174.       anz.aus[9].c := ' ';
  175.    END;
  176.    Delay(DelTime);
  177. (*$I EXITINT.INC*)
  178.              OldInt);
  179. END;
  180.  
  181. PROCEDURE Int08;
  182. (*$I BEGININT.INC *)
  183.    WITH PgmRegs DO BEGIN
  184.       anz.aus[1].c := 'I';
  185.       anz.aus[2].c := 'N';
  186.       anz.aus[3].c := 'T';
  187.       anz.aus[4].c := '0';
  188.       anz.aus[5].c := '8';
  189.       anz.aus[6].c := ' ';
  190.       anz.aus[7].c := ' ';
  191.       anz.aus[8].c := ' ';
  192.       anz.aus[9].c := ' ';
  193.    END;
  194.    Delay(DelTime);
  195. (*$I EXITINT.INC*)
  196.              OldInt);
  197. END;
  198.  
  199. PROCEDURE Int09;
  200. (*$I BEGININT.INC *)
  201.    WITH PgmRegs DO BEGIN
  202.       anz.aus[1].c := 'I';
  203.       anz.aus[2].c := 'N';
  204.       anz.aus[3].c := 'T';
  205.       anz.aus[4].c := '0';
  206.       anz.aus[5].c := '9';
  207.       anz.aus[6].c := ' ';
  208.       anz.aus[7].c := ' ';
  209.       anz.aus[8].c := ' ';
  210.       anz.aus[9].c := ' ';
  211.    END;
  212.    Delay(DelTime);
  213. (*$I EXITINT.INC*)
  214.              OldInt);
  215. END;
  216.  
  217. PROCEDURE Int0E;
  218. (*$I BEGININT.INC *)
  219.    WITH PgmRegs DO BEGIN
  220.       anz.aus[1].c := 'I';
  221.       anz.aus[2].c := 'N';
  222.       anz.aus[3].c := 'T';
  223.       anz.aus[4].c := '0';
  224.       anz.aus[5].c := 'E';
  225.       anz.aus[6].c := ' ';
  226.       anz.aus[7].c := ' ';
  227.       anz.aus[8].c := ' ';
  228.       anz.aus[9].c := ' ';
  229.    END;
  230.    Delay(DelTime);
  231. (*$I EXITINT.INC*)
  232.              OldInt);
  233. END;
  234.  
  235. PROCEDURE Int10;
  236. CONST j : INTEGER = 0;
  237. (*$I BEGININT.INC *)
  238.    WITH PgmRegs DO BEGIN
  239.       anz.aus[1].c := 'I';
  240.       anz.aus[2].c := 'N';
  241.       anz.aus[3].c := 'T';
  242.       anz.aus[4].c := '1';
  243.       anz.aus[5].c := '0';
  244.       anz.aus[6].c := ' ';
  245.       anz.aus[7].c := 'F';
  246.       anz.aus[8].c := Chr(PgmAh DIV 16 + Ord('0'));
  247.       j := PgmAh MOD 16;
  248.       IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
  249.       ELSE CASE j OF
  250.           10 : anz.aus[9].c := 'A';
  251.           11 : anz.aus[9].c := 'B';
  252.           12 : anz.aus[9].c := 'C';
  253.           13 : anz.aus[9].c := 'D';
  254.           14 : anz.aus[9].c := 'E';
  255.           15 : anz.aus[9].c := 'F';
  256.       END;
  257.    END;
  258.    Delay(DelTime);
  259. (*$I EXITINT.INC*)
  260.              OldInt);
  261. END;
  262.  
  263. PROCEDURE Int11;
  264. (*$I BEGININT.INC *)
  265.    WITH PgmRegs DO BEGIN
  266.       anz.aus[1].c := 'I';
  267.       anz.aus[2].c := 'N';
  268.       anz.aus[3].c := 'T';
  269.       anz.aus[4].c := '1';
  270.       anz.aus[5].c := '1';
  271.       anz.aus[6].c := ' ';
  272.       anz.aus[7].c := ' ';
  273.       anz.aus[8].c := ' ';
  274.       anz.aus[9].c := ' ';
  275.    END;
  276.    Delay(DelTime);
  277. (*$I EXITINT.INC*)
  278.              OldInt);
  279. END;
  280.  
  281. PROCEDURE Int12;
  282. (*$I BEGININT.INC *)
  283.    WITH PgmRegs DO BEGIN
  284.       anz.aus[1].c := 'I';
  285.       anz.aus[2].c := 'N';
  286.       anz.aus[3].c := 'T';
  287.       anz.aus[4].c := '1';
  288.       anz.aus[5].c := '2';
  289.       anz.aus[6].c := ' ';
  290.       anz.aus[7].c := ' ';
  291.       anz.aus[8].c := ' ';
  292.       anz.aus[9].c := ' ';
  293.    END;
  294.    Delay(DelTime);
  295. (*$I EXITINT.INC*)
  296.              OldInt);
  297. END;
  298.  
  299. PROCEDURE Int13;
  300. CONST j : INTEGER = 0;
  301. (*$I BEGININT.INC *)
  302.    WITH PgmRegs DO BEGIN
  303.       anz.aus[1].c := 'I';
  304.       anz.aus[2].c := 'N';
  305.       anz.aus[3].c := 'T';
  306.       anz.aus[4].c := '1';
  307.       anz.aus[5].c := '3';
  308.       anz.aus[6].c := ' ';
  309.       anz.aus[7].c := 'F';
  310.       anz.aus[8].c := Chr(PgmAh DIV 16 + Ord('0'));
  311.       j := PgmAh MOD 16;
  312.       IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
  313.       ELSE CASE j OF
  314.           10 : anz.aus[9].c := 'A';
  315.           11 : anz.aus[9].c := 'B';
  316.           12 : anz.aus[9].c := 'C';
  317.           13 : anz.aus[9].c := 'D';
  318.           14 : anz.aus[9].c := 'E';
  319.           15 : anz.aus[9].c := 'F';
  320.       END;
  321.    END;
  322.    Delay(DelTime);
  323. (*$I EXITINT.INC*)
  324.              OldInt);
  325. END;
  326.  
  327. PROCEDURE Int14;
  328. CONST j : INTEGER = 0;
  329. (*$I BEGININT.INC *)
  330.    WITH PgmRegs DO BEGIN
  331.       anz.aus[1].c := 'I';
  332.       anz.aus[2].c := 'N';
  333.       anz.aus[3].c := 'T';
  334.       anz.aus[4].c := '1';
  335.       anz.aus[5].c := '4';
  336.       anz.aus[6].c := ' ';
  337.       anz.aus[7].c := 'F';
  338.       anz.aus[8].c := Chr(PgmAh DIV 16 + Ord('0'));
  339.       j := PgmAh MOD 16;
  340.       IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
  341.       ELSE CASE j OF
  342.           10 : anz.aus[9].c := 'A';
  343.           11 : anz.aus[9].c := 'B';
  344.           12 : anz.aus[9].c := 'C';
  345.           13 : anz.aus[9].c := 'D';
  346.           14 : anz.aus[9].c := 'E';
  347.           15 : anz.aus[9].c := 'F';
  348.       END;
  349.    END;
  350.    Delay(DelTime);
  351. (*$I EXITINT.INC*)
  352.              OldInt);
  353. END;
  354.  
  355. PROCEDURE Int16;
  356. CONST j : INTEGER = 0;
  357. (*$I BEGININT.INC *)
  358.    WITH PgmRegs DO BEGIN
  359.       anz.aus[1].c := 'I';
  360.       anz.aus[2].c := 'N';
  361.       anz.aus[3].c := 'T';
  362.       anz.aus[4].c := '1';
  363.       anz.aus[5].c := '6';
  364.       anz.aus[6].c := ' ';
  365.       anz.aus[7].c := 'F';
  366.       anz.aus[8].c := Chr(PgmAh + Ord('0'));
  367.       anz.aus[9].c := ' ';
  368.    END;
  369.    Delay(DelTime);
  370. (*$I EXITINT.INC*)
  371.              OldInt);
  372. END;
  373.  
  374. PROCEDURE Int17;
  375. CONST j : INTEGER = 0;
  376. (*$I BEGININT.INC *)
  377.    WITH PgmRegs DO BEGIN
  378.       anz.aus[1].c := 'I';
  379.       anz.aus[2].c := 'N';
  380.       anz.aus[3].c := 'T';
  381.       anz.aus[4].c := '1';
  382.       anz.aus[5].c := '7';
  383.       anz.aus[6].c := ' ';
  384.       anz.aus[7].c := 'F';
  385.       anz.aus[8].c := Chr(PgmAh + Ord('0'));
  386.       anz.aus[9].c := ' ';
  387.    END;
  388.    Delay(DelTime);
  389. (*$I EXITINT.INC*)
  390.              OldInt);
  391. END;
  392.  
  393. PROCEDURE Int19;
  394. (*$I BEGININT.INC *)
  395.    WITH PgmRegs DO BEGIN
  396.       anz.aus[1].c := 'I';
  397.       anz.aus[2].c := 'N';
  398.       anz.aus[3].c := 'T';
  399.       anz.aus[4].c := '1';
  400.       anz.aus[5].c := '9';
  401.       anz.aus[6].c := ' ';
  402.       anz.aus[7].c := ' ';
  403.       anz.aus[8].c := ' ';
  404.       anz.aus[9].c := ' ';
  405.    END;
  406.    Delay(DelTime);
  407. (*$I EXITINT.INC*)
  408.              OldInt);
  409. END;
  410.  
  411. PROCEDURE Int1A;
  412. (*$I BEGININT.INC *)
  413.    WITH PgmRegs DO BEGIN
  414.       anz.aus[1].c := 'I';
  415.       anz.aus[2].c := 'N';
  416.       anz.aus[3].c := 'T';
  417.       anz.aus[4].c := '1';
  418.       anz.aus[5].c := 'A';
  419.       anz.aus[6].c := ' ';
  420.       anz.aus[7].c := ' ';
  421.       anz.aus[8].c := ' ';
  422.       anz.aus[9].c := ' ';
  423.    END;
  424.    Delay(DelTime);
  425. (*$I EXITINT.INC*)
  426.              OldInt);
  427. END;
  428.  
  429. PROCEDURE Int20;
  430. (*$I BEGININT.INC *)
  431.    WITH PgmRegs DO BEGIN
  432.       anz.aus[1].c := 'I';
  433.       anz.aus[2].c := 'N';
  434.       anz.aus[3].c := 'T';
  435.       anz.aus[4].c := '2';
  436.       anz.aus[5].c := '0';
  437.       anz.aus[6].c := ' ';
  438.       anz.aus[7].c := ' ';
  439.       anz.aus[8].c := ' ';
  440.       anz.aus[9].c := ' ';
  441.    END;
  442.    Delay(DelTime);
  443. (*$I EXITINT.INC*)
  444.              OldInt);
  445. END;
  446.  
  447. PROCEDURE Int21;
  448. CONST j : INTEGER = 0;
  449. (*$I BEGININT.INC *)
  450.    WITH PgmRegs DO BEGIN
  451.       anz.aus[1].c := 'I';
  452.       anz.aus[2].c := 'N';
  453.       anz.aus[3].c := 'T';
  454.       anz.aus[4].c := '2';
  455.       anz.aus[5].c := '1';
  456.       anz.aus[6].c := ' ';
  457.       anz.aus[7].c := 'F';
  458.       anz.aus[8].c := Chr (PgmAh DIV 16 + Ord('0'));
  459.       j := PgmAh MOD 16;
  460.       IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
  461.       ELSE CASE j OF
  462.           10 : anz.aus[9].c := 'A';
  463.           11 : anz.aus[9].c := 'B';
  464.           12 : anz.aus[9].c := 'C';
  465.           13 : anz.aus[9].c := 'D';
  466.           14 : anz.aus[9].c := 'E';
  467.           15 : anz.aus[9].c := 'F';
  468.       END;
  469.       Delay(DelTime);
  470.    END;
  471. (*$I EXITINT.INC*)
  472.              OldInt);
  473. END;
  474.  
  475. PROCEDURE Int22;
  476. (*$I BEGININT.INC *)
  477.    WITH PgmRegs DO BEGIN
  478.       anz.aus[1].c := 'I';
  479.       anz.aus[2].c := 'N';
  480.       anz.aus[3].c := 'T';
  481.       anz.aus[4].c := '2';
  482.       anz.aus[5].c := '2';
  483.       anz.aus[6].c := ' ';
  484.       anz.aus[7].c := ' ';
  485.       anz.aus[8].c := ' ';
  486.       anz.aus[9].c := ' ';
  487.    END;
  488.    Delay(DelTime);
  489. (*$I EXITINT.INC*)
  490.              OldInt);
  491. END;
  492.  
  493. PROCEDURE Int23;
  494. (*$I BEGININT.INC *)
  495.    WITH PgmRegs DO BEGIN
  496.       anz.aus[1].c := 'I';
  497.       anz.aus[2].c := 'N';
  498.       anz.aus[3].c := 'T';
  499.       anz.aus[4].c := '2';
  500.       anz.aus[5].c := '3';
  501.       anz.aus[6].c := ' ';
  502.       anz.aus[7].c := ' ';
  503.       anz.aus[8].c := ' ';
  504.       anz.aus[9].c := ' ';
  505.    END;
  506.    Delay(DelTime);
  507. (*$I EXITINT.INC*)
  508.              OldInt);
  509. END;
  510.  
  511. PROCEDURE Int24;
  512. (*$I BEGININT.INC *)
  513.    WITH PgmRegs DO BEGIN
  514.       anz.aus[1].c := 'I';
  515.       anz.aus[2].c := 'N';
  516.       anz.aus[3].c := 'T';
  517.       anz.aus[4].c := '2';
  518.       anz.aus[5].c := '4';
  519.       anz.aus[6].c := ' ';
  520.       anz.aus[7].c := ' ';
  521.       anz.aus[8].c := ' ';
  522.       anz.aus[9].c := ' ';
  523.    END;
  524.    Delay(DelTime);
  525. (*$I EXITINT.INC*)
  526.              OldInt);
  527. END;
  528.  
  529. PROCEDURE Int25;
  530. (*$I BEGININT.INC *)
  531.    WITH PgmRegs DO BEGIN
  532.       anz.aus[1].c := 'I';
  533.       anz.aus[2].c := 'N';
  534.       anz.aus[3].c := 'T';
  535.       anz.aus[4].c := '2';
  536.       anz.aus[5].c := '5';
  537.       anz.aus[6].c := ' ';
  538.       anz.aus[7].c := ' ';
  539.       anz.aus[8].c := ' ';
  540.       anz.aus[9].c := ' ';
  541.    END;
  542.    Delay(DelTime);
  543. (*$I EXITINT.INC*)
  544.              OldInt);
  545. END;
  546.  
  547. PROCEDURE Int26;
  548. (*$I BEGININT.INC *)
  549.    WITH PgmRegs DO BEGIN
  550.       anz.aus[1].c := 'I';
  551.       anz.aus[2].c := 'N';
  552.       anz.aus[3].c := 'T';
  553.       anz.aus[4].c := '2';
  554.       anz.aus[5].c := '6';
  555.       anz.aus[6].c := ' ';
  556.       anz.aus[7].c := ' ';
  557.       anz.aus[8].c := ' ';
  558.       anz.aus[9].c := ' ';
  559.    END;
  560.    Delay(DelTime);
  561. (*$I EXITINT.INC*)
  562.              OldInt);
  563. END;
  564.  
  565. PROCEDURE Int27;
  566. (*$I BEGININT.INC *)
  567.    WITH PgmRegs DO BEGIN
  568.       anz.aus[1].c := 'I';
  569.       anz.aus[2].c := 'N';
  570.       anz.aus[3].c := 'T';
  571.       anz.aus[4].c := '2';
  572.       anz.aus[5].c := '7';
  573.       anz.aus[6].c := ' ';
  574.       anz.aus[7].c := ' ';
  575.       anz.aus[8].c := ' ';
  576.       anz.aus[9].c := ' ';
  577.    END;
  578.    Delay(DelTime);
  579. (*$I EXITINT.INC*)
  580.              OldInt);
  581. END;
  582. (* ---------------------------------------------------------- *)
  583. PROCEDURE Parameter;
  584. BEGIN
  585.    IF ParamCount = 0 THEN
  586.    BEGIN
  587.       WriteLn('Kein Interrupt spezifiziert...'); Halt;
  588.    END;
  589.    IF ParamCount > 1 THEN
  590.    BEGIN
  591.       WriteLn ('Zu viel Parameter...');          Halt;
  592.    END;
  593.    Val(ParamStr(1), Value, Code);
  594.    IF Code <> 0 THEN
  595.    BEGIN
  596.       WriteLn('ungueltiger Parameter.');         Halt;
  597.    END
  598. END;
  599. (* ---------------------------------------------------------- *)
  600. BEGIN  (* ShowInts *)
  601.    Parameter;
  602.    CASE Value OF
  603.      $00 : BEGIN
  604.              WITH OldInt DO
  605.                IntGet(BIOS_zero_division, Segment, Offset);
  606.              IntSet(BIOS_zero_division, CSeg, Ofs(Int00));
  607.            END;
  608.      $02 : BEGIN
  609.              WITH OldInt DO
  610.                IntGet(BIOS_non_mask_Int, Segment, Offset);
  611.              IntSet(BIOS_non_mask_Int, CSeg, Ofs(Int02));
  612.            END;
  613.      $04 : BEGIN
  614.              WITH OldInt DO
  615.                IntGet(BIOS_overflow, Segment, Offset);
  616.              IntSet(BIOS_overflow, CSeg, Ofs(Int04));
  617.            END;
  618.      $05 : BEGIN
  619.              WITH OldInt DO
  620.                IntGet(BIOS_print_screen, Segment, Offset);
  621.              IntSet(BIOS_print_screen, CSeg, Ofs(Int05));
  622.            END;
  623.      $08 : BEGIN
  624.              WITH OldInt DO
  625.                IntGet(BIOS_system_timer, Segment, Offset);
  626.              IntSet(BIOS_system_timer, CSeg, Ofs(Int08));
  627.            END;
  628.      $09 : BEGIN
  629.              WITH OldInt DO
  630.                IntGet(BIOS_keyboard, Segment, Offset);
  631.              IntSet(BIOS_keyboard, CSeg, Ofs(Int09));
  632.            END;
  633.      $0E : BEGIN
  634.              WITH OldInt DO
  635.                IntGet(BIOS_diskette, Segment, Offset);
  636.              IntSet(BIOS_diskette, CSeg, Ofs(Int0E));
  637.            END;
  638.      $10 : BEGIN
  639.              WITH OldInt DO
  640.                IntGet(BIOS_screen_io, Segment, Offset);
  641.              IntSet(BIOS_screen_io, CSeg, Ofs(Int10));
  642.            END;
  643.      $11 : BEGIN
  644.              WITH OldInt DO
  645.                IntGet(BIOS_equipment, Segment, Offset);
  646.              IntSet(BIOS_equipment, CSeg, Ofs(Int11));
  647.            END;
  648.      $12 : BEGIN
  649.              WITH OldInt DO
  650.                IntGet(BIOS_memory_size, Segment, Offset);
  651.              IntSet(BIOS_memory_size, CSeg, Ofs(Int12));
  652.            END;
  653.      $13 : BEGIN
  654.              WITH OldInt DO
  655.                IntGet(BIOS_disk_io, Segment, Offset);
  656.              IntSet(BIOS_disk_io, CSeg, Ofs(Int13));
  657.            END;
  658.      $14 : BEGIN
  659.              WITH OldInt DO
  660.                IntGet(BIOS_comm_io, Segment, Offset);
  661.              IntSet(BIOS_comm_io, CSeg, Ofs(Int14));
  662.            END;
  663.      $16 : BEGIN
  664.              WITH OldInt DO
  665.                IntGet(BIOS_keyboard_io, Segment, Offset);
  666.              IntSet(BIOS_keyboard_io, CSeg, Ofs(Int16));
  667.            END;
  668.      $17 : BEGIN
  669.              WITH OldInt DO
  670.                IntGet(BIOS_printer_io, Segment, Offset);
  671.              IntSet(BIOS_printer_io, CSeg, Ofs(Int17));
  672.            END;
  673.      $19 : BEGIN
  674.              WITH OldInt DO
  675.                IntGet(BIOS_boot_strap, Segment, Offset);
  676.              IntSet(BIOS_boot_strap, CSeg, Ofs(Int19));
  677.            END;
  678.      $1A : BEGIN
  679.              WITH OldInt DO
  680.                IntGet(BIOS_time, Segment, Offset);
  681.              IntSet(BIOS_time, CSeg, Ofs(Int1A));
  682.            END;
  683.      $20 : BEGIN
  684.              WITH OldInt DO
  685.                IntGet(terminate_program, Segment, Offset);
  686.              IntSet(terminate_program, CSeg, Ofs(Int20));
  687.            END;
  688.      $21 : BEGIN
  689.              WITH OldInt DO
  690.                IntGet(dos_function_call, Segment, Offset);
  691.              IntSet(dos_function_call, CSeg, Ofs(Int21));
  692.            END;
  693.      $22 : BEGIN
  694.              WITH OldInt DO
  695.                IntGet(terminate_address, Segment, Offset);
  696.              IntSet(terminate_address, CSeg, Ofs(Int22));
  697.            END;
  698.      $23 : BEGIN
  699.              WITH OldInt DO
  700.                IntGet(ctrl_c_address, Segment, Offset);
  701.              IntSet(ctrl_c_address, CSeg, Ofs(Int23))
  702.            END;
  703.      $24 : BEGIN
  704.              WITH OldInt DO
  705.                IntGet(critical_error, Segment, Offset);
  706.              IntSet(critical_error, CSeg, Ofs(Int24));
  707.            END;
  708.      $25 : BEGIN
  709.              WITH OldInt DO
  710.                IntGet(absolute_disk_read, Segment, Offset);
  711.              IntSet(absolute_disk_read, CSeg, Ofs(Int25));
  712.            END;
  713.      $26 : BEGIN
  714.              WITH OldInt DO
  715.                IntGet(absolute_disk_write, Segment, Offset);
  716.              IntSet(absolute_disk_write, CSeg, Ofs(Int26));
  717.            END;
  718.      $27 : BEGIN
  719.              WITH OldInt DO
  720.                IntGet(terminate_resident, Segment, Offset);
  721.              IntSet(terminate_resident, CSeg, Ofs(Int27));
  722.            END;
  723.      ELSE  BEGIN
  724.              WriteLn('Interrupt nicht implementiert...');
  725.              Halt
  726.            END;
  727.    END; (* case *)
  728.    MakeResident;
  729. END. (* ShowInts *)
  730.