home *** CD-ROM | disk | FTP | other *** search
/ Dream 45 / Amiga_Dream_45.iso / Amiga / Workbench / Benchmark / SpeedTest.lha / SpeedTest.asm < prev   
Assembly Source File  |  1980-01-01  |  5KB  |  166 lines

  1.  
  2. ;**** SpeedTest ***********************************************************
  3. ;*
  4. ;* Assembled by Olly Koenders with the excellent Maxon Assembler.
  5. ;*
  6. ;* This proggy tests the speed of your Amiga and will run on all models and
  7. ;* all Kickstart versions.  a small change will need to be made for NTSC
  8. ;* Amiga's that run on American standard 60 Hz.
  9. ;*
  10. ;* Tallies a value every .5 seconds.  (x& = x& + 1 --> loop for .5 seconds)
  11. ;*
  12. ;* 14 Mhz 68000 A500 with fast ram tallies approx 117860 - see what
  13. ;* your 68060 does and tell somebody!!!
  14. ;*
  15. ;* Pentium 133 tallies approx 70000 in DOS (Windows slows the system by
  16. ;* about 20-30%).  Note that DOS don't multitask either...
  17. ;*
  18. ;* If you don't have an assembler - or know little of programming in this
  19. ;* fast language, then get a hex-editor (like Zap) or something suitable
  20. ;* and change the 83rd byte in the file that should show "19" in hex, and
  21. ;* change it to "1E" if you run an NTSC (200 scanlines high) screen.
  22. ;*
  23. ;* If you want to force the progam to run in chip memory exclusively then
  24. ;* change the 20th byte from a "00" in hex to a "40".
  25. ;*
  26. ;* Remember - I'm counting starting from 0 - NOT 1...
  27. ;*
  28. ;* Our output looks (something) like this on the Workbench:
  29. ;*
  30. ;*     ________
  31. ;*    |xxxxxxxx| "x" being the numbers in decimal
  32. ;*     --------
  33. ;**************************************************************************
  34.  
  35.     section go ,code ,public    ;public ram - will run in chip if
  36.                     ;no fast is available -
  37.                     ;but remember that it'll run at
  38.                     ;only about HALF the speed if you
  39.                     ;don't have any fast ram!
  40.  
  41.  
  42. WBENCHSCREEN equ 1
  43.  
  44. openlib=-408
  45. execbase=4
  46. openwindow=-204        ;some references here
  47. closewindow=-72        ;so we don't need a whole
  48. printitext=-216        ;pile of "includes"!!!
  49. disable=-120
  50. enable=-126
  51.  
  52. ;    . . .            ;no startup code for the workbench
  53. ;    . . .            ;so MUST be run from CLI
  54.  
  55.     move.l execbase,a6
  56.     lea intname(pc),a1
  57.     jsr openlib(a6)        ;open intuition.library for a window
  58.     move.l d0,intbase    ;store library base address
  59.     move.l d0,a6
  60.     lea windowdef(pc),a0    ;get window parameters our data area
  61.     jsr openwindow(a6)    ;do the icky
  62.     move.l d0,windowhd    ;save it for later
  63.  
  64. more:
  65.     move.l execbase,a6
  66.     jsr disable(a6)        ;disable the multitasking (only 6% faster)
  67.     move.b $bfe801,d6    ;get timer value and store
  68.     add.b #25,d6        ;add .5 secs (use 30 for NTSC!)
  69.     moveq #0,d0        ;clear our register for our tally value
  70.  
  71. timer:
  72.     addq.l #1,d0        ;add 1 to our tally every loop
  73.     move.b $bfe801,d5    ;get the timer value again
  74.     cmp.b d6,d5        ;check if our half sec is up
  75.     bmi.b timer        ;if not - then do this little loop again
  76.     bsr.b convert        ;if done, then convert our tally to text
  77.     jsr enable(a6)        ;might as well put the multitask back
  78.     move.l intbase(pc),a6    ;intuition library base in a6
  79.     move.l windowhd(pc),a0    ;our window pointer in a0 temporarily
  80.     move.l 50(a0),a0    ;rastport address in a0 (offset 50)
  81.     lea mainmsg(pc),a1    ;message address in a1
  82.     moveq #0,d0        ;just some offsets
  83.     moveq #0,d1        ;for the text
  84.     jsr printitext(a6)    ;print our value
  85.     btst #6,$bfe001        ;test for mouse click
  86.     bne.b more        ;if not - then continue
  87.     move.l windowhd(pc),a0    ;window pointer
  88.     jsr closewindow(a6)    ;close it
  89.     moveq #0,d0
  90.     rts            ;quit this proggy
  91.  
  92. convert:            ;our conversion routine from value to text
  93.     lea table(pc),a0
  94.     lea address(pc),a1    ;address of the text area in a1
  95.  
  96. pad:
  97.     move.l (a0)+,d1
  98.     move.b #"0",(a1)+    ;clear the area with "0" bytes ($30)
  99.     cmp.l d1,d0
  100.     bcs.B pad
  101.  
  102. nextdigit:
  103.     move.b #10,d2
  104.  
  105. getdigit:
  106.     subq.l #1,d2
  107.     sub.l d1,d0
  108.     bcc.B getdigit
  109.     add.l d1,d0
  110.     move.b #"9",d1
  111.     sub.b d2,d1
  112.     move.b d1,(a1)+
  113.     move.l (a0)+,d1
  114.     bne.B nextdigit
  115.     add.b #$30,d0
  116.     move.b d0,(a1)
  117.     rts
  118.  
  119. intname:
  120.     dc.b "intuition.library",0    ;our wonderful library
  121.     even
  122.  
  123. intbase:
  124.     dc.l 0            ;variable address for our library base
  125.  
  126. windowdef:            ;the window definitions
  127.     dc.w 276,120        ;x,y
  128.     dc.w 88,15        ;width,height
  129.     dc.b -1,-1        ;standard colours
  130.     dc.l 0            ;no care about IDCMP flags
  131.     dc.l 0            ;don't need any attributes or system gadgets
  132.     dc.l 0            ;no custom gadgets
  133.     dc.l 0            ;no checkmark or pulldown menus
  134.     dc.l 0            ;no window title
  135.     dc.l 0            ;no custom screen - we'll use the Workbench
  136.     dc.l 0            ;no custom bitmap for GFX either
  137.     dc.w 0,0,0,0        ;minimum width/height - don't care
  138.     dc.w WBENCHSCREEN    ;on the workbench
  139.  
  140. windowhd:
  141.     dc.l 0            ;variable address for our window pointer
  142.  
  143. mainmsg:            ;text structure
  144.     dc.b 1,0
  145.     dc.b 1,0
  146.     even
  147.     dc.w 8,4        ;x,y location
  148.     dc.l 0
  149.     dc.l address        ;the text data for this structure to use
  150.     dc.l 0
  151.  
  152. address:
  153.     dc.b "        ",0    ;conversion routine writes text to here
  154.     even
  155.  
  156. table:                ;the table for our tally value
  157.     dc.l 10000000
  158.     dc.l 1000000
  159.     dc.l 100000
  160.     dc.l 10000
  161.     dc.l 1000
  162.     dc.l 100
  163.     dc.l 10
  164.     dc.l 0
  165.     end
  166.