home *** CD-ROM | disk | FTP | other *** search
- PUBLIC TIMINGON
- PUBLIC TIMINGOFF
- PUBLIC SETTIMFUNCON
- PUBLIC SETTIMFUNCOFF
-
- .386
- .MODEL USE16 SMALL
- .DATA
-
- PREVINT08H DW 0
- DW 0
- PRESTIMNUM DB 4
- TIMINGSTATUS DB 0
- TIMINGFUNCST DW 0000000000000000B
- TIMINGS DW 16 DUP(0)
- TIMINGFUNCS DW 16 DUP(EMPTYTIMFUNC)
- PRESENTTIMINGS DW 16 DUP(0)
-
- .CODE
-
- SETTIMFUNCON: CLI
- PUSHA
- PUSH DS
- PUSH DGROUP
- POP DS
- CMP AX,15
- JA ERRORNSTON
- PUSH AX
- ADD AX,AX
- MOV DI,AX
- MOV TIMINGS[DI],CX
- MOV PRESENTTIMINGS[DI],0
- MOV TIMINGFUNCS[DI],SI
- POP CX
- MOV AX,1
- SHL AX,CL
- OR TIMINGFUNCST,AX
- ERRORNSTON: POP DS
- POPA
- STI
- RET
-
- SETTIMFUNCOFF: CLI
- PUSHA
- PUSH DS
- PUSH DGROUP
- POP DS
- CMP AX,15
- JA ERRORNSTOFF
- MOV DX,AX
- ADD AX,AX
- MOV SI,AX
- LEA CX,EMPTYTIMFUNC
- MOV TIMINGFUNCS[SI],CX
- MOV TIMINGS[SI],0
- MOV CX,DX
- MOV AX,1
- SHL AX,CL
- XOR AX,1111111111111111B
- AND TIMINGFUNCST,AX
- ERRORNSTOFF: POP DS
- POPA
- STI
- RET
-
- TIMINGON: PUSHA
- PUSH ES
- PUSH DS
- CLI
- XOR AX,AX
- MOV ES,AX
- MOV SI,8
- SHL SI,2
- MOV AX,ES:[SI]
- MOV PREVINT08H,AX
- MOV AX,ES:[SI+2]
- MOV PREVINT08H[2],AX
- MOV AX,CS
- MOV ES:[SI+2],AX
- LEA AX,NEWINT08H
- MOV ES:[SI],AX
- MOV AL,36H
- OUT 43H,AL
- MOV AX,16384
- OUT 40H,AL
- MOV AL,AH
- OUT 40H,AL
- MOV PRESTIMNUM,4
- MOV TIMINGSTATUS,1
- STI
- POP DS
- POP ES
- POPA
- EMPTYTIMFUNC: RET
-
- NEWINT08H: PUSHA
- PUSH DS
- ;DEC PRESTIMNUM
- ;JNZ NOWNOTCALLI8
- ;PUSHF
- ;CALL DWORD PTR DS:[PREVINT08H]
- ;MOV PRESTIMNUM,4
- NOWNOTCALLI8: ;MOV AX,DGROUP
- ;MOV DS,AX
- ;MOV BX,1
- ;XOR SI,SI
- RETRYSCTIMFCIK: ;TEST BX,TIMINGFUNCST
- ;JZ NOONTIMFUNC
- ;MOV AX,PRESENTTIMINGS[SI]
- ;INC AX
- ;CMP AX,TIMINGS[SI]
- ;JNZ NOCALLTIMFUNC
- ;CALL WORD PTR TIMINGFUNCS[SI]
- ;XOR AX,AX
- NOCALLTIMFUNC: ;MOV PRESENTTIMINGS[SI],AX
- NOONTIMFUNC: ;CMP BX,32768
- ;JZ ENDTIMINGFUNC
- ;SHL BX,1
- ;ADD SI,2
- ;JMP RETRYSCTIMFCIK
- ENDTIMINGFUNC: MOV AL,20H ; 8259A I/O PORT
- OUT 20H,AL ; SEND NONSPECIFIC EOI TO 8259A
- POP DS
- POPA
- IRET
-
- TIMINGOFF: PUSHA
- PUSH DS
- PUSH DGROUP
- POP DS
- TEST TIMINGSTATUS,1
- JZ NOONTIMING
- CLI
- LDS DX,DWORD PTR PREVINT08H
- MOV AX,2508H
- INT 21H
- MOV TIMINGSTATUS,0
- MOV AL,36H
- OUT 43H,AL
- XOR AL,AL
- OUT 40H,AL
- OUT 40H,AL
- STI
- NOONTIMING: POP DS
- POPA
- RET
-
- END
-