; TopazTest ; by Preben Nielsen ; Assemble it as case-sensitive. ; OPT O+ ; OPT O1+ ;Tells when a branch could be optimised to short ; OPT i+ ;Tells when '#' is probably missing TIMES =2500 incdir "INCLUDE:" include "exec/execbase.i" include "exec/exec_lib.i" include "graphics/graphics_lib.i" include "intuition/intuition.i" include "intuition/intuition_lib.i" include "libraries/dos_lib.i" include "libraries/dosextens.i" LoadBase MACRO IFNC '\1','ExecBase' movea.l \1(PC),A6 ENDC IFC '\1','ExecBase' movea.l 4.W,A6 ENDC ENDM CallLib MACRO jsr _LVO\1(A6) ENDM Call MACRO bsr \1 ENDM Push MACRO movem.l \1,-(SP) ENDM Pop MACRO movem.l (SP)+,\1 ENDM LoadBase ExecBase suba.l A1,A1 CallLib FindTask ;Find us movea.l D0,A2 tst.l pr_CLI(A2) bne.S CLIAndWBStartup WBenchStartup lea pr_MsgPort(A2),A0 CallLib WaitPort ;Wait for a message lea pr_MsgPort(A2),A0 CallLib GetMsg ;Get the message move.l D0,WBenchMsg ;Save it for later reply CLIAndWBStartup lea DosName(PC),A1 CallLib OldOpenLibrary move.l D0,DosBase lea GfxName(PC),A1 CallLib OldOpenLibrary move.l D0,GfxBase lea IntName(PC),A1 CallLib OldOpenLibrary move.l D0,IntBase LoadBase IntBase lea NW(PC),A0 CallLib OpenWindow move.l D0,PWindow movea.l D0,A0 move.l wd_RPort(A0),Rp LoadBase GfxBase lea TopazAttr(PC),A0 CallLib OpenFont tst.l D0 beq.S Exit movea.l D0,A0 movea.l Rp,A1 CallLib SetFont ;Make sure to use topaz in the right size bra.S Main Exit LoadBase IntBase FreeWindow move.l PWindow(PC),D0 beq.S FreeInt movea.l D0,A0 CallLib CloseWindow ;Close window if it is open FreeInt LoadBase ExecBase move.l IntBase(PC),D0 beq.S FreeGfx movea.l D0,A1 CallLib CloseLibrary ;Close intuition if it is open FreeGfx move.l GfxBase(PC),D0 beq.S FreeDos movea.l D0,A1 CallLib CloseLibrary ;Close graphics if it is open FreeDos move.l DosBase(PC),D0 beq.S ReplyWB movea.l D0,A1 CallLib CloseLibrary ;Close dos if it is open ReplyWB move.l WBenchMsg(PC),D0 beq.S AllDone CallLib Forbid movea.l D0,A1 CallLib ReplyMsg ;Reply WBenchMessage if we are started from WB AllDone rts Main LoadBase ExecBase CallLib Forbid CallLib Disable LoadBase GfxBase moveq #1,D0 move.l Rp(PC),A1 CallLib SetAPen move.w #250,D0 moveq #30,D1 moveq #11,D2 lea WaitTxt(PC),A0 Call Txt Call StartTimer move.l #TIMES,D5 moveq #1,D6 ;Color bra.S ContLoop Loop not.b D6 move.w D6,D0 move.l Rp(PC),A1 CallLib SetAPen moveq #8,D0 moveq #19,D1 move.l Rp(PC),A1 CallLib Move moveq #71,D0 lea TestTxt(PC),A0 movea.l Rp(PC),A1 CallLib Text ContLoop dbf D5,Loop Call EndTimer lea TimeTxt+13(PC),A0 Call DecStr move.l #TIMES,D0 lea TimeTxt+52(PC),A0 Call DecStr moveq #1,D0 move.l Rp(PC),A1 CallLib SetAPen moveq #62,D0 moveq #30,D1 moveq #58,D2 lea TimeTxt(PC),A0 Call Txt LoadBase ExecBase CallLib Enable CallLib Permit GetNextMsg LoadBase ExecBase movea.l PWindow(PC),A0 movea.l wd_UserPort(A0),A0 CallLib WaitPort movea.l PWindow(PC),A0 movea.l wd_UserPort(A0),A0 CallLib GetMsg tst.l D0 beq.S GetNextMsg movea.l D0,A1 ;Message address to A1 move.l im_Class(A1),D2 ;Save the event class in D2 CallLib ReplyMsg ;Reply the message CheckWinClose cmpi.w #CLOSEWINDOW,D2 beq Exit ;Terminate ? bra.S GetNextMsg StartTimer Push D1-D7/A0-A6 lea Stamp(PC),A0 Call GetTime Pop D1-D7/A0-A6 rts EndTimer Push D1-D7/A0-A6 lea Stamp2(PC),A0 Call GetTime LoadBase ExecBase moveq #0,D1 move.b PowerSupplyFrequency(A6),D1 move.l Minutes2(PC),D0 sub.l Minutes(PC),D0 mulu #60,D1 mulu D1,D0 add.l Ticks2(PC),D0 sub.l Ticks(PC),D0 Pop D1-D7/A0-A6 rts GetTime LoadBase DosBase move.l A0,D1 CallLib DateStamp ;Get current time rts DecStr move.b #'0',-1(A0) ;This has to be done If D0=0 ConvertLoop tst.l D0 ;A0=end of Txtbuffer beq.S EndDecStr divu #10,D0 swap D0 addi.b #'0',D0 move.b D0,-(A0) clr.w D0 swap D0 bra.S ConvertLoop EndDecStr rts Txt LoadBase GfxBase movea.l Rp(PC),A1 CallLib Move move.w D2,D0 movea.l Rp(PC),A1 CallLib Text rts WaitTxt dc.b 'Please Wait' TestTxt dc.b 'This is a test to see how fast the Text-routine can write with Topaz-80' TimeTxt dc.b 'It took system ticks to write the string times' EVEN TopazAttr dc.l TopazName dc.w 8 dc.b 0,0 WBenchMsg dc.l 0 DosBase dc.l 0 GfxBase dc.l 0 IntBase dc.l 0 PWindow dc.l 0 Rp dc.l 0 Stamp ;\ Days dc.l 0 ; \struct DateStamp Stamp; Minutes dc.l 0 ; / Ticks dc.l 0 ;/ Stamp2 ;\ Days2 dc.l 0 ; \struct DateStamp Stamp; Minutes2 dc.l 0 ; / Ticks2 dc.l 0 ;/ NW dc.w 25,40,588,35 dc.b 0,1 dc.l CLOSEWINDOW dc.l WINDOWDEPTH+WINDOWDRAG+WINDOWCLOSE+ACTIVATE,0,0,NWName,0,0 dc.w 150,50,320,200,WBENCHSCREEN TopazName dc.b 'topaz.font',0 DosName dc.b 'dos.library',0 GfxName dc.b 'graphics.library',0 IntName dc.b 'intuition.library',0 NWName dc.b ' Measuring Topaz-80 Speed ',0 END