intpm.pp 853 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. Program int_pm;
  2. uses crt, go32;
  3. const int1c = $1c;
  4. var oldint1c : tseginfo;
  5. newint1c : tseginfo;
  6. int1c_counter : Longint;
  7. {$ASMMODE DIRECT}
  8. procedure int1c_handler; assembler;
  9. asm
  10. cli
  11. pushw %ds
  12. pushw %ax
  13. movw %cs:INT1C_DS, %ax
  14. movw %ax, %ds
  15. incl _INT1C_COUNTER
  16. popw %ax
  17. popw %ds
  18. sti
  19. iret
  20. INT1C_DS: .word 0
  21. end;
  22. var i : Longint;
  23. begin
  24. newint1c.offset := @int1c_handler;
  25. newint1c.segment := get_cs;
  26. get_pm_interrupt(int1c, oldint1c);
  27. asm
  28. movw %ds, %ax
  29. movw %ax, INT1C_DS
  30. end;
  31. Writeln('-- Press any key to exit --');
  32. set_pm_interrupt(int1c, newint1c);
  33. while (not keypressed) do begin
  34. gotoxy(1, wherey);
  35. write('Number of interrupts occured : ',
  36. int1c_counter);
  37. end;
  38. set_pm_interrupt(int1c, oldint1c);
  39. end.