home *** CD-ROM | disk | FTP | other *** search
/ CD-X 1 / cdx_01.iso / demodisc / basq / source / poweru / timer.asm < prev    next >
Encoding:
Assembly Source File  |  1993-07-18  |  2.4 KB  |  149 lines

  1. PUBLIC        TIMINGON
  2. PUBLIC        TIMINGOFF
  3. PUBLIC        SETTIMFUNCON
  4. PUBLIC        SETTIMFUNCOFF
  5.  
  6. .386
  7. .MODEL USE16 SMALL
  8. .DATA
  9.  
  10. PREVINT08H    DW    0
  11.         DW    0
  12. PRESTIMNUM    DB    4
  13. TIMINGSTATUS    DB    0
  14. TIMINGFUNCST    DW    0000000000000000B
  15. TIMINGS        DW    16      DUP(0)
  16. TIMINGFUNCS    DW    16      DUP(EMPTYTIMFUNC)
  17. PRESENTTIMINGS    DW    16      DUP(0)
  18.  
  19. .CODE
  20.  
  21. SETTIMFUNCON:    CLI
  22.         PUSHA
  23.         PUSH    DS
  24.         PUSH    DGROUP
  25.         POP    DS
  26.         CMP    AX,15
  27.         JA    ERRORNSTON
  28.         PUSH    AX
  29.         ADD    AX,AX
  30.         MOV    DI,AX
  31.         MOV    TIMINGS[DI],CX
  32.         MOV    PRESENTTIMINGS[DI],0
  33.         MOV    TIMINGFUNCS[DI],SI
  34.         POP    CX
  35.         MOV    AX,1
  36.         SHL    AX,CL
  37.         OR    TIMINGFUNCST,AX
  38. ERRORNSTON:    POP    DS
  39.         POPA
  40.         STI
  41.         RET
  42.  
  43. SETTIMFUNCOFF:    CLI
  44.         PUSHA
  45.         PUSH    DS
  46.         PUSH    DGROUP
  47.         POP    DS
  48.         CMP    AX,15
  49.         JA    ERRORNSTOFF
  50.         MOV    DX,AX
  51.         ADD    AX,AX
  52.         MOV    SI,AX
  53.         LEA    CX,EMPTYTIMFUNC
  54.         MOV    TIMINGFUNCS[SI],CX
  55.         MOV    TIMINGS[SI],0
  56.         MOV    CX,DX
  57.         MOV    AX,1
  58.         SHL    AX,CL
  59.         XOR    AX,1111111111111111B
  60.         AND    TIMINGFUNCST,AX
  61. ERRORNSTOFF:    POP    DS
  62.         POPA
  63.         STI
  64.         RET
  65.  
  66. TIMINGON:    PUSHA
  67.         PUSH    ES
  68.         PUSH    DS
  69.         CLI
  70.         XOR    AX,AX
  71.         MOV    ES,AX
  72.         MOV    SI,8
  73.         SHL    SI,2
  74.         MOV    AX,ES:[SI]
  75.         MOV    PREVINT08H,AX
  76.         MOV    AX,ES:[SI+2]
  77.         MOV    PREVINT08H[2],AX
  78.         MOV    AX,CS
  79.         MOV    ES:[SI+2],AX
  80.         LEA    AX,NEWINT08H
  81.         MOV    ES:[SI],AX
  82.         MOV    AL,36H
  83.         OUT    43H,AL
  84.         MOV    AX,16384
  85.         OUT    40H,AL
  86.         MOV    AL,AH
  87.         OUT    40H,AL
  88.         MOV    PRESTIMNUM,4
  89.         MOV    TIMINGSTATUS,1
  90.         STI
  91.         POP    DS
  92.         POP    ES
  93.         POPA
  94. EMPTYTIMFUNC:    RET
  95.  
  96. NEWINT08H:    PUSHA
  97.         PUSH    DS
  98.         ;DEC    PRESTIMNUM
  99.         ;JNZ    NOWNOTCALLI8
  100.         ;PUSHF
  101.         ;CALL    DWORD PTR DS:[PREVINT08H]
  102.         ;MOV    PRESTIMNUM,4
  103. NOWNOTCALLI8:    ;MOV    AX,DGROUP
  104.         ;MOV    DS,AX
  105.         ;MOV    BX,1
  106.         ;XOR    SI,SI
  107. RETRYSCTIMFCIK:    ;TEST    BX,TIMINGFUNCST
  108.         ;JZ    NOONTIMFUNC
  109.         ;MOV    AX,PRESENTTIMINGS[SI]
  110.         ;INC    AX
  111.         ;CMP    AX,TIMINGS[SI]
  112.         ;JNZ    NOCALLTIMFUNC
  113.         ;CALL    WORD PTR TIMINGFUNCS[SI]
  114.         ;XOR    AX,AX
  115. NOCALLTIMFUNC:    ;MOV    PRESENTTIMINGS[SI],AX
  116. NOONTIMFUNC:    ;CMP    BX,32768
  117.         ;JZ    ENDTIMINGFUNC
  118.         ;SHL    BX,1
  119.         ;ADD    SI,2
  120.         ;JMP    RETRYSCTIMFCIK
  121. ENDTIMINGFUNC:    MOV     AL,20H        ; 8259A I/O PORT
  122.                 OUT     20H,AL        ; SEND NONSPECIFIC EOI TO 8259A
  123.         POP    DS
  124.         POPA
  125.         IRET
  126.  
  127. TIMINGOFF:    PUSHA
  128.         PUSH    DS
  129.         PUSH    DGROUP
  130.         POP    DS
  131.         TEST    TIMINGSTATUS,1
  132.         JZ    NOONTIMING
  133.         CLI
  134.         LDS    DX,DWORD PTR PREVINT08H
  135.                 MOV    AX,2508H
  136.                 INT    21H
  137.         MOV    TIMINGSTATUS,0
  138.         MOV    AL,36H
  139.         OUT    43H,AL
  140.         XOR    AL,AL
  141.         OUT    40H,AL
  142.         OUT    40H,AL
  143.         STI
  144. NOONTIMING:    POP    DS
  145.         POPA
  146.         RET
  147.  
  148. END
  149.