104 lines
1.7 KiB
Text
104 lines
1.7 KiB
Text
INCLUDE "D2:REAL.ACT" ;from the Action! Tool Kit
|
|
|
|
DEFINE PTR="CARD"
|
|
|
|
CARD FUNC GetFrame()
|
|
BYTE RTCLOK1=$13,RTCLOK2=$14
|
|
CARD res
|
|
BYTE lsb=res,msb=res+1
|
|
|
|
lsb=RTCLOK2
|
|
msb=RTCLOK1
|
|
RETURN (res)
|
|
|
|
CARD FUNC FramesToMs(CARD frames)
|
|
BYTE PALNTSC=$D014
|
|
CARD res
|
|
|
|
IF PALNTSC=15 THEN
|
|
res=frames*60
|
|
ELSE
|
|
res=frames*50
|
|
FI
|
|
RETURN (res)
|
|
|
|
CARD FUNC ItersPerSecond(CARD timeMs,iters)
|
|
REAL rTime,rIters,r1000,tmp
|
|
CARD res
|
|
|
|
IntToReal(timeMs,tmp)
|
|
IntToReal(iters,rIters)
|
|
IntToReal(1000,r1000)
|
|
RealDiv(tmp,r1000,rTime)
|
|
RealDiv(rIters,rTime,tmp)
|
|
res=RealToInt(tmp)
|
|
RETURN (res)
|
|
|
|
;jump addr is stored in X and A registers
|
|
PROC Action=*(PTR jumpAddr)
|
|
DEFINE STX="$8E"
|
|
DEFINE STA="$8D"
|
|
DEFINE JSR="$20"
|
|
DEFINE RTS="$60"
|
|
[STX Action+8
|
|
STA Action+7
|
|
JSR $00 $00
|
|
RTS]
|
|
|
|
PROC Benchmark(PTR ARRAY actions,times BYTE count CARD iters)
|
|
BYTE i
|
|
CARD j,beg,end,diff,diffMs
|
|
PTR act
|
|
|
|
FOR i=0 TO count-1
|
|
DO
|
|
act=actions(i)
|
|
beg=GetFrame()
|
|
FOR j=0 TO iters-1
|
|
DO
|
|
Action(act)
|
|
OD
|
|
end=GetFrame()
|
|
diff=end-beg
|
|
times(i)=FramesToMs(diff)
|
|
OD
|
|
RETURN
|
|
|
|
PROC Action1()
|
|
RETURN
|
|
|
|
PROC Action2()
|
|
INT a=[12345],b=[23456],c
|
|
|
|
c=a+b
|
|
RETURN
|
|
|
|
PROC Action3()
|
|
INT i=[12345]
|
|
CHAR ARRAY s(6)
|
|
|
|
StrI(i,s)
|
|
RETURN
|
|
|
|
PROC Main()
|
|
DEFINE COUNT="3"
|
|
DEFINE ITERS="10000"
|
|
PTR ARRAY actions(COUNT)
|
|
CARD ARRAY times(COUNT),prec,rate
|
|
BYTE i
|
|
|
|
Put(125) PutE() ;clear the screen
|
|
prec=FramesToMs(1)
|
|
PrintF("Iteration count: %U%E",ITERS)
|
|
PrintF("Clock precision: %U ms%E%E",prec)
|
|
actions(0)=Action1
|
|
actions(1)=Action2
|
|
actions(2)=Action3
|
|
Benchmark(actions,times,COUNT,ITERS)
|
|
|
|
FOR i=0 TO COUNT-1
|
|
DO
|
|
rate=ItersPerSecond(times(i),iters)
|
|
PrintF("Action%B: %U ms, %U times per sec%E",i+1,times(i),rate)
|
|
OD
|
|
RETURN
|