home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 300-399 / ff396.lha / turbotopaz / TopazTest.asm < prev    next >
Assembly Source File  |  1990-10-29  |  5KB  |  251 lines

  1. ;    TopazTest
  2. ;    by Preben Nielsen
  3. ;    Assemble it as case-sensitive.
  4. ;    OPT O+
  5. ;    OPT O1+        ;Tells when a branch could be optimised to short
  6. ;    OPT i+        ;Tells when '#' is probably missing
  7.  
  8. TIMES        =2500
  9.  
  10.     incdir    "INCLUDE:"
  11.     include "exec/execbase.i"
  12.     include "exec/exec_lib.i"
  13.     include "graphics/graphics_lib.i"
  14.     include "intuition/intuition.i"
  15.     include "intuition/intuition_lib.i"
  16.     include "libraries/dos_lib.i"
  17.     include "libraries/dosextens.i"
  18.  
  19. LoadBase    MACRO
  20.         IFNC        '\1','ExecBase'
  21.         movea.l        \1(PC),A6
  22.         ENDC
  23.         IFC        '\1','ExecBase'
  24.         movea.l        4.W,A6
  25.         ENDC
  26.         ENDM
  27. CallLib        MACRO
  28.         jsr        _LVO\1(A6)
  29.         ENDM
  30. Call        MACRO
  31.         bsr        \1
  32.         ENDM
  33. Push        MACRO
  34.         movem.l        \1,-(SP)
  35.         ENDM
  36. Pop        MACRO
  37.         movem.l        (SP)+,\1
  38.         ENDM
  39.  
  40.         LoadBase    ExecBase
  41.         suba.l        A1,A1
  42.         CallLib        FindTask        ;Find us
  43.         movea.l        D0,A2
  44.         tst.l        pr_CLI(A2)
  45.         bne.S        CLIAndWBStartup
  46. WBenchStartup    lea        pr_MsgPort(A2),A0
  47.         CallLib        WaitPort        ;Wait for a message
  48.         lea        pr_MsgPort(A2),A0
  49.         CallLib        GetMsg            ;Get the message
  50.         move.l        D0,WBenchMsg        ;Save it for later reply
  51. CLIAndWBStartup    lea        DosName(PC),A1
  52.         CallLib        OldOpenLibrary
  53.         move.l        D0,DosBase
  54.         lea        GfxName(PC),A1
  55.         CallLib        OldOpenLibrary
  56.         move.l        D0,GfxBase
  57.         lea        IntName(PC),A1
  58.         CallLib        OldOpenLibrary
  59.         move.l        D0,IntBase
  60.         LoadBase    IntBase
  61.         lea        NW(PC),A0
  62.         CallLib        OpenWindow
  63.         move.l        D0,PWindow
  64.         movea.l        D0,A0
  65.         move.l        wd_RPort(A0),Rp
  66.         LoadBase    GfxBase
  67.         lea        TopazAttr(PC),A0
  68.         CallLib        OpenFont
  69.         tst.l        D0
  70.         beq.S        Exit
  71.         movea.l        D0,A0
  72.         movea.l        Rp,A1
  73.         CallLib        SetFont            ;Make sure to use topaz in the right size
  74.         bra.S        Main
  75.  
  76. Exit        LoadBase    IntBase
  77. FreeWindow    move.l        PWindow(PC),D0
  78.         beq.S        FreeInt
  79.         movea.l        D0,A0
  80.         CallLib        CloseWindow        ;Close window if it is open
  81. FreeInt        LoadBase    ExecBase
  82.         move.l        IntBase(PC),D0
  83.         beq.S        FreeGfx
  84.         movea.l        D0,A1
  85.         CallLib        CloseLibrary        ;Close intuition if it is open
  86. FreeGfx        move.l        GfxBase(PC),D0
  87.         beq.S        FreeDos
  88.         movea.l        D0,A1
  89.         CallLib        CloseLibrary        ;Close graphics if it is open
  90. FreeDos        move.l        DosBase(PC),D0
  91.         beq.S        ReplyWB
  92.         movea.l        D0,A1
  93.         CallLib        CloseLibrary        ;Close dos if it is open
  94. ReplyWB        move.l        WBenchMsg(PC),D0
  95.         beq.S        AllDone
  96.         CallLib        Forbid
  97.         movea.l        D0,A1
  98.         CallLib        ReplyMsg        ;Reply WBenchMessage if we are started from WB
  99. AllDone        rts
  100.  
  101. Main        LoadBase    ExecBase
  102.         CallLib        Forbid
  103.         CallLib        Disable
  104.         LoadBase    GfxBase
  105.         moveq        #1,D0
  106.         move.l        Rp(PC),A1
  107.         CallLib        SetAPen
  108.         move.w        #250,D0
  109.         moveq        #30,D1
  110.         moveq        #11,D2
  111.         lea        WaitTxt(PC),A0
  112.         Call        Txt
  113.         Call        StartTimer
  114.         move.l        #TIMES,D5
  115.         moveq        #1,D6            ;Color
  116.         bra.S        ContLoop
  117. Loop        not.b        D6
  118.         move.w        D6,D0
  119.         move.l        Rp(PC),A1
  120.         CallLib        SetAPen
  121.         moveq        #8,D0
  122.         moveq        #19,D1
  123.         move.l        Rp(PC),A1
  124.         CallLib        Move
  125.         moveq        #71,D0
  126.         lea        TestTxt(PC),A0
  127.         movea.l        Rp(PC),A1
  128.         CallLib        Text
  129. ContLoop    dbf        D5,Loop
  130.         Call        EndTimer
  131.         lea        TimeTxt+13(PC),A0
  132.         Call        DecStr
  133.         move.l        #TIMES,D0
  134.         lea        TimeTxt+52(PC),A0
  135.         Call        DecStr
  136.         moveq        #1,D0
  137.         move.l        Rp(PC),A1
  138.         CallLib        SetAPen
  139.         moveq        #62,D0
  140.         moveq        #30,D1
  141.         moveq        #58,D2
  142.         lea        TimeTxt(PC),A0
  143.         Call        Txt
  144.         LoadBase    ExecBase
  145.         CallLib        Enable
  146.         CallLib        Permit
  147.  
  148. GetNextMsg    LoadBase    ExecBase
  149.         movea.l        PWindow(PC),A0
  150.         movea.l        wd_UserPort(A0),A0
  151.         CallLib        WaitPort
  152.         movea.l        PWindow(PC),A0
  153.         movea.l        wd_UserPort(A0),A0
  154.         CallLib        GetMsg
  155.         tst.l        D0
  156.         beq.S        GetNextMsg
  157.         movea.l        D0,A1            ;Message address to A1
  158.         move.l        im_Class(A1),D2        ;Save the event class in D2
  159.         CallLib        ReplyMsg        ;Reply the message
  160. CheckWinClose    cmpi.w        #CLOSEWINDOW,D2
  161.         beq        Exit            ;Terminate ?
  162.         bra.S        GetNextMsg
  163.  
  164. StartTimer    Push        D1-D7/A0-A6
  165.         lea        Stamp(PC),A0
  166.         Call        GetTime
  167.         Pop        D1-D7/A0-A6
  168.         rts
  169.  
  170. EndTimer    Push        D1-D7/A0-A6
  171.         lea        Stamp2(PC),A0
  172.         Call        GetTime
  173.         LoadBase    ExecBase
  174.         moveq        #0,D1
  175.         move.b        PowerSupplyFrequency(A6),D1
  176.         move.l        Minutes2(PC),D0
  177.         sub.l        Minutes(PC),D0
  178.         mulu        #60,D1
  179.         mulu        D1,D0
  180.         add.l        Ticks2(PC),D0
  181.         sub.l        Ticks(PC),D0
  182.         Pop        D1-D7/A0-A6
  183.         rts
  184.  
  185. GetTime        LoadBase    DosBase
  186.         move.l        A0,D1
  187.         CallLib        DateStamp        ;Get current time
  188.         rts
  189.  
  190. DecStr        move.b        #'0',-1(A0)        ;This has to be done If D0=0 
  191. ConvertLoop    tst.l        D0            ;A0=end of Txtbuffer
  192.         beq.S        EndDecStr
  193.         divu        #10,D0
  194.         swap        D0
  195.         addi.b        #'0',D0
  196.         move.b        D0,-(A0)
  197.         clr.w        D0
  198.         swap        D0
  199.         bra.S        ConvertLoop
  200. EndDecStr    rts
  201.  
  202. Txt        LoadBase    GfxBase
  203.         movea.l        Rp(PC),A1
  204.         CallLib        Move
  205.         move.w        D2,D0
  206.         movea.l        Rp(PC),A1
  207.         CallLib        Text
  208.         rts
  209.  
  210. WaitTxt        dc.b    'Please Wait'
  211. TestTxt        dc.b    'This is a test to see how fast the Text-routine can write with Topaz-80'
  212. TimeTxt        dc.b    'It took       system ticks to write the string       times'
  213.         EVEN
  214.  
  215. TopazAttr    dc.l    TopazName
  216.         dc.w    8
  217.         dc.b    0,0
  218.  
  219. WBenchMsg    dc.l    0
  220. DosBase        dc.l    0
  221. GfxBase        dc.l    0
  222. IntBase        dc.l    0
  223. PWindow        dc.l    0
  224. Rp        dc.l    0
  225.  
  226. Stamp                ;\
  227. Days        dc.l    0    ; \struct DateStamp Stamp;
  228. Minutes        dc.l    0    ; /
  229. Ticks        dc.l    0    ;/
  230.  
  231. Stamp2                ;\
  232. Days2        dc.l    0    ; \struct DateStamp Stamp;
  233. Minutes2    dc.l    0    ; /
  234. Ticks2        dc.l    0    ;/
  235.  
  236.  
  237.  
  238. NW        dc.w    25,40,588,35
  239.         dc.b    0,1
  240.         dc.l    CLOSEWINDOW
  241.         dc.l    WINDOWDEPTH+WINDOWDRAG+WINDOWCLOSE+ACTIVATE,0,0,NWName,0,0
  242.         dc.w    150,50,320,200,WBENCHSCREEN
  243.  
  244. TopazName    dc.b    'topaz.font',0
  245. DosName        dc.b    'dos.library',0
  246. GfxName        dc.b    'graphics.library',0
  247. IntName        dc.b    'intuition.library',0
  248. NWName        dc.b    ' Measuring Topaz-80 Speed ',0
  249.         END
  250.  
  251.