home *** CD-ROM | disk | FTP | other *** search
- ;HPTIMER v1.00 for QuickBASIC 4.5
- ;By Rich Geldreich April 19th, 1992
- ;Any questions/suggestions:
-
- ;Rich Geldreich
- ;410 Market St.
- ;Gloucester City, NJ 08030
-
- ;to make a .qlb, use:
- ;link /q hptimer.obj,hptimer.qlb,,bqlb45.lib
-
- PUBLIC InitTimer,GetTimer,SetTimer,DetachTimer
- PUBLIC SetAlarm,GetAlarm,AlarmOn,AlarmOff
-
- EXTRN SETUEVENT
-
- P1 EQU [ss:bp+6]
- P2 EQU [ss:bp+8]
- P3 EQU [ss:bp+10]
-
- Code segment 'CODE'
- Assume cs: Code
-
- Old_Offset dw 0
- Old_Segment dw 0
-
- Already_Changed dw 0
-
- Number_Clicks_low dw 0
- Number_Clicks_high dw 0
-
- Clicks dw 0
- Delay dw 0
-
- Alarm_Low dw 0
- Alarm_High dw 0
-
- Delay_Low dw 0
- Delay_High dw 0
-
- Alarm_On dw 0
- Delay_On dw 0
-
- Qb_data_seg dw 0
-
- InitTimer proc far
- push bp
- mov bp, sp
-
- cmp [cs:Already_Changed], 1
- je exit1
- mov [cs:Already_Changed], 1
-
- mov cx, P1
- and cx, cx
- jz exit1
-
- mov [cs:Qb_data_seg], ds
-
- mov ax, 3200
- mul cx
- mov bx, 65535
- div bx
- cmp dx, 1599
- jna @@10
- inc ax
- @@10:
- mov [cs:Delay], ax
- mov [cs:Clicks], 0
-
- push es
- mov ax, 3508h
- int 21h
- mov [cs:Old_Segment], es
- mov [cs:Old_Offset], bx
- pop es
-
- mov dx, offset NewInterrupt
- push ds
- mov ax, 2508h
- push cs
- pop ds
- int 21h
- pop ds
-
- mov al, 00110100b
- out 043h, al
-
- mov ax, cx
- out 040h, al
- mov al, ah
- out 040h, al
-
- exit1:
- pop bp
- retf 2
- InitTimer endp
-
- NewInterrupt proc far
- push ax
- push bx
-
- mov ax, [cs:Number_Clicks_Low]
- add ax, 1
- jnc @@05
- inc [cs:Number_Clicks_High]
- @@05:
- mov [cs:Number_Clicks_Low], ax
-
- cmp byte ptr [cs:Alarm_On], -1
- jne @@06
- cmp ax, [cs:Alarm_Low]
- jne @@06
- mov bx, [cs:Number_Clicks_High]
- cmp bx, [cs:Alarm_High]
- jne @@06
-
- push cx
- push dx
- push si
- push di
- push bp
- push es
- push ds
- mov ds, [cs:Qb_data_seg]
- call far ptr SETUEVENT
- pop ds
- pop es
- pop bp
- pop di
- pop si
- pop dx
- pop cx
-
- @@06:
- mov ax, [cs:Clicks]
- add ax, [cs:Delay]
- cmp ax, 3199
- jna @@11
- sub ax, 3200
- mov [cs:Clicks], ax
- pop bx
- pop ax
- jmp dword ptr [Old_Offset]
- @@11:
- mov [cs:Clicks], ax
- mov al, 20h
- out 20h, al
- pop bx
- pop ax
- sti
- iret
- NewInterrupt endp
-
- GetTimer proc far
- push bp
- mov bp, sp
- mov si, P1
- mov ax, [cs:Number_Clicks_low]
- mov [ds:si], ax
- mov ax, [cs:Number_Clicks_High]
- mov [ds:si+2], ax
-
- pop bp
- retf 2
- GetTimer endp
-
- SetTimer proc far
- push bp
- mov bp, sp
- push si
- push ax
- mov si, P1
- mov ax, [ds:si]
- mov [cs:Number_Clicks_Low], ax
- mov ax, [ds:si+2]
- mov [cs:Number_Clicks_High], ax
- pop ax
- pop si
- pop bp
- retf 2
- SetTimer endp
-
- DetachTimer proc far
- cmp [cs:Already_changed], 0
- je @@exit
- mov [cs:Already_Changed], 0
-
- push es
- mov ax, 3508h
- int 21h
- mov ax, cs
- mov cx, es
- pop es
- cmp ax, cx
- jne @@exit
- cmp bx, offset NewInterrupt
- jne @@exit
-
- in al, 043h
- mov dl, al
- mov al, 00110100b
- out 043h, al
- mov al, 0FFh
- out 040h, al
- out 040h, al
- mov al, dl
- out 043h, al
-
- mov dx, [cs:Old_Offset]
- push ds
- mov ax, [cs:Old_Segment]
- mov ds, ax
- mov ax, 2508h
- int 21h
- pop ds
-
- @@exit:
- retf 0
- DetachTimer endp
- SetAlarm proc far
- push bp
- mov bp, sp
-
- mov si, P1
- mov ax, [ds:si]
- mov [cs:Alarm_Low], ax
- mov ax, [ds:si+2]
- mov [cs:Alarm_High], ax
-
- pop bp
- retf 2
- SetAlarm endp
-
- GetAlarm proc far
- push bp
- mov bp, sp
-
- mov si, P1
- mov ax, [cs:Alarm_Low]
- mov [ds:si], ax
- mov ax, [cs:Alarm_High]
- mov [ds:si+2], ax
-
- pop bp
- retf 2
- GetAlarm endp
- AlarmOff proc far
- mov byte ptr [cs:Alarm_On], 0
- retf 0
- AlarmOff endp
- AlarmOn proc far
- mov byte ptr[cs:Alarm_On],-1
- retf 0
- AlarmOn endp
- ends
- END
-
-
-