Initial commit
This commit is contained in:
179
LIB386/LIB_SYS/TIMER_A.ASM
Normal file
179
LIB386/LIB_SYS/TIMER_A.ASM
Normal file
@@ -0,0 +1,179 @@
|
||||
;----------------------------------------------------------------------------
|
||||
; TIMER_A.ASM 386
|
||||
; (c) Adeline 1993
|
||||
;----------------------------------------------------------------------------
|
||||
.386p
|
||||
|
||||
.model SMALL, SYSCALL
|
||||
|
||||
.data
|
||||
|
||||
DIVISOR equ 23864 ; 1193180 (Base Freq) / 50
|
||||
FREQUENCE equ 50 ; 1193180 (Base Freq) / 23864
|
||||
|
||||
public NoLanguage TimerSystem
|
||||
public NoLanguage TimerRef
|
||||
public NoLanguage NbFramePerSecond
|
||||
public NoLanguage WaitNbTicks
|
||||
public NoLanguage CmptFrame
|
||||
public NoLanguage Cmpt_18
|
||||
|
||||
TimerRef dd 0000
|
||||
NbFramePerSecond dw 00
|
||||
WaitNbTicks dw 1
|
||||
CmptFrame dw 00
|
||||
Cmpt_18 dw 00
|
||||
TimerSystem dd 0000
|
||||
|
||||
.data
|
||||
|
||||
extrn NoLanguage Old_PM08_Sel:WORD
|
||||
extrn NoLanguage Old_PM08_Off:DWORD
|
||||
|
||||
.code
|
||||
|
||||
public NoLanguage SetTimer
|
||||
public NoLanguage NewIntPM08
|
||||
public NoLanguage NewProc08
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
SetTimer proc ,\
|
||||
counter:DWORD
|
||||
|
||||
cli
|
||||
|
||||
mov ecx, counter
|
||||
mov al, 36h
|
||||
out 43h, al
|
||||
mov al, cl
|
||||
out 40h, al
|
||||
mov al, ch
|
||||
out 40h, al
|
||||
|
||||
sti
|
||||
ret
|
||||
SetTimer endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
comment @
|
||||
|
||||
NewIntPM08 proc far
|
||||
|
||||
push eax
|
||||
push ds
|
||||
|
||||
mov ax, DGROUP
|
||||
mov ds, ax
|
||||
|
||||
inc dword ptr [TimerSystem]
|
||||
inc dword ptr [TimerRef]
|
||||
|
||||
dec word ptr [WaitNbTicks]
|
||||
jnz short noevaluate
|
||||
|
||||
mov word ptr [WaitNbTicks], FREQUENCE
|
||||
|
||||
mov ax, word ptr [CmptFrame]
|
||||
mov word ptr [NbFramePerSecond], ax
|
||||
|
||||
mov word ptr [CmptFrame], 0
|
||||
noevaluate:
|
||||
add word ptr [Cmpt_18], DIVISOR
|
||||
jc short oldint08
|
||||
|
||||
mov al, 20h
|
||||
out 20h, al
|
||||
|
||||
pop ds
|
||||
pop eax
|
||||
iretd
|
||||
oldint08:
|
||||
pop ds
|
||||
pop eax
|
||||
|
||||
int 0F2h ; old int08
|
||||
|
||||
iretd
|
||||
|
||||
NewIntPM08 endp
|
||||
|
||||
@
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
NewIntPM08 proc far
|
||||
|
||||
push eax
|
||||
push ecx
|
||||
push ds
|
||||
|
||||
mov ax, DGROUP
|
||||
mov ds, ax
|
||||
|
||||
inc dword ptr [TimerSystem]
|
||||
inc dword ptr [TimerRef]
|
||||
|
||||
dec word ptr [WaitNbTicks]
|
||||
jnz short noevaluate
|
||||
|
||||
mov word ptr [WaitNbTicks], FREQUENCE
|
||||
|
||||
mov ax, word ptr [CmptFrame]
|
||||
mov word ptr [NbFramePerSecond], ax
|
||||
|
||||
mov word ptr [CmptFrame], 0
|
||||
noevaluate:
|
||||
add word ptr [Cmpt_18], DIVISOR
|
||||
jc short oldint08
|
||||
|
||||
mov al, 20h
|
||||
out 20h, al
|
||||
|
||||
pop ds
|
||||
pop ecx
|
||||
pop eax
|
||||
iretd
|
||||
oldint08:
|
||||
xor eax, eax
|
||||
mov ecx, [Old_PM08_Off]
|
||||
mov ax, [Old_PM08_Sel]
|
||||
|
||||
xchg ecx, [esp+4]
|
||||
xchg eax, [esp+8]
|
||||
|
||||
pop ds
|
||||
retf
|
||||
|
||||
NewIntPM08 endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
|
||||
NewProc08 proc
|
||||
|
||||
push eax
|
||||
push ds
|
||||
|
||||
mov ax, DGROUP
|
||||
mov ds, ax
|
||||
|
||||
inc dword ptr [TimerRef]
|
||||
inc dword ptr [TimerSystem]
|
||||
|
||||
dec word ptr [WaitNbTicks]
|
||||
jnz short noevaluate
|
||||
|
||||
mov word ptr [WaitNbTicks], FREQUENCE
|
||||
mov ax, word ptr [CmptFrame]
|
||||
mov word ptr [NbFramePerSecond], ax
|
||||
mov word ptr [CmptFrame], 0
|
||||
noevaluate:
|
||||
|
||||
pop ds
|
||||
pop eax
|
||||
|
||||
ret
|
||||
|
||||
NewProc08 endp
|
||||
|
||||
;----------------------------------------------------------------------------
|
||||
; The
|
||||
End
|
||||
Reference in New Issue
Block a user