unit Timer; INTERFACE uses Exec; type pEClockVal = ^tEClockVal; tEClockVal = record ev_hi: long; ev_lo: long; end; ptimeval = ^ttimeval; ttimeval = record tv_secs: long; tv_micro: long; end; ptimerequest = ^ttimerequest; ttimerequest = record tr_node: tIORequest; tr_time: ttimeval; end; var TimerBase: pLibrary; const TR_ADDREQUEST = 9; UNIT_WAITUNTIL = 3; TR_GETSYSTIME = $A; UNIT_ECLOCK = 2; TR_SETSYSTIME = $B; UNIT_MICROHZ = 0; UNIT_WAITECLOCK = 4; DEVICES_TIMER_H = 1; UNIT_VBLANK = 1; TIMERNAME = 'timer.device'; procedure AddTime (dest: ptimeval; src: ptimeval); procedure SubTime (dest: ptimeval; src: ptimeval); function CmpTime (dest: ptimeval; src: ptimeval): longint; function ReadEClock (dest: pEClockVal): long; procedure GetSysTime (dest: ptimeval); IMPLEMENTATION procedure AddTime; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l TimerBase,a6 jsr -$2A(a6) move.l (sp)+,a6 end; procedure SubTime; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l TimerBase,a6 jsr -$30(a6) move.l (sp)+,a6 end; function CmpTime; xassembler; asm move.l a6,-(sp) lea 8(sp),a6 move.l (a6)+,a1 move.l (a6)+,a0 move.l TimerBase,a6 jsr -$36(a6) move.l d0,$10(sp) move.l (sp)+,a6 end; function ReadEClock; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l TimerBase,a6 jsr -$3C(a6) move.l d0,$C(sp) move.l (sp)+,a6 end; procedure GetSysTime; xassembler; asm move.l a6,-(sp) move.l 8(sp),a0 move.l TimerBase,a6 jsr -$42(a6) move.l (sp)+,a6 end; end.