int_pm.tex 929 B

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