home *** CD-ROM | disk | FTP | other *** search
-
- section text
-
-
- XDEF _timerstart
- XDEF _timerstop
-
-
- include "devices/timer.i"
- include "lvo/timer_lib.i"
- include "lvo/exec_lib.i"
- include "exec/memory.i"
-
- ;====================================================================
- ;--------------------------------------------------------------------
- ;
- ; handle = timerstart()
- ; d0
- ; initialisiert und startet den Timer.
- ;
- ; millisec = timerstop(handle)
- ; d0 d0
- ;
- ; liest den Timer und liefert
- ; die Anzahl der Tausendstel Sekunden.
- ;
- ;--------------------------------------------------------------------
-
- STRUCTURE mytimer,0
- APTR timer_base
- STRUCT timer_request,IOTV_SIZE
- DOUBLE timer_val1
- DOUBLE timer_val2
- LABEL timer_SIZEOF
-
- ;--------------------------------------------------------------------
-
- _timerstart: movem.l d1-a6,-(a7)
-
- move.l 4.w,a6
- moveq #timer_SIZEOF,d0
- moveq #MEMF_ANY,d1
- jsr (_LVOAllocVec,a6)
- tst.l d0
- beq.b .exit
-
- move.l d0,a5
-
- clr.l (timer_base,a5)
-
- lea (timer_name,pc),a0
- lea (timer_request,a5),a1
- moveq #0,d0
- moveq #0,d1
- jsr (_LVOOpenDevice,a6)
- tst.b d0
- bne.b .fail
-
- move.l (timer_request+IO_DEVICE,a5),a6
- move.l a6,(timer_base,a5)
- lea (timer_val1,a5),a0
- jsr (_LVOReadEClock,a6)
-
- move.l a5,d0
- bra.b .exit
-
- .fail move.l a5,a1
- jsr (_LVOFreeVec,a6)
- moveq #0,d0
-
- .exit movem.l (a7)+,d1-a6
- rts
-
-
- ;--------------------------------------------------------------------
-
- _timerstop: movem.l d1-a6,-(a7)
-
- move.l d0,a5
-
- move.l (timer_base,a5),d0
- beq.b timer_error
- move.l d0,a6
-
- lea (timer_val2,a5),a0
- jsr (_LVOReadEClock,a6)
- move.l d0,d4 ; Timer-Frequenz [Hz]
-
- movem.l (timer_val1,a5),d2/d3
- movem.l (timer_val2,a5),d0/d1
- sub.l d3,d1
- subx.l d2,d0
-
- mulu.l #1000,d0:d1
- divu.l d4,d0:d1 ; tausendstel Sekunden
- move.l d1,d2
-
- lea (timer_request,a5),a1
- move.l 4.w,a6
- jsr (_LVOCloseDevice,a6)
-
- move.l a5,a1
- move.l 4.w,a6
- jsr (_LVOFreeVec,a6)
-
- move.l d2,d0
-
- timer_error movem.l (a7)+,d1-a6
- rts
-
- ;--------------------------------------------------------------------
-
- timer_name dc.b "timer.device",0
- even
-
- ;====================================================================
-
-