home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / TASMSWAN.ZIP / SLOWMO.ASM < prev    next >
Assembly Source File  |  1989-07-17  |  2KB  |  105 lines

  1. %TITLE  "Slow Motion interrupt generator"
  2.  
  3.     IDEAL
  4.     DOSSEG
  5.     MODEL    small
  6.     STACK    256
  7.  
  8. ;----- Equates
  9. delay        EQU    0010h
  10. cr        EQU    13
  11. lf        EQU    10
  12. BIOSData    EQU    040h
  13. LowTimer    EQU    006Ch
  14. PIC8259        EQU    0020h
  15. EOI        EQU    0020h
  16.  
  17.     DATASEG
  18.  
  19. exitCode    db    0
  20. string        db    'This is a test of the timer',cr,lf
  21.         db    ' Slow-Mo interrupt handler',cr,lf,0
  22. timerSeg    dw    ?
  23. timerOfs    dw    ?
  24.  
  25.  
  26.     CODESEG
  27.  
  28. ;---------- from STRIO.obj  &  KEYBOARD.obj
  29.     EXTRN    StrWrite:proc, KeyWaiting:proc
  30.  
  31.  
  32. Start:
  33.     mov    ax,@data
  34.     mov    ds,ax
  35.     mov    es,ax
  36.     mov    [word cs:difference],delay
  37.     push    es
  38.     mov    ax, 351Ch
  39.     int    21h
  40.     mov    [timerSeg],es
  41.     mov    [timerOfs],bx
  42.     pop    es
  43.     push    ds
  44.     mov    ax,251Ch
  45.     push    cs
  46.     pop    ds
  47.     mov    dx, offset SlowMo
  48.     int    21h
  49.     pop    ds
  50.     mov    di, offset string
  51. @@10:
  52.     call    StrWrite
  53.     call    KeyWaiting
  54.     jz    @@10
  55.     push    ds
  56.     mov    ax,251Ch
  57.     mov    dx,[timerOfs]
  58.     mov    ds,[timerSeg]
  59.     int    21h
  60.     pop    ds
  61. Exit:
  62.     mov    ah,04Ch
  63.     mov    al,[exitCode]
  64.     int    21h
  65.  
  66. %NEWPAGE
  67. ;------------------------------------------------------------------------
  68. ; SlowMo - Slow motion timer  Interrupt Service Routine (ISR)
  69. ;------------------------------------------------------------------------
  70. ;    Input:  none
  71. ;    Output: none (waits for time difference)
  72. ;       Registers:  none
  73. ;------------------------------------------------------------------------
  74. inProgress    db    0
  75. difference    dw    0
  76.  
  77. PROC    SlowMo
  78.     cmp    [byte cs:inProgress],0
  79.     jne    @@99
  80.     inc    [byte cs:inProgress]
  81.     sti
  82.     push    ax
  83.     push    ds
  84.     push    dx
  85.     mov    al,EOI
  86.     out    PIC8259,al
  87.     mov    ax,BIOSData
  88.     mov    ds,ax
  89.     mov    ax, [word LowTimer]
  90. @@10:
  91.     mov    dx, [word LowTimer]
  92.     sub    dx,ax
  93.     cmp    dx, [cs:difference]
  94.     jb    @@10
  95.     cli
  96.     dec    [byte cs:inProgress]
  97.     pop    dx
  98.     pop    ds
  99.     pop    ax
  100. @@99:
  101.     iret
  102. ENDP    SlowMo
  103.  
  104.     END    Start
  105.