home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 384.lha / RAMSpeed / RAMSpeed.asm < prev    next >
Assembly Source File  |  1990-06-04  |  36KB  |  1,396 lines

  1. ***********************************
  2. * Assembly Program: RAMSpeed.asm  *
  3. *            Al Aburto            *
  4. *     Original: 10 Oct 1988       *
  5. *     Revised : 09 Feb 1990       *
  6. *     Revised : 17 Feb 1990       *
  7. *     Revised : 08 May 1990       *
  8. *     Revised : 03 Jun 1990       *
  9. *   Must Link with TWStartup.o    *
  10. ***********************************
  11.  
  12.       INCLUDE  "exec/types.i"
  13.       INCLUDE  "exec/execbase.i"
  14.       INCLUDE  "exec/nodes.i"
  15.       INCLUDE  "exec/memory.i"
  16.       INCLUDE  "libraries/dos.i"
  17.       INCLUDE  "libraries/dosextens.i"
  18.  
  19.       XREF  _LVOAllocAbs
  20.       XREF  _LVOFreeMem
  21.       XREF  _LVORawDoFmt
  22.       XREF  _LVOOpenLibrary
  23.       XREF  _LVOCloseLibrary
  24.       XREF  _LVOForbid
  25.       XREF  _LVOPermit
  26.       XREF  _LVODisable
  27.       XREF  _LVOEnable
  28.       XREF  _LVOSupervisor
  29.  
  30.       XREF  _LVODelay
  31.       XREF  _LVOOpen
  32.       XREF  _LVOClose
  33.       XREF  _LVODateStamp
  34.       XREF  _LVOWrite
  35.  
  36.       XREF  _DOSBase
  37.       XREF  _SysBase
  38.       XREF  _stdin
  39.       XREF  _stdout
  40.       XREF  _stderr
  41.  
  42.       XREF  _LVOIEEEDPDiv
  43.       XREF  _LVOIEEEDPMul
  44.       XREF  _LVOIEEEDPSub
  45.       XREF  _LVOIEEEDPAdd
  46.       XREF  _LVOIEEEDPNeg
  47.       XREF  _LVOIEEEDPAbs
  48.       XREF  _LVOIEEEDPTst
  49.       XREF  _LVOIEEEDPCmp
  50.       XREF  _LVOIEEEDPFlt
  51.       XREF  _LVOIEEEDPFix
  52.  
  53.       XDEF  _main
  54.       XDEF  _TWspec
  55.       XDEF  _MathIeeeDoubBasBase
  56.  
  57. *************************************************************************
  58.  
  59. _main:
  60.       MOVE.L   A7,SaveA7
  61.  
  62.       MOVE.L   A4,MyTaskPointer
  63.       MOVE.L   #MyTaskName,LN_NAME(A4)
  64.  
  65.       MOVEA.L  _SysBase,A6
  66.       LEA.L    MathLiba,A1
  67.       MOVEQ.L  #$21,D0
  68.       JSR      _LVOOpenLibrary(A6)
  69.       MOVE.L   D0,_MathIeeeDoubBasBase
  70.       BNE      M101
  71.  
  72.       PEA.L    NoMath               ;Could not find mathieeedoubbas.library
  73.       JSR      _printf
  74.       LEA.L    $04(A7),A7
  75.       BRA      Quit
  76.  
  77. M101:
  78.       BSR      CPUFPU_Type          ;CPU and FPU Type.
  79.       BSR      PrtCPUFPU            ;Set CPU / FPU Print String.
  80.  
  81.       BSR      Read_CACR            ;Read CACR (Result in D0 and SaveCACR).
  82.  
  83.       MOVE.L   _stdout,crtFile
  84.  
  85.       PEA.L    Title01              ;Print RAMSpeed Title.
  86.       JSR      _printf
  87.       LEA.L    $04(A7),A7
  88.  
  89.       PEA.L    PrtFmt04
  90.       PEA.L    Title02
  91.       JSR      _printf
  92.       LEA.L    $08(A7),A7
  93.  
  94.       JSR      CPUSpeed                ;Print CPU Speed.
  95.       JSR      FPUSpeed                ;Print FPU Speed.
  96.  
  97.       BSR      PrtCache                ;Print Cache Status.
  98.  
  99.       PEA.L    Title03
  100.       JSR      _printf
  101.       LEA.L    $04(A7),A7
  102.  
  103.       PEA.L    PrtFmt01                ;Memory Region Headers.
  104.       JSR      _printf
  105.       LEA.L    $04(A7),A7
  106.  
  107.       PEA.L    PrtFmt02
  108.       JSR      _printf
  109.       LEA.L    $04(A7),A7
  110.  
  111.       BSR      MTForbid
  112.       MOVEA.L  _SysBase,A6             ;Search Memory Region List.
  113.       MOVEA.L  MemList(A6),A0          ;First Region.
  114.       BSR      MTPermit
  115.  
  116. LOOP:
  117.       BSR      MTForbid
  118.       MOVE.L   A0,SaveA0               ;Save Memory Region Pointer.
  119.       MOVE.L   MH_UPPER(A0),RAMUpper   ;Upper Limit.
  120.       MOVE.L   MH_LOWER(A0),RAMLower   ;Lower Limit.
  121.       MOVE.L   LN_NAME(A0),RAMName     ;Region Name.
  122.       MOVEA.L  MH_FIRST(A0),A1         ;First Free Chunk.
  123.  
  124. L101:
  125.       CMPI.L   #$00002400,$04(A1)      ;Need Chunk >= $2400 Bytes in Size.
  126.       BGE.S    L102                    ;Got it.
  127.  
  128.       TST.L    (A1)                    ;Last Chunk?
  129.       BEQ.S    L102                    ;Yes
  130.  
  131.       MOVEA.L  (A1),A1                 ;Keep Searching
  132.       BRA.S    L101
  133.  
  134. L102:
  135.       MOVE.L   $04(A1),D0              ;Chunk Size.
  136.  
  137.       BSR      MTPermit
  138.  
  139.       MOVE.L   D0,SaveD0               ;Save Chunk Size.
  140.       MOVE.L   A1,SaveA1               ;Save Chunk Start Address.
  141.  
  142.       MOVE.L   A1,D0
  143.       ANDI.L   #$FFFFFFF0,D0
  144.       MOVE.L   D0,A1
  145.       ADDA.L   #$00000010,A1
  146.       MOVE.L   A1,SaveA1            ;Start Address of Memory To Request.
  147.       MOVE.L   #$00002200,D0        ;Byte Size Of Memory To Request (8704).
  148.       MOVE.L   D0,RAMSize
  149.       MOVEA.L  _SysBase,A6
  150.       JSR      _LVOAllocAbs(A6)
  151.  
  152.       TST.L    D0
  153.       BEQ      L106                 ;Exit On _LVOAllocAbs Error
  154.  
  155.       MOVE.L   SaveA1,RAMLoad       ;Load Address for Test Program.
  156.  
  157.       MOVEA.L  SaveA1,A0
  158.       BSR      CopyToRAM            ;Move Test Program To RAM.
  159.  
  160.       BSR      Get_Time             ;Calculate NullTime.
  161.       BSR      MTForbid
  162.       BSR      MTPermit
  163.       BSR      Get_Time
  164.  
  165.       BSR      Elapsed_Time
  166.       LEA.L    DPTime,A0
  167.       LEA.L    NullTime,A1
  168.       MOVE.L   $00(A0),$00(A1)      ;NullTime
  169.       MOVE.L   $04(A0),$04(A1)
  170.  
  171.                                     ;Calculate Test Program RunTime.
  172.       BSR      Get_Time             ;Start Timer.
  173.       BSR      MTForbid
  174.       MOVEA.L  SaveA1,A1
  175.       JSR      (A1)                 ;Go execute the Test Program.
  176.       BSR      MTPermit
  177.       BSR      Get_Time             ;Stop  Timer.
  178.       BSR      Elapsed_Time
  179.       LEA.L    DPTime,A0
  180.       LEA.L    RunTime,A2
  181.       MOVE.L   $00(A0),$00(A2)      ;RunTime
  182.       MOVE.L   $04(A0),$04(A2)
  183.  
  184.       MOVE.L   $00(A2),D0           ;RunTime
  185.       MOVE.L   $04(A2),D1
  186.  
  187.       LEA.L    NullTime,A1
  188.       MOVE.L   $00(A1),D2           ;NullTime
  189.       MOVE.L   $04(A1),D3
  190.  
  191.                                     ;Subtract NullTime.
  192.       MOVEA.L  _MathIeeeDoubBasBase,A6
  193.       JSR      _LVOIEEEDPSub(A6)    ;(RunTime-NullTime)
  194.       LEA.L    RunTime,A1
  195.       MOVE.L   D0,$00(A1)
  196.       MOVE.L   D1,$04(A1)
  197.  
  198. L105:
  199.       MOVE.L   CCycles,D0
  200.       MOVEA.L  _MathIeeeDoubBasBase,A6
  201.       JSR      _LVOIEEEDPFlt(A6)
  202.       MOVE.L   $00(A2),D2           ;RunTime
  203.       MOVE.L   $04(A2),D3
  204.       JSR      _LVOIEEEDPDiv(A6)    ;CCycles / RunTime
  205.       MOVE.L   D0,D2
  206.       MOVE.L   D1,D3
  207.       MOVE.L   #$000F4240,D0        ;1,000,000 (To Scale To MHz)
  208.       JSR      _LVOIEEEDPFlt(A6)
  209.       EXG.L    D0,D2
  210.       EXG.L    D1,D3
  211.       JSR      _LVOIEEEDPDiv(A6)
  212.       LEA.L    DPNumber,A2
  213.       MOVE.L   D0,$00(A2)
  214.       MOVE.L   D1,$04(A2)
  215.  
  216.       LEA.L    DPNumber,A0
  217.       LEA.L    DPStrb,A1
  218.       MOVE.L   #$00000001,DPFlag
  219.       MOVE.L   #$00000003,DPMaxWidth
  220.       BSR      DPftoa
  221.  
  222.       LEA.L    RunTime,A0           ;DPNumber Pointer for DPftoa.
  223.       LEA.L    DPStra,A1            ;DPString Pointer for DPftoa.
  224.       BSR      DPftoa
  225.  
  226.       PEA.L    DPStrb               ;DPString Holds RAM ClockSpeed.
  227.       PEA.L    DPStra               ;DPString Holds Runtime.
  228.       MOVE.L   RAMLoad,-(A7)
  229.       MOVE.L   RAMUpper,-(A7)
  230.       MOVE.L   RAMLower,-(A7)
  231.       MOVE.L   RAMName,-(A7)
  232.       PEA.L    PrtFmt03
  233.       JSR      _printf
  234.       LEA.L    $1C(A7),A7
  235.  
  236.       MOVE.L   RAMSize,D0
  237.       MOVE.L   RAMLoad,A1
  238.       MOVEA.L  _SysBase,A6
  239.       JSR      _LVOFreeMem(A6)
  240.       BRA      L107
  241.  
  242. L106:
  243.       PEA.L    PrtFmt07
  244.       MOVE.L   SaveA1,-(A7)
  245.       MOVE.L   RAMUpper,-(A7)
  246.       MOVE.L   RAMLower,-(A7)
  247.       MOVE.L   RAMName,-(A7)
  248.       PEA.L    PrtFmt08
  249.       JSR      _printf
  250.       LEA.L    $18(A7),A7
  251.  
  252. L107:
  253.       MOVEA.L  SaveA0,A0
  254.       MOVEA.L  (A0),A0
  255.       TST.L    (A0)
  256.       BNE      LOOP
  257.  
  258. L108:
  259.  
  260.       PEA.L    LF
  261.       JSR      _printf
  262.       LEA.L    $04(A7),A7
  263.  
  264.       PEA.L    LF
  265.       JSR      _printf
  266.       LEA.L    $04(A7),A7
  267.  
  268.       MOVEA.L  _MathIeeeDoubBasBase,A1
  269.       MOVEA.L  _SysBase,A6
  270.       JSR      _LVOCloseLibrary(A6)
  271.  
  272. Wait_A_Bit:
  273.       MOVE.L   #$0008,Sec_Delay     ;Delay For 8 Seconds.
  274.       BSR      Hold_It
  275.  
  276. Quit:
  277.       MOVEQ.L  #$00,D0
  278.       MOVEA.L  SaveA7,A7
  279.       RTS
  280.  
  281. *<<<<<<<<<<<<<<<<<<<<<<<< Subroutines >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*
  282.  
  283. ************************* Copy Program to RAM ***************************
  284. CopyToRAM:
  285.       MOVE.L   #$203C0000,(A0)+     ;This is our NOP Test Program
  286.       MOVE.L   #$13874E71,(A0)+
  287.       MOVE.L   #$4E714E71,(A0)+
  288.  
  289.       MOVE.L   #$4E714E71,D1
  290.       MOVE.L   #$00000800,D0
  291.  
  292. CPR01:
  293.       MOVE.L   D1,(A0)+
  294.       SUBQ.L   #$01,D0
  295.       BNE.S    CPR01
  296.  
  297.       MOVE.L   #$53804E71,(A0)+
  298.       MOVE.L   #$6600DFFE,(A0)+
  299.       MOVE.L   #$4E750000,(A0)+
  300.  
  301.       RTS
  302.  
  303. ************************* Read Caches ***********************************
  304. Read_CACR:
  305.       MOVEM.L  A5/A6,-(A7)
  306.       MOVE.L   CPU_Type,D1
  307.       CMPI.B   #$03,D1
  308.       BLT      RC01
  309.  
  310.       MOVEA.L  _SysBase,A6
  311.       JSR      _LVODisable(A6)
  312.  
  313.       LEA.L    RCode,A5
  314.  
  315.       JSR      _LVOSupervisor(A6)
  316.       MOVE.L   D0,SaveCACR
  317.  
  318.       JSR      _LVOEnable(A6)
  319. RC01:
  320.       MOVEM.L  (A7)+,A5/A6
  321.       RTS
  322.  
  323.       CNOP  0,4
  324.       DC.L  $00000000
  325.  
  326. RCode:
  327.       DC.L  $4E7A0002               ;MOVEC.L CACR,D0
  328.       DC.W  $4E73                   ;RTE
  329.       DC.W  $0000
  330.  
  331. ************************* Print Cache Status ****************************
  332. PrtCache:
  333.       MOVEM.L  D2/A0-A4,-(A7)
  334.       MOVE.L   SaveCACR,D2
  335.       LEA.L    ITS_OFF,A3
  336.       LEA.L    ITS_ON,A4
  337.  
  338.       MOVE.L   CPU_Type,D0
  339.       CMPI.B   #$01,D0
  340.       BLE      PC050
  341.  
  342.       CMPI.B   #$07,D0
  343.       BNE      PC010
  344.  
  345.       MOVEQ.L  #$00,D1
  346.       LEA.L    ICacheC,A2
  347.       BSR      PC060
  348.  
  349.       MOVEQ.L  #$04,D1
  350.       LEA.L    ICacheB,A2
  351.       BSR      PC060
  352.  
  353.       MOVEQ.L  #$08,D1
  354.       LEA.L    DCacheC,A2
  355.       BSR      PC060
  356.  
  357.       MOVEQ.L  #$0C,D1
  358.       LEA.L    DCacheB,A2
  359.       BSR      PC060
  360.       BRA.S    PC050
  361. PC010:
  362.       CMPI.B   #$03,D0
  363.       BNE.S    PC050
  364.  
  365.       MOVEQ.L  #$00,D1
  366.       LEA.L    ICacheA,A2
  367.       BSR      PC060
  368.  
  369. PC050:
  370.       MOVEM.L  (A7)+,D2/A0-A4
  371.       RTS
  372.  
  373. PC060:
  374.       MOVEA.L  A3,A1
  375.       BTST.L   D1,D2
  376.       BEQ.S    PC062
  377.       MOVEA.L  A4,A1
  378. PC062:
  379.       MOVE.L   A1,-(A7)
  380.       MOVE.L   A2,-(A7)
  381.       JSR      _printf
  382.       ADDQ.L   #$08,A7
  383.       RTS
  384.  
  385. ************************* CPU Speed *************************************
  386. CPUSpeed:
  387.  
  388.       BSR      Get_Time
  389.       BSR      MTForbid
  390.       BSR      TestCPU
  391.       BSR      MTPermit
  392.       BSR      Get_Time
  393.  
  394.       BSR      Elapsed_Time
  395.  
  396.       LEA.L    DPTime,A0
  397.       MOVE.L   $00(A0),D2
  398.       MOVE.L   $04(A0),D3
  399.       LEA.L    TestCPUCC,A1
  400.       MOVE.L   $00(A1),D0
  401.       MOVE.L   $04(A1),D1
  402.       MOVEA.L  _MathIeeeDoubBasBase,A6
  403.       JSR      _LVOIEEEDPDiv(A6)
  404.       LEA.L    RunTime,A2
  405.       MOVE.L   D0,$00(A2)
  406.       MOVE.L   D1,$04(A2)
  407.  
  408.       MOVE.L   #$00000001,DPFlag
  409.       MOVE.L   #$00000003,DPMaxWidth
  410.  
  411.       LEA.L    RunTime,A0
  412.       LEA.L    DPStra,A1
  413.       BSR      DPftoa
  414.  
  415.       PEA.L    DPStra
  416.       PEA.L    PrtFmt06
  417.       JSR      _printf
  418.       ADDQ.L   #$08,A7
  419.  
  420.       RTS
  421.  
  422. ************************** TestCPU **************************************
  423. TestCPU:
  424.       MOVE.W   #$C34F,D4            ;Number of Loops - 1
  425.       MOVE.L   #$0000FFFF,D2
  426.       MOVE.L   D2,D3
  427.       BRA      C001
  428.  
  429.       CNOP  0,4
  430.       DC.L  $00000000
  431.  
  432. C001:
  433.       MOVE.L   D2,D0
  434.       MOVE.L   D3,D1
  435.       DIVS     D0,D1
  436.  
  437.       MOVE.L   D2,D0
  438.       MOVE.L   D3,D1
  439.       DIVS     D0,D1
  440.  
  441.       MOVE.L   D2,D0
  442.       MOVE.L   D3,D1
  443.       DIVS     D0,D1
  444.  
  445.       MOVE.L   D2,D0
  446.       MOVE.L   D3,D1
  447.       DIVS     D0,D1
  448.  
  449.       MOVE.L   D2,D0
  450.       MOVE.L   D3,D1
  451.       DIVS     D0,D1
  452.  
  453.       DBRA     D4,C001
  454.       RTS
  455.  
  456. ************************* FPU Speed *************************************
  457. FPUSpeed:
  458.       MOVE.L   FPU_Type,D1
  459.       TST.L    D1
  460.       BEQ      FPU01
  461.  
  462.       BSR      Get_Time
  463.       BSR      MTForbid
  464.       BSR      TestFPU
  465.       BSR      MTPermit
  466.       BSR      Get_Time
  467.  
  468.       BSR      Elapsed_Time
  469.  
  470.       LEA.L    DPTime,A0
  471.       MOVE.L   $00(A0),D2
  472.       MOVE.L   $04(A0),D3
  473.       LEA.L    TestFPUCC,A1
  474.       MOVE.L   $00(A1),D0
  475.       MOVE.L   $04(A1),D1
  476.       MOVEA.L  _MathIeeeDoubBasBase,A6
  477.       JSR      _LVOIEEEDPDiv(A6)
  478.       LEA.L    RunTime,A2
  479.       MOVE.L   D0,$00(A2)
  480.       MOVE.L   D1,$04(A2)
  481.  
  482.       MOVE.L   #$00000001,DPFlag
  483.       MOVE.L   #$00000003,DPMaxWidth
  484.  
  485.       LEA.L    RunTime,A0
  486.       LEA.L    DPStra,A1
  487.       BSR      DPftoa
  488.  
  489.       PEA.L    DPStra
  490.       PEA.L    PrtFmt09
  491.       JSR      _printf
  492.       ADDQ.L   #$08,A7
  493.  
  494.       RTS
  495.  
  496. FPU01:
  497.       PEA.L    PrtFmt10
  498.       JSR      _printf
  499.       ADDQ.L   #$04,A7
  500.  
  501.       RTS
  502.  
  503. ************************** TestFPU **************************************
  504. TestFPU:
  505.       DC.L     $F2005C00            ;FMOVECR.X  #PI,FP0
  506.       DC.L     $F2005C8C            ;FMOVECR.X  #e,FP1
  507.  
  508.       MOVE.L   #$0000C34F,D4        ;50000 Loops - 1
  509.       BRA      F001
  510.  
  511.       CNOP  0,4
  512.       DC.L  $00000000
  513.  
  514. F001:
  515.       DC.L     $F2000420            ;FDIV.X     FP1,FP0
  516.       DC.L     $F2000423            ;FMUL.X     FP1,FP0
  517.  
  518.       DC.L     $F2000420            ;FDIV.X     FP1,FP0
  519.       DC.L     $F2000423            ;FMUL.X     FP1,FP0
  520.  
  521.       DC.L     $F2000420            ;FDIV.X     FP1,FP0
  522.       DC.L     $F2000423            ;FMUL.X     FP1,FP0
  523.  
  524.       DBRA     D4,F001
  525.       RTS
  526.  
  527. ************************* Get Time  *************************************
  528. Get_Time:
  529.       MOVEM.L  D0-D7/A0-A6,-(A7)
  530.       LEA.L    Strt_Time,A0         ;Start Time.
  531.       LEA.L    Stop_Time,A1         ;Stop  Time.
  532.  
  533.       MOVE.L   $00(A1),$00(A0)      ;Update Start Time With Previous
  534.       MOVE.L   $04(A1),$04(A0)      ;Stop Time.
  535.       MOVE.L   $08(A1),$08(A0)
  536.  
  537.       MOVE.L   A1,D1                ;Get New Stop Time.
  538.       MOVEA.L  _DOSBase,A6
  539.       JSR      _LVODateStamp(A6)
  540.  
  541.       MOVEM.L  (A7)+,D0-D7/A0-A6
  542.       RTS
  543.  
  544. ************************* Elapsed Time **********************************
  545. *** Remember D0-D1 AND A0-A1 NOT preserved in the _LVO Routines!!!!
  546. ***
  547. Elapsed_Time:
  548.       MOVEM.L  D0-D7/A0-A6,-(A7)
  549.  
  550.       LEA.L    FPAccum,A3
  551.       MOVEA.L  _MathIeeeDoubBasBase,A6
  552.  
  553.       MOVE.L   #$00000BB8,D0        ;3000 Ticks/Minute.
  554.       JSR      _LVOIEEEDPFlt(A6)
  555.       MOVE.L   D0,D2
  556.       MOVE.L   D1,D3
  557.       MOVE.L   D2,$00(A3)           ;Save Ticks/Minute DP Number
  558.       MOVE.L   D3,$04(A3)
  559.  
  560.       LEA.L    Stop_Time,A1
  561.       MOVE.L   $04(A1),D0           ;Stop_Time Minutes --> Ticks.
  562.       ANDI.L   #$0000FFFF,D0
  563.       JSR      _LVOIEEEDPFlt(A6)
  564.       JSR      _LVOIEEEDPMul(A6)
  565.       MOVE.L   D0,D2
  566.       MOVE.L   D1,D3
  567.  
  568.       LEA.L    Stop_Time,A1
  569.       MOVE.L   $08(A1),D0           ;Stop_Time Ticks.
  570.       ANDI.L   #$0000FFFF,D0
  571.       JSR      _LVOIEEEDPFlt(A6)
  572.       JSR      _LVOIEEEDPAdd(A6)    ;Elapsed Stop_Time Ticks (DP).
  573.       MOVE.L   D0,$08(A3)           ;Save it.
  574.       MOVE.L   D1,$0C(A3)
  575.  
  576.       LEA.L    Strt_Time,A0
  577.       MOVE.L   $04(A0),D0           ;Strt_Time Minutes (Hex)
  578.       ANDI.L   #$0000FFFF,D0
  579.       JSR      _LVOIEEEDPFlt(A6)
  580.       MOVE.L   $00(A3),D2
  581.       MOVE.L   $04(A3),D3
  582.       JSR      _LVOIEEEDPMul(A6)
  583.       MOVE.L   D0,D2
  584.       MOVE.L   D1,D3
  585.  
  586.       LEA.L    Strt_Time,A0
  587.       MOVE.L   $08(A0),D0
  588.       ANDI.L   #$0000FFFF,D0
  589.       JSR      _LVOIEEEDPFlt(A6)
  590.       JSR      _LVOIEEEDPAdd(A6)
  591.       MOVE.L   D0,D2
  592.       MOVE.L   D1,D3
  593.  
  594.       MOVE.L   $08(A3),D0
  595.       MOVE.L   $0C(A3),D1
  596.       JSR      _LVOIEEEDPSub(A6)
  597.       MOVE.L   D0,$10(A3)              ;Elapsed Time in Ticks (DP).
  598.       MOVE.L   D1,$14(A3)
  599.  
  600.       JSR      _LVOIEEEDPFix(A6)
  601.       MOVE.L   D0,TimeTicks            ;Elapsed Time in Ticks (Long).
  602.  
  603.       MOVEQ.L  #$32,D0                 ;Number of Ticks per Second (50).
  604.       JSR      _LVOIEEEDPFlt(A6)
  605.       MOVE.L   D0,D2
  606.       MOVE.L   D1,D3
  607.       MOVE.L   $10(A3),D0
  608.       MOVE.L   $14(A3),D1
  609.       JSR      _LVOIEEEDPDiv(A6)
  610.       LEA.L    DPTime,A2               ;Elapsed Time in Seconds (DP).
  611.       MOVE.L   D0,$00(A2)
  612.       MOVE.L   D1,$04(A2)
  613.  
  614.       MOVEM.L  (A7)+,D0-D7/A0-A6
  615.       RTS
  616.  
  617. ************************* DOS Routine To Wait ***************************
  618. Hold_It:
  619.       MOVE.L   Sec_Delay,D1
  620.       MULU.W   #$0032,D1
  621.       MOVEA.L  _DOSBase,A6
  622.       JSR      _LVODelay(A6)
  623.       RTS
  624.  
  625. ************************* Forbid New Multi-Tasking **********************
  626. MTForbid:
  627.       MOVEM.L  D0-D7/A0-A6,-(A7)
  628.       MOVEA.L  _SysBase,A6
  629.       JSR      _LVOForbid(A6)
  630.       MOVEM.L  (A7)+,D0-D7/A0-A6
  631.       RTS
  632.  
  633. ************************* Permit New Multi-Tasking **********************
  634. MTPermit:
  635.       MOVEM.L  D0-D7/A0-A6,-(A7)
  636.       MOVEA.L  _SysBase,A6
  637.       JSR      _LVOPermit(A6)
  638.       MOVEM.L  (A7)+,D0-D7/A0-A6
  639.       RTS
  640.  
  641. ************************* De-Bugging Printout ***************************
  642. Debug:
  643.       MOVEM.L  D0-D7/A0-A6,-(A7)
  644.  
  645.       MOVE.L   D0,-(A7)
  646.       PEA.L    PrtDebug
  647.       JSR      _printf
  648.       LEA.L    $08(A7),A7
  649.  
  650.       MOVEM.L  (A7)+,D0-D7/A0-A6
  651.       RTS
  652.  
  653. ************************* CPU and FPU Types *****************************
  654. CPUFPU_Type:
  655.          MOVEM.L  D0/D1/A0/A6,-(A7)       ;      CPU / FPU
  656.          MOVEA.L  _SysBase,A6             ;00 = 68000/-----
  657.          LEA.L    AttnFlags(A6),A0        ;01 = 68010/-----
  658.                                           ;03 = 68020/-----
  659.          LEA.L    $01(A0),A0              ;07 = 68030/-----
  660.          MOVEQ.L  #$00,D0                 ;10 = 68000/68881
  661.          MOVE.B   (A0),D0                 ;11 = 68010/68881
  662.          MOVE.L   D0,SYS_Type             ;13 = 68020/68881
  663.          MOVE.L   D0,D1                   ;17 = 68030/68881
  664.          ANDI.B   #$0F,D1                 ;30 = 68000/68882
  665.          MOVE.L   D1,CPU_Type             ;31 = 68010/68882
  666.                                           ;33 = 68020/68882
  667.          MOVE.L   D0,D1                   ;37 = 68030/68882
  668.          ANDI.B   #$F0,D1
  669.          MOVE.L   D1,FPU_Type
  670.  
  671.          MOVEM.L  (A7)+,D0/D1/A0/A6
  672.          RTS
  673.  
  674. ************************* Print CPU and FPU Types **********************
  675. PrtCPUFPU:
  676.          MOVEM.L  D0/A0/A1,-(A7)
  677.          LEA.L    PrtFmt04,A0
  678.          LEA.L    $04(A0),A0
  679.  
  680.          LEA.L    TestFPUCC,A1
  681.          MOVE.L   #$403F8000,$00(A1)      ;Clock Cycles For FPUSpeed.
  682.          MOVE.L   #$00000000,$04(A1)      ;31.5 (Million CC's).
  683.  
  684.          MOVE.L   #$04E29C40,CCycles      ;Clock Cycles For RAMSpeed.
  685.  
  686.          LEA.L    TestCPUCC,A1
  687.          MOVE.L   #$404151EB,$00(A1)      ;Clock Cycles For CPUSpeed.
  688.          MOVE.L   #$80000000,$04(A1)
  689.  
  690.          MOVE.L   CPU_Type,D0
  691.          TST.B    D0
  692.          BEQ      S604                    ;CPU is 68000
  693.  
  694.          CMPI.B   #$01,D0
  695.          BNE      S601
  696.          MOVE.L   #$31302F2D,(A0)         ;CPU is 68010
  697.          MOVE.L   #$404151EB,$00(A1)
  698.          MOVE.L   #$80000000,$04(A1)
  699.          MOVE.L   #$04E29C40,CCycles
  700.          BRA      S604
  701.  
  702. S601:    CMPI.B   #$03,D0
  703.          BNE      S602
  704.          MOVE.L   #$32302F2D,(A0)         ;CPU is 68020
  705.          MOVE.L   #$402F0000,$00(A1)
  706.          MOVE.L   #$00000000,$04(A1)
  707.          MOVE.L   #$03A9F530,CCycles
  708.          BRA      S604
  709.  
  710. S602:    CMPI.B   #$07,D0
  711.          BNE      S603
  712.          MOVE.L   #$33302F2D,(A0)         ;CPU is 68030
  713.          MOVE.L   #$402F0000,$00(A1)
  714.          MOVE.L   #$00000000,$04(A1)
  715.          MOVE.L   #$03A9F530,CCycles
  716.          BRA      S604
  717.  
  718. S603:    MOVE.L   #$203F3F3F,-$04(A0)     ;CPU is UnKnown
  719.          MOVE.L   #$3F3F2F2D,(A0)
  720.          MOVE.L   #$3FF00000,$00(A1)
  721.          MOVE.L   #$00000000,$04(A1)
  722.          MOVE.L   #$03A9F530,CCycles
  723.  
  724. S604:    MOVE.L   FPU_Type,D0
  725.          TST.B    D0
  726.          BEQ      S607
  727.  
  728.          MOVE.L   #$2F363838,$02(A0)
  729.  
  730.          CMPI.B   #$10,D0
  731.          BNE      S605
  732.          MOVE.W   #$3831,$06(A0)
  733.          BRA      S607
  734.  
  735. S605:    CMPI.B   #$30,D0
  736.          BNE      S606
  737.          MOVE.W   #$3832,$06(A0)
  738.          BRA      S607
  739.  
  740. S606:    MOVE.L   #$2F3F3F3F,$02(A0)
  741.          MOVE.W   #$3F3F,$06(A0)
  742.  
  743. S607:    MOVEM.L  (A7)+,D0/A0/A1
  744.          RTS
  745.  
  746. ************************* _printf **************************************
  747. _printf:
  748.          MOVEM.L  D1-D3/A0-A3/A6,-(A7)
  749.          MOVEA.L  $24(A7),A0
  750.          LEA.L    $28(A7),A1
  751.          LEA.L    PutChProc,A2
  752.  
  753.          LEA.L    -$100(A7),A7
  754.          MOVEA.L  A7,A3
  755.  
  756.          MOVEA.L  _SysBase,A6
  757.          JSR      _LVORawDoFmt(A6)
  758.  
  759.          MOVEQ.L  #-$01,D0
  760. prt01:   TST.B    (A3)+
  761.          DBEQ     D0,prt01
  762.  
  763.          NOT.L    D0
  764.          BEQ      prt02
  765.  
  766.          MOVE.L   _stdout,D1
  767.          MOVE.L   A7,D2
  768.          MOVE.L   D0,D3
  769.          MOVEA.L  _DOSBase,A6
  770.          JSR      _LVOWrite(A6)
  771.  
  772. prt02:   LEA.L    $100(A7),A7
  773.          MOVEM.L  (A7)+,D1-D3/A0-A3/A6
  774.          RTS
  775.  
  776. PutChProc:
  777.          MOVE.B   D0,(A3)+
  778.          RTS
  779.  
  780. ****************** Convert DP Floating-Point To ASCII *********************
  781. ***** A0 --> Double Precision Number (DPNumber) to convert to ASCII String.
  782. ***** A1 --> ASCII String (DPString) Representing DPNumber.
  783. ***** Other Variables are defined in the program, but should be input.
  784. DPftoa:
  785.          MOVEM.L  D0-D7/A0-A6,-(A7)
  786.  
  787.          MOVEA.L  _MathIeeeDoubBasBase,A6
  788.          MOVEA.L  A1,A2                   ;A2 --> DPString.
  789.          MOVEA.L  A0,A3                   ;A3 --> DPNumber.
  790.          LEA.L    Round,A4
  791.  
  792.          CLR.L    Exp                     ;Clear Exponent.
  793.  
  794.          MOVE.L   DPMaxWidth,D0
  795.          ADDQ.L   #$01,D0
  796.          MOVE.L   D0,Ndig
  797.  
  798.          MOVE.L   $00(A3),D0
  799.          MOVE.L   $04(A3),D1
  800.          JSR      _LVOIEEEDPTst(A6)       ;Is DPNumber Negative?
  801.          BGE      S501                    ;No
  802.  
  803.          MOVE.L   $00(A3),D0              ;Yes, Change sign then.
  804.          MOVE.L   $04(A3),D1
  805.          JSR      _LVOIEEEDPNeg(A6)
  806.          MOVE.L   D0,$00(A3)
  807.          MOVE.L   D1,$04(A3)
  808.  
  809.          MOVE.B   #$2D,(A2)+              ;'-'
  810.  
  811. S501:
  812.          JSR      _LVOIEEEDPTst(A6)       ;Is DPNumber Positive?
  813.          BLE      S506                    ;No (Shouldn't Happen!)
  814. S502:                                     ;Yes.
  815.          MOVE.L   $08(A4),D2              ;1.0
  816.          MOVE.L   $0C(A4),D3
  817.          MOVE.L   $00(A3),D0
  818.          MOVE.L   $04(A3),D1
  819.          JSR      _LVOIEEEDPCmp(A6)       ;Is DPNumber < 1.0 ?
  820.          BGE      S503                    ;No.
  821.                                           ;Yes.
  822.          MOVE.L   $00(A4),D2              ;10.0
  823.          MOVE.L   $04(A4),D3
  824.          MOVE.L   $00(A3),D0
  825.          MOVE.L   $04(A3),D1
  826.          JSR      _LVOIEEEDPMul(A6)
  827.          MOVE.L   D0,$00(A3)
  828.          MOVE.L   D1,$04(A3)
  829.  
  830.          SUBQ.L   #$01,Exp
  831.          BRA      S502
  832.  
  833. S503:
  834. S504:
  835.          MOVE.L   $00(A4),D2              ;10.0
  836.          MOVE.L   $04(A4),D3
  837.          MOVE.L   $00(A3),D0
  838.          MOVE.L   $04(A3),D1
  839.          JSR      _LVOIEEEDPCmp(A6)       ;DPNumber >= 10.0 ?
  840.          BLT      S505                    ;No.
  841.                                           ;Yes.
  842.          MOVE.L   $00(A4),D2
  843.          MOVE.L   $04(A4),D3
  844.          MOVE.L   $00(A3),D0
  845.          MOVE.L   $04(A3),D1
  846.          JSR      _LVOIEEEDPDiv(A6)
  847.          MOVE.L   D0,$00(A3)
  848.          MOVE.L   D1,$04(A3)
  849.  
  850.          ADDQ.L   #$01,Exp
  851.          BRA      S504
  852.  
  853. S505:
  854. S506:
  855.          CMP.L    #$00000002,DPFlag       ;DPFlag = 2?
  856.          BNE      S509                    ;No.
  857.                                           ;Yes. DPFlag = 2 ==> 'g' Format.
  858.          MOVE.L   DPMaxWidth,Ndig
  859.  
  860.          CMP.L    #-$00000004,Exp         ;Exp < -4 ?
  861.          BLT      S507                    ;Yes.
  862.                                           ;No.
  863.          MOVE.L   Exp,D0
  864.          CMP.L    DPMaxWidth,D0           ;Exp > DPMaxWidth ?
  865.          BLE      S508                    ;No.
  866.                                           ;Yes.
  867. S507:
  868.          CLR.L    DPFlag
  869. S508:
  870.          BRA      S511
  871.  
  872. S509:
  873.          CMP.L    #$00000001,DPFlag       ;DPFlag = 1 ?
  874.          BNE      S510                    ;No.
  875.                                           ;Yes. DPFlag = 1 ==> 'f' format.
  876.          MOVE.L   Exp,D0
  877.          ADD.L    D0,Ndig
  878. S510:
  879. S511:
  880.          TST.L    Ndig                    ;Ndig >= 0 ?
  881.          BLT      S516                    ;No.
  882.                                           ;Yes.
  883.  
  884.          CMP.L    #$00000010,Ndig         ;Ndig > 16 ?
  885.          BLE      S512                    ;No.
  886.                                           ;Yes.
  887.          MOVEQ.L  #$10,D0
  888.          BRA      S513
  889.  
  890. S512:
  891.          MOVE.L   Ndig,D0
  892.  
  893. S513:
  894.          ADDQ.L   #$01,D0
  895.          ASL.L    #$03,D0
  896.  
  897.          MOVE.L   $00(A4,D0.L),D2         ;Rounding Values.
  898.          MOVE.L   $04(A4,D0.L),D3
  899.          MOVE.L   $00(A3),D0
  900.          MOVE.L   $04(A3),D1
  901.          JSR      _LVOIEEEDPAdd(A6)
  902.          MOVE.L   D0,$00(A3)
  903.          MOVE.L   D1,$04(A3)
  904.  
  905.          MOVE.L   $00(A4),D2
  906.          MOVE.L   $04(A4),D3        
  907.          JSR      _LVOIEEEDPCmp(A6)
  908.          BLT      S515
  909.  
  910.          MOVE.L   $08(A4),$00(A3)         ;10.0 --> DPNumber.
  911.          MOVE.L   $0C(A4),$04(A3)
  912.  
  913.          ADDQ.L   #$01,Exp
  914.  
  915.          TST.L    DPFlag                  ;DPFlag = 0 ?
  916.          BEQ      S514
  917.  
  918.          ADDQ.L   #$01,Ndig
  919.  
  920. S514:
  921. S515:
  922. S516:
  923.          TST.L    DPFlag                  ;DPFlag = 0 ?
  924.          BEQ      S522                    ;Yes.
  925.                                           ;No.
  926.          TST.L    Exp                     ;Exp < 0 ?
  927.          BGE      S520                    ;No.
  928.                                           ;Yes.
  929.          MOVE.B   #$30,(A2)+              ;'0'
  930.          MOVE.B   #$2E,(A2)+              ;'.'
  931.  
  932.          MOVE.L   Exp,D0
  933.          NEG.L    D0
  934.          SUBQ.L   #$01,D0                 ;-Exp-1
  935.          MOVE.L   D0,D4                   ;i = -Exp - 1
  936.  
  937.          TST.L    Ndig                    ;Ndig <= 0 ?
  938.          BGT      S517                    ;No.
  939.                                           ;Yes.
  940.          MOVE.L   DPMaxWidth,D4           ;i = DPMaxWidth
  941. S517:
  942. S518:
  943.          MOVE.L   D4,D0
  944.          SUBQ.L   #$01,D4
  945.          TST.L    D0
  946.          BEQ      S519
  947.  
  948.          MOVE.B   #$30,(A2)+              ;'0'
  949.          BRA      S518
  950.  
  951. S519:
  952.          CLR.L    DecPos
  953.          BRA      S521
  954.  
  955. S520:
  956.          MOVE.L   Exp,D0
  957.          ADDQ.L   #$01,D0
  958.          MOVE.L   D0,DecPos
  959.  
  960. S521:
  961.          BRA      S523
  962.  
  963. S522:
  964.          MOVEQ.L  #$01,D0
  965.          MOVE.L   D0,DecPos
  966.  
  967. S523:
  968.          TST.L    Ndig                    ;Ndig > 0 ?
  969.          BLE      S530                    ;No.
  970.                                           ;Yes.
  971.          MOVEQ.L  #$00,D4                 ;i = 0
  972. S524:
  973.  
  974.          MOVEQ.L  #$10,D0
  975.          CMP.L    D0,D4                   ;i < 16 ?
  976.          BGE      S525                    ;No.
  977.                                           ;Yes.
  978.          MOVE.L   $00(A3),D0
  979.          MOVE.L   $04(A3),D1
  980.          JSR      _LVOIEEEDPFix(A6)
  981.          MOVE.L   D0,Digit
  982.  
  983.          ADD.L    #$00000030,D0           ;'0'
  984.          MOVE.B   D0,(A2)+
  985.  
  986.          MOVE.L   Digit,D0
  987.          JSR      _LVOIEEEDPFlt(A6)
  988.          MOVE.L   D0,D2
  989.          MOVE.L   D1,D3
  990.  
  991.          MOVE.L   $00(A3),D0
  992.          MOVE.L   $04(A3),D1
  993.          JSR      _LVOIEEEDPSub(A6)
  994.  
  995.          MOVE.L   $00(A4),D2              ;10.0
  996.          MOVE.L   $04(A4),D3
  997.          JSR      _LVOIEEEDPMul(A6)
  998.          MOVE.L   D0,$00(A3)
  999.          MOVE.L   D1,$04(A3)
  1000.          BRA      S526
  1001.  
  1002. S525:
  1003.          MOVE.B   #$30,(A2)+              ;'0'
  1004.  
  1005. S526:
  1006.          SUBQ.L   #$01,Ndig
  1007.          BEQ      S529
  1008.  
  1009.          TST.L    DecPos
  1010.          BEQ      S527
  1011.  
  1012.          SUBQ.L   #$01,DecPos
  1013.          BNE      S527
  1014.  
  1015.          MOVE.B   #$2E,(A2)+              ;'.'
  1016.  
  1017. S527:
  1018. S528:
  1019.          ADDQ.L   #$01,D4                 ;i = i + 1
  1020.          BRA      S524                    ;Do It Again.
  1021.  
  1022. S529:
  1023. S530:
  1024.          TST.L    DPFlag                  ;DPFlag = 0 ?
  1025.          BNE      S534                    ;No.
  1026.                                           ;Yes. Process Exponent Then.
  1027.          MOVE.B   #$45,(A2)+              ;'E'
  1028.  
  1029.          TST.L    Exp                     ;Exp < 0 ?
  1030.          BGE      S531                    ;No.
  1031.                                           ;Yes.
  1032.          NEG.L    Exp                     ;Exp --> -Exp
  1033.  
  1034.          MOVE.B   #$2D,(A2)+              ;'-'
  1035.          BRA      S532
  1036.  
  1037. S531:
  1038.          MOVE.B   #$2B,(A2)+              ;'+'
  1039.  
  1040. S532:
  1041.          CMP.L    #$00000064,Exp          ;Exp >= 100 ?
  1042.          BLT      S533
  1043.  
  1044.          MOVEQ.L  #$64,D1                 ;100
  1045.          MOVE.L   Exp,D0                  ;Exp
  1046.          JSR      _Divs                   ;D0 = D0 / D1
  1047.          ADD.L    #$00000030,D0           ;D0 = D0 + '0'
  1048.  
  1049.          MOVE.B   D0,(A2)+
  1050.  
  1051.          MOVEQ.L  #$64,D1                 ;100
  1052.          MOVE.L   Exp,D0                  ;Exp
  1053.          JSR      _Mods                   ;D0 = D0 % D1
  1054.          MOVE.L   D0,Exp
  1055.  
  1056. S533:
  1057.          MOVEQ.L  #$0A,D1                 ;10
  1058.          MOVE.L   Exp,D0                  ;Exp
  1059.          JSR      _Divs                   ;D0 = Exp / 10
  1060.          ADD.L    #$00000030,D0           ;D0 = D0 + '0'
  1061.  
  1062.          MOVE.B   D0,(A2)+
  1063.  
  1064.          MOVEQ.L  #$0A,D1                 ;D1 = 10
  1065.          MOVE.L   Exp,D0                  ;D0 = Exp
  1066.          JSR      _Mods                   ;D0 = D0 % D1
  1067.          ADD.L    #$00000030,D0           ;D0 = D0 + '0'
  1068.  
  1069.          MOVE.B   D0,(A2)+
  1070.  
  1071. S534:
  1072.          CLR.B    (A2)
  1073.          MOVEM.L  (A7)+,D0-D7/A0-A6
  1074.          RTS
  1075.  
  1076. ************************* Long Signed Divide ****************************
  1077. ***** Long Signed Divide ( D0 = D0 / D1 )
  1078. _Divs:
  1079.          MOVEM.L  D1/D4,-(A7)
  1080.  
  1081.          MOVEQ.L  #$00,D4                 ;Mark Result As Positive.
  1082.          TST.L    D0
  1083.          BPL      D0_Positive
  1084.  
  1085.          NEG.L    D0
  1086.          MOVEQ.L  #$01,D4                 ;Mark Result As Negative.
  1087.  
  1088. D0_Positive:
  1089.  
  1090.          TST.L    D1
  1091.          BPL      D1_Positive
  1092.  
  1093.          NEG.L    D1
  1094.          EORI.W   #$0001,D4               ;Flip Sign Of Result.
  1095.  
  1096. D1_Positive:
  1097.  
  1098.          BSR      Divide
  1099.  
  1100. Check_Sign:
  1101.  
  1102.          TST.W    D4
  1103.          BEQ      Result_Positive
  1104.          NEG.L    D0
  1105.  
  1106. Result_Positive:
  1107.  
  1108.          MOVEM.L  (A7)+,D1/D4
  1109.          TST.L    D0
  1110.          RTS
  1111.  
  1112. ************************* Long Signed Remainder *************************
  1113. ***** Long Signed Remainder ( D0 = D0 % D1 )
  1114. _Mods:
  1115.          MOVEM.L  D1/D4,-(A7)
  1116.  
  1117.          MOVEQ.L  #$00,D4                 ;Mark Result Positive.
  1118.  
  1119.          TST.L    D0
  1120.          BPL      RD0_Positive
  1121.  
  1122.          NEG.L    D0
  1123.          MOVEQ.L  #$01,D4                 ;Mark Result Negative.
  1124.  
  1125. RD0_Positive:
  1126.  
  1127.          TST.L    D1
  1128.          BPL      RD1_Positive
  1129.  
  1130.          NEG.L    D1
  1131.  
  1132. RD1_Positive:
  1133.  
  1134.          BSR      Divide
  1135.  
  1136.          MOVE.L   D1,D0
  1137.          BRA      Check_Sign
  1138.  
  1139. ************************* Divide Routine *******************************
  1140. *******
  1141. Divide:
  1142.          MOVEM.L  D2/D3,-(A7)
  1143.  
  1144.          SWAP     D1
  1145.          TST.W    D1
  1146.          BNE      Divisor32
  1147.  
  1148. Divisor16:
  1149.                                           ;16-Bit Divisor Routine
  1150.          SWAP     D1
  1151.          MOVE.W   D1,D3                   ;Divisor
  1152.          MOVE.W   D0,D2                   ;Lower half of Dividend
  1153.  
  1154.          CLR.W    D0
  1155.          SWAP     D0                      ;Upper half of Dividend
  1156.  
  1157.          DIVU.W   D3,D0                   ;D0 = D0 / D3
  1158.  
  1159.          MOVE.L   D0,D1                   ;First Remainder
  1160.          SWAP     D0                      ;First Quotient.
  1161.  
  1162.          MOVE.W   D2,D1                   ;Lower half of Dividend
  1163.  
  1164.          DIVU.W   D3,D1                   ;D1 = D1 / D3
  1165.  
  1166.          MOVE.W   D1,D0                   ;Second Quotient
  1167.          CLR.W    D1
  1168.          SWAP     D1                      ;Second Remainder
  1169.  
  1170.          MOVEM.L  (A7)+,D2/D3
  1171.          RTS
  1172.  
  1173. ************************* Divide Routine *******************************
  1174. *******
  1175. Divisor32:
  1176.          SWAP     D1
  1177.          MOVE.L   D1,D3                   ;Save Divisor
  1178.          MOVE.L   D0,D1                   ;Copy Dividend
  1179.  
  1180.          CLR.W    D1
  1181.          SWAP     D1
  1182.  
  1183.          SWAP     D0
  1184.          CLR.W    D0
  1185.  
  1186.          MOVEQ.L  #$0F,D2                 ;Loop 16 Times.
  1187.  
  1188. D3201:
  1189.          ADD.L    D0,D0
  1190.          ADDX.L   D1,D1
  1191.  
  1192.          CMP.L    D1,D3
  1193.          BHI      D3202
  1194.  
  1195.          SUB.L    D3,D1
  1196.          ADD.W    #$0001,D0
  1197.  
  1198. D3202:
  1199.          DBF      D2,D3201
  1200.  
  1201.          MOVEM.L  (A7)+,D2/D3
  1202.          RTS
  1203.  
  1204. ************************* Data ******************************************
  1205.          CNOP  0,4
  1206.          DC.L  $00000000
  1207.  
  1208. MyTaskPointer: DS.L  1
  1209. SaveD0:        DS.L  1
  1210. SaveA0:        DS.L  1
  1211. SaveA1:        DS.L  1
  1212. SaveA7:        DS.L  1
  1213. RAMLower:      DS.L  1
  1214. RAMUpper:      DS.L  1
  1215. RAMName:       DS.L  1
  1216. RAMLoad:       DS.L  1
  1217. RAMSize:       DS.L  1
  1218. TimeTicks:     DS.L  1
  1219. crtFile:       DS.L  1
  1220. Sec_Delay:     DS.L  1
  1221. SYS_Type:      DS.L  1
  1222. FPU_Type:      DS.L  1
  1223. CPU_Type:      DS.L  1
  1224. SaveCACR:      DS.L  1
  1225. CCycles:       DS.L  1
  1226.  
  1227. DPMaxWidth:    DS.L  1
  1228. DPFlag:        DS.L  1
  1229. Exp:           DS.L  1
  1230. Digit:         DS.L  1
  1231. DecPos:        DS.L  1
  1232. Ndig:          DS.L  1
  1233.  
  1234. _MathIeeeDoubBasBase:   DS.L  1
  1235.  
  1236.             CNOP  0,2
  1237. MyTaskName  DC.B  'RAMSpeed',0
  1238.  
  1239.             CNOP  0,2
  1240. MathLiba    DC.B  'mathieeedoubbas.library',0
  1241.  
  1242.             CNOP  0,2
  1243. Strt_Time   DC.L  $00000000,$00000000,$00000000
  1244. Stop_Time   DC.L  $00000000,$00000000,$00000000
  1245.  
  1246.             CNOP  0,2
  1247. FPAccum:    DC.L  $00000000,$00000000
  1248.             DC.L  $00000000,$00000000
  1249.             DC.L  $00000000,$00000000
  1250.             DC.L  $00000000,$00000000
  1251.  
  1252.             CNOP  0,2
  1253. TestCPUCC:  DC.L  $00000000,$00000000
  1254.  
  1255.             CNOP  0,2
  1256. TestFPUCC:  DC.L  $00000000,$00000000
  1257.  
  1258.             CNOP  0,2
  1259. DPTime:     DC.L  $00000000,$00000000
  1260.  
  1261.             CNOP  0,2
  1262. NullTime:   DC.L  $00000000,$00000000
  1263.  
  1264.             CNOP  0,2
  1265. RunTime:    DC.L  $00000000,$00000000
  1266.  
  1267.             CNOP  0,2
  1268. DPNumber:   DC.L  $00000000,$00000000
  1269.  
  1270.             CNOP  0,2
  1271. DPStra:     DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1272.             DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1273.             DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1274.             DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1275.  
  1276.             CNOP  0,2
  1277. DPStrb:     DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1278.             DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1279.             DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1280.             DC.B  $00,$00,$00,$00,$00,$00,$00,$00
  1281.  
  1282.             CNOP  0,2
  1283. Round:      DC.B  $40,$24,$00,$00,$00,$00,$00,$00
  1284.             DC.B  $3F,$F0,$00,$00,$00,$00,$00,$00
  1285.             DC.B  $3F,$E0,$00,$00,$00,$00,$00,$00
  1286.             DC.B  $3F,$A9,$99,$99,$99,$99,$99,$99
  1287.             DC.B  $3F,$74,$7A,$E1,$47,$AE,$14,$7A
  1288.             DC.B  $3F,$40,$62,$4D,$D2,$F1,$A9,$FB
  1289.             DC.B  $3E,$D4,$F8,$B5,$88,$E3,$68,$EF
  1290.             DC.B  $3E,$A0,$C6,$F7,$A0,$B5,$ED,$8C
  1291.             DC.B  $3E,$6A,$D7,$F2,$9A,$BC,$AF,$46
  1292.             DC.B  $3E,$35,$79,$8E,$E2,$30,$8C,$38
  1293.             DC.B  $3E,$01,$2E,$0B,$E8,$26,$D6,$93
  1294.             DC.B  $3D,$CB,$7C,$DF,$D9,$D7,$BD,$B8
  1295.             DC.B  $3D,$95,$FD,$7F,$E1,$79,$64,$93
  1296.             DC.B  $3D,$61,$97,$99,$81,$2D,$EA,$0F
  1297.             DC.B  $3D,$2C,$25,$C2,$68,$49,$76,$7E
  1298.             DC.B  $3C,$F6,$84,$9B,$86,$A1,$2B,$98
  1299.             DC.B  $3C,$C2,$03,$AF,$9E,$E7,$56,$13
  1300.  
  1301.             CNOP  0,2
  1302. _TWspec     DC.B  'CON:0/0/640/200/RAMSpeed',0
  1303.  
  1304.             CNOP  0,2
  1305. Title01     DC.B  $0C
  1306.             DC.B  ' <<<<<<<******** RAMSpeed, Version of 03 Jun 1990, By'
  1307.             DC.B  ' ALA ********>>>>>>>',$0A
  1308.             DC.B  $00
  1309.  
  1310.             CNOP  0,2
  1311. Title02     DC.B  $0A
  1312.             DC.B  ' Amiga RAM Speed Tests ( CPU/FPU:%s )'
  1313.             DC.B  $0A,$00
  1314.  
  1315.             CNOP  0,2
  1316. Title03:    DC.B  ' RunTime based on timing an 8000 Byte NOP loop in each'
  1317.             DC.B  ' memory region.',$0A
  1318.             DC.B  $0A,$00
  1319.  
  1320.             CNOP  0,2
  1321. PrtFmt01    DC.B  ' Memory Regions:',$0A,$00
  1322.  
  1323.             CNOP  0,2
  1324. PrtFmt02    DC.B  ' Node Name               Lower     Upper    Program   RunTime'
  1325.             DC.B  '  RAM Speed',$0A
  1326.             DC.B  '                         (Hex)     (Hex)    Address    (Sec) '
  1327.             DC.B  '    (MHz)',$0A
  1328.             DC.B  $00
  1329.  
  1330.             CNOP  0,2
  1331. PrtFmt03    DC.B  ' %-20s  %08lx  %08lx  %08lx   %7s   %7s',$0A,$00
  1332.  
  1333.             CNOP  0,2
  1334. PrtFmt04    DC.B  ' 68000/-----',$00
  1335.  
  1336.             CNOP  0,2
  1337. PrtFmt05    DC.B  ' DPNumber = %s',$0A,$00
  1338.  
  1339.             CNOP  0,2
  1340. PrtFmt06    DC.B  $0A
  1341.             DC.B  ' CPU Speed = %7s MHz',$0A,$00
  1342.  
  1343.             CNOP  0,2
  1344. PrtFmt07    DC.B  'No Room! No Test!',$00
  1345.  
  1346.             CNOP  0,2
  1347. PrtFmt08    DC.B  ' %-20s  %08lx  %08lx  %08lx   %s',$0A,$00
  1348.  
  1349.             CNOP  0,2
  1350. PrtFmt09    DC.B  $0A
  1351.             DC.B  ' FPU Speed = %7s MHz',$0A
  1352.             DC.B  $0A,$00
  1353.  
  1354.             CNOP  0,2
  1355. PrtFmt10    DC.B  $0A
  1356.             DC.B  ' FPU Speed = N/A',$0A
  1357.             DC.B  $0A,$00
  1358.  
  1359.             CNOP  0,2
  1360. NoMath      DC.B  $0A
  1361.             DC.B  '   Could Not Find mathieeedoubbas.library!',$0A,$00
  1362.  
  1363.             CNOP  0,2
  1364. LF          DC.B  $0A,$00
  1365.  
  1366.             CNOP  0,2
  1367. PrtDebug    DC.B  '   D0 = %08lx',$0A,$00
  1368.  
  1369.             CNOP  0,2
  1370. ITS_ON:     DC.B  'ON',$00
  1371.  
  1372.             CNOP  0,2
  1373. ITS_OFF:    DC.B  'OFF',$00
  1374.  
  1375.             CNOP  0,2
  1376. ICacheA:    DC.B  ' ICache %s',$0A
  1377.             DC.B  $0A,$00
  1378.  
  1379.             CNOP  0,2
  1380. ICacheC:    DC.B  ' ICache %s, ',$00
  1381.  
  1382.             CNOP  0,2
  1383. ICacheB:    DC.B  'IBurst %s, ',$00
  1384.  
  1385.             CNOP  0,2
  1386. DCacheC:    DC.B  'DCache %s, ',$00
  1387.  
  1388.             CNOP  0,2
  1389. DCacheB:    DC.B  'DBurst %s',$0A
  1390.             DC.B  $0A,$00
  1391.  
  1392. ************************* Thats All Folks! *******************************
  1393.  
  1394.       END
  1395.  
  1396.