home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff236.lzh / AmigaBench / AmigaBench.asm < prev    next >
Assembly Source File  |  1989-08-09  |  68KB  |  3,023 lines

  1. *************************************
  2. * Assembly Program: AmigaBench.asm  *
  3. *             Al Aburto             *
  4. *            03 Aug 1989            *
  5. *     Must Link with TWStartup.o    *
  6. *************************************
  7.  
  8.       INCLUDE  "exec/types.i"
  9.       INCLUDE  "exec/execbase.i"
  10.       INCLUDE  "exec/nodes.i"
  11.       INCLUDE  "exec/memory.i"
  12.       INCLUDE  "libraries/dos.i"
  13.       INCLUDE  "libraries/dosextens.i"
  14.  
  15.       XREF  _LVORawDoFmt
  16.       XREF  _LVOForbid
  17.       XREF  _LVOPermit
  18.       XREF  _LVODisable
  19.       XREF  _LVOEnable
  20.       XREF  _LVOSupervisor
  21.  
  22.       XREF  _LVOOpen
  23.       XREF  _LVOExamine
  24.       XREF  _LVOClose
  25.       XREF  _LVOWrite
  26.       XREF  _LVORead
  27.       XREF  _LVODateStamp
  28.  
  29.       XREF  _DOSBase
  30.       XREF  _SysBase
  31.       XREF  _stdin
  32.       XREF  _stdout
  33.       XREF  _stderr
  34.  
  35.       XDEF  _main
  36.       XDEF  _TWspec
  37.  
  38. *************************************************************************
  39.  
  40. _main:
  41.          MOVE.L   A7,SaveA7
  42.  
  43.          MOVE.L   A4,ThisTCB
  44.          MOVE.L   #TaskName,LN_NAME(A4)
  45.  
  46.          JSR      CPU_FPU_Type
  47.  
  48.          MOVE.L   _stdout,crtFile      ;Save _stdout File Handle.
  49.          LEA.L    _Buffer,A0
  50.          MOVE.L   A0,PrgCmdBuf
  51.  
  52.          MOVEQ.L  #$00,D0
  53.  
  54. M001:    PEA.L    Title                ;Print Title.
  55.          JSR      _printf
  56.          ADDQ.L   #$04,A7
  57.  
  58.          PEA.L    STR102
  59.          JSR      _printf
  60.          ADDQ.L   #$04,A7
  61. M004:
  62.  
  63. M005:    LEA.L    CmdPrompt,A0
  64.          BSR      Command
  65.  
  66.          CLR.B    -$01(A0,D0.L)        ;Clear the Line Feed at String End.
  67.                                        ;String Length Includes NULL 
  68.                                        ;Character At The End Now.
  69.  
  70.          MOVE.W   (A0),D0
  71.          TST.B    D0
  72.          BNE      M006
  73.  
  74.          ORI.W    #$2000,D0            ;Convert Command to Lower Case.
  75.  
  76.          CMPI.W   #$3F00,D0            ;'?'<cr> Input?
  77.          BEQ      Command_List         ;Yes --- Show Command List.
  78.  
  79.          CMPI.W   #$7100,D0            ;'q'<cr> Input?
  80.          BEQ      EndRun               ;Yes --- Quit Run.
  81.  
  82.          CMPI.W   #$3100,D0            ;'1'<cr> Input?
  83.          BEQ      DhryStd00            ;Yes --- Do Dhrystone Std 68000.
  84.  
  85.          CMPI.W   #$3200,D0            ;'2'<cr> Input?
  86.          BEQ      DhryOpt00            ;Yes --- Do Dhrystone Opt 68000.
  87.  
  88.          CMPI.W   #$3300,D0            ;'3'<cr> Input?
  89.          BEQ      DhryOpt20            ;Yes --- Do Dhrystone Opt 68020.
  90.          BRA      M007
  91.  
  92. M006:    OR.W     #$2020,D0
  93.  
  94.          CMPI.W   #$6361,D0            ;'ca'<cr> Input?
  95.          BEQ      Check_Addr           ;Yes --- Check Routine Addresses.
  96.  
  97.          CMPI.W   #$6373,D0            ;'cs'<cr> Input?
  98.          BEQ      Read_Cache           ;Yes --- Read Cache.
  99.  
  100.          CMPI.W   #$7763,D0            ;'wc'<cr> Input?
  101.          BEQ      Write_Cache          ;Yes --- Write Cache.
  102. M007:
  103.          PEA.L    CmdRepeat
  104.          JSR      _printf
  105.          ADDQ.L   #$04,A7
  106.          BRA      M004
  107.  
  108.  
  109. DhryStd00:
  110.  
  111.          PEA.L    Title
  112.          JSR      _printf
  113.          ADDQ.L   #$04,A7
  114.  
  115.          PEA.L    STR101
  116.          JSR      _printf
  117.          ADDQ.L   #$04,A7
  118.  
  119.          PEA.L    STR107
  120.          JSR      _printf
  121.          ADDQ.L   #$04,A7
  122.  
  123.          JSR      PrtCPUFPU
  124.  
  125.          PEA.L    LineFeed
  126.          JSR      _printf
  127.          ADDQ.L   #$04,A7
  128.  
  129.          LEA.L    _A4Ref,A4
  130.  
  131.          BSR      _Proc0
  132.  
  133.          PEA.L    LineFeed
  134.          JSR      _printf
  135.          ADDQ.L   #$04,A7
  136.  
  137.          BRA      M005
  138.  
  139. DhryOpt00:
  140.  
  141.          PEA.L    Title
  142.          JSR      _printf
  143.          ADDQ.L   #$04,A7
  144.  
  145.          PEA.L    STR101
  146.          JSR      _printf
  147.          ADDQ.L   #$04,A7
  148.  
  149.          PEA.L    STR108
  150.          JSR      _printf
  151.          ADDQ.L   #$04,A7
  152.  
  153.          JSR      PrtCPUFPU
  154.  
  155.          PEA.L    LineFeed
  156.          JSR      _printf
  157.          ADDQ.L   #$04,A7
  158.  
  159.          LEA.L    _A4Ref,A4
  160.  
  161.          BSR      Proc0Opt00
  162.  
  163.          PEA.L    LineFeed
  164.          JSR      _printf
  165.          ADDQ.L   #$04,A7
  166.  
  167.          BRA      M005
  168.  
  169. DhryOpt20:
  170.  
  171.          MOVE.L   CPU_Type,D0
  172.          CMPI.W   #$0002,D0
  173.          BLT.S    Error01
  174.  
  175.          PEA.L    Title
  176.          JSR      _printf
  177.          ADDQ.L   #$04,A7
  178.  
  179.          PEA.L    STR101
  180.          JSR      _printf
  181.          ADDQ.L   #$04,A7
  182.  
  183.          PEA.L    STR109
  184.          JSR      _printf
  185.          ADDQ.L   #$04,A7
  186.  
  187.          JSR      PrtCPUFPU
  188.  
  189.          PEA.L    LineFeed
  190.          JSR      _printf
  191.          ADDQ.L   #$04,A7
  192.  
  193.          LEA.L    _A4Ref,A4
  194.  
  195.          BSR      Proc0Opt20
  196.  
  197.          PEA.L    LineFeed
  198.          JSR      _printf
  199.          ADDQ.L   #$04,A7
  200.  
  201.          BRA      M005
  202.  
  203. Error01:
  204.          LEA.L    STR116,A2
  205.          JSR      PrintError
  206.          BRA      M005
  207.  
  208.  
  209. Command_List:
  210.  
  211.          PEA.L    Title
  212.          JSR      _printf
  213.          ADDQ.L   #$04,A7
  214.  
  215.          PEA.L    STR110
  216.          JSR      _printf
  217.          ADDQ.L   #$04,A7
  218.  
  219.          PEA.L    LineFeed
  220.          JSR      _printf
  221.          ADDQ.L   #$04,A7
  222.  
  223.          BRA      M005
  224.  
  225. Check_Addr:
  226.          PEA.L    Title
  227.          JSR      _printf
  228.          ADDQ.L   #$04,A7
  229.  
  230.          MOVE.L   #Proc0Opt00,-(A7)
  231.          MOVE.L   #_main,-(A7)
  232.          PEA.L    Dump01
  233.          JSR      _printf
  234.          LEA.L    $0C(A7),A7
  235.  
  236.          MOVE.L   #Proc1Opt00,-(A7)
  237.          MOVE.L   #Proc0Opt20,-(A7)
  238.          PEA.L    Dump02
  239.          JSR      _printf
  240.          LEA.L    $0C(A7),A7
  241.  
  242.          MOVE.L   #Proc6Opt00,-(A7)
  243.          MOVE.L   #Proc2Opt00,-(A7)
  244.          PEA.L    Dump03
  245.          JSR      _printf
  246.          LEA.L    $0C(A7),A7
  247.  
  248.          MOVE.L   #Proc8Opt00,-(A7)
  249.          MOVE.L   #Proc8Opt20,-(A7)
  250.          PEA.L    Dump04
  251.          JSR      _printf
  252.          LEA.L    $0C(A7),A7
  253.  
  254.          MOVE.L   #_A4Ref,-(A7)
  255.          MOVE.L   #Func2Opt00,-(A7)
  256.          PEA.L    Dump05
  257.          JSR      _printf
  258.          LEA.L    $0C(A7),A7
  259.  
  260.          PEA.L    LineFeed
  261.          JSR      _printf
  262.          ADDQ.L   #$04,A7
  263.  
  264.          BRA      M005
  265.  
  266. Read_Cache:
  267.          PEA.L    Title
  268.          JSR      _printf
  269.          ADDQ.L   #$04,A7
  270.  
  271.          JSR      Cache_Status
  272.  
  273.          BRA      M005
  274.  
  275. Write_Cache:
  276.          PEA.L    Title
  277.          JSR      _printf
  278.          ADDQ.L   #$04,A7
  279.  
  280.          PEA.L    STR119
  281.          JSR      _printf
  282.          ADDQ.L   #$04,A7
  283.  
  284.          PEA.L    STR120
  285.          JSR      _printf
  286.          ADDQ.L   #$04,A7
  287.  
  288.          LEA.L    EntPrompt,A0
  289.          BSR      Command
  290.  
  291.          CLR.B    -$01(A0,D0.L)        ;Clear the Line Feed at String End.
  292.  
  293.          JSR      Write_To_CACR
  294.  
  295.          BRA      M007
  296.  
  297. EndRun:
  298.          PEA.L    LineFeed
  299.          JSR      _printf
  300.          ADDQ.L   #$04,A7
  301.  
  302. QuitC:
  303.          MOVEA.L  SaveA7,A7
  304.          MOVEQ.L  #$00,D0
  305.          RTS
  306.  
  307. *<<<<<<<<<<<<<<<<<<<<<<<< Subroutines >>>>>>>>>>>>>>>>>>>>>>>>>>>*
  308.  
  309. ****************** Standard 68000 _Proc0 *************************
  310. _Proc0:
  311.          LINK     A5,#-$50
  312.          MOVEM.L  D4-D7,-(A7)
  313.  
  314.          JSR      _dtime                 ;Time Empty FOR Loop (nulltime).
  315.          MOVE.L   D0,-$48(A5)            ;starttime
  316.  
  317.          MOVEQ.L  #$00,D7
  318.          BRA      P0004
  319. P0002:
  320.          ADDQ.L   #$01,D7
  321. P0004:
  322.          CMPI.W   #$C350,D7
  323.          BCS      P0002
  324.  
  325.          JSR      _dtime                 ;StopTime
  326.          SUB.L    -$48(A5),D0            ;D0 = StopTime - StartTime
  327.          MOVE.L   D0,-$4C(A5)            ;D0 = NullTime 
  328.  
  329. ;   PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));
  330.  
  331.          MOVE.L   #Buf01,$14D0(A4)        ;_PtrGlbNext = ($976C,A4)
  332.  
  333. ;   PtrGlb = (RecordPtr) malloc(sizeof(RecordType));
  334.  
  335.          MOVE.L   #Buf02,$14CC(A4)        ;_PtrGlb     = ($9768,A4)
  336.  
  337. ;   PtrGlb->PtrComp = PtrGlbNext;
  338.  
  339.          MOVEA.L  $14CC(A4),A0
  340.          MOVE.L   $14D0(A4),(A0)
  341.  
  342. ;   PtrGlb->Discr = Ident1;               ;Ident1 is $0000
  343.  
  344.          MOVEA.L  $14CC(A4),A0
  345.          CLR.W    $04(A0)
  346.  
  347. ;   PtrGlb->EnumComp = Ident3;
  348.  
  349.          MOVEA.L  $14CC(A4),A0            ;Ident3 is $0002
  350.          MOVE.W   #$0002,$06(A0)
  351.  
  352. ;   PtrGlb->IntComp = 40;
  353.  
  354.          MOVEA.L  $14CC(A4),A0
  355.          MOVE.W   #$0028,$08(A0)
  356.  
  357. ;   strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING")
  358.  
  359.          PEA.L    STR103
  360.          MOVEA.L  $14CC(A4),A0
  361.          PEA.L    $0A(A0)
  362.          JSR      _strcpy
  363.          ADDQ.L   #$08,A7
  364.  
  365.  
  366. ;   Array2Glob[8][7] = 10;   /* Was missing in published Version  */
  367.  
  368.          MOVE.W   #$0A,$03B6(A4)         ;_Array2Glob+830
  369.  
  370. *******************
  371. *-- Start Timer --*
  372. *******************
  373.  
  374.          JSR      _dtime
  375.          MOVE.L   D0,-$48(A5)            ;StartTime
  376.  
  377.          MOVEQ.L  #$00,D7                ;MAIN FOR LOOP
  378.          BRA      P0024
  379. P0006:
  380.  
  381.          JSR      _Proc5
  382.  
  383.          JSR      _Proc4
  384.  
  385.          MOVE.W   #$0002,-$02(A5)        ;IntLoc1 = 2
  386.  
  387.          MOVEQ.L  #$03,D4                ;IntLoc2 = 3
  388.  
  389. ;   strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
  390.  
  391.          PEA.L    STR104
  392.          PEA.L    -$44(A5)               ;String2Loc
  393.          JSR      _strcpy
  394.          ADDQ.L   #$08,A7
  395.  
  396.          MOVE.W   #$0001,-$06(A5)        ;EnumLoc = Ident2
  397.                                          ;Ident2 = $0001
  398.  
  399. ;   BoolGlob = ! Func2(String1Loc, String2Loc);
  400.  
  401.          PEA.L    -$44(A5)               ;String2Loc
  402.          PEA.L    -$25(A5)               ;String1Loc
  403.          JSR      _Func2
  404.          ADDQ.L   #$08,A7
  405.  
  406.          TST.W    D0
  407.          BNE      P0008
  408.  
  409.          MOVE.W   #$0001,$0004(A4)       ;_BoolGlob
  410.          BRA      P0010
  411. P0008:
  412.          CLR.W    $0004(A4)              ;_BoolGlob
  413. P0010:
  414.  
  415. P0012:                                  ;While (IntLoc1 < IntLoc2)
  416.          MOVE.W   -$02(A5),D0
  417.          CMP.W    D4,D0
  418.          BGE      P0014
  419.  
  420.          MOVE.W   -$02(A5),D0          ;IntLoc3 = 5 * IntLoc1 - IntLoc2
  421.          MULS.W   #$0005,D0
  422.          SUB.W    D4,D0
  423.          MOVE.W   D0,-$04(A5)
  424.  
  425. ;      Proc7(IntLoc1, IntLoc2, &IntLoc3);
  426.  
  427.          PEA.L    -$04(A5)
  428.          MOVE.W   D4,-(A7)
  429.          MOVE.W   -$02(A5),-(A7)
  430.          JSR      _Proc7
  431.          ADDQ.L   #$08,A7
  432.  
  433.          ADDQ.W   #$0001,-$02(A5)      ;++IntLoc1
  434.  
  435.          BRA      P0012
  436. P0014:
  437.  
  438.  
  439. ;   Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
  440.  
  441.          MOVE.W   -$04(A5),-(A7)
  442.          MOVE.W   -$02(A5),-(A7)
  443.          PEA.L    $0078(A4)            ;_Array2Glob
  444.          PEA.L    $0010(A4)            ;_Array1Glob
  445.          JSR      _Proc8
  446.          LEA.L    $0C(A7),A7
  447.  
  448. ;   Proc1(PtrGlb);
  449.  
  450.          MOVE.L   $14CC(A4),-(A7)      ;_PtrGlb
  451.          JSR      _Proc1
  452.          ADDQ.L   #$04,A7
  453.  
  454. ;   for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
  455.  
  456.          MOVEQ.L  #$41,D6
  457.          BRA      P0022
  458. P0018:
  459.  
  460. ;      if (EnumLoc == Func1(CharIndex, 'C'))
  461. ;         Proc6(Ident1, &EnumLoc);
  462.  
  463.          MOVE.W   #$0043,-(A7)
  464.          MOVE.B   D6,D0
  465.          EXT.W    D0
  466.          MOVE.W   D0,-(A7)
  467.          JSR      _Func1
  468.          ADDQ.L   #$04,A7
  469.  
  470.          CMP.W    -$06(A5),D0
  471.          BNE      P0020
  472.  
  473.          PEA.L    -$06(A5)
  474.          CLR.W    -(A7)
  475.          JSR      _Proc6
  476.          ADDQ.L   #$06,A7
  477.  
  478.  
  479. ;   IntLoc3 = IntLoc2 * IntLoc1;
  480.  
  481. P0020:
  482.  
  483.          ADDQ.B   #$01,D6
  484. P0022:
  485.          CMP.B    $000C(A4),D6         ;_Char2Glob = ($000C,A4)
  486.          BLE      P0018
  487.  
  488.          MOVE.W   D4,D0
  489.          MULS.W   -$02(A5),D0
  490.          MOVE.W   D0,-$04(A5)
  491.  
  492. ;   IntLoc2 = IntLoc3 / IntLoc1;
  493.  
  494.          MOVE.W   -$04(A5),D4
  495.          EXT.L    D4
  496.          DIVS.W   -$02(A5),D4
  497.  
  498. ;   IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
  499.  
  500.          MOVE.W   -$04(A5),D0
  501.          SUB.W    D4,D0
  502.          MULS.W   #$0007,D0
  503.          MOVE.W   D0,D4
  504.          SUB.W    -$02(A5),D4
  505.  
  506. ;   Proc2(&IntLoc1);
  507.  
  508.          PEA.L    -$02(A5)
  509.          JSR      _Proc2
  510.          ADDQ.L   #$04,A7
  511.  
  512.          ADDQ.L   #$01,D7
  513. P0024:
  514.          CMPI.W   #$C350,D7
  515.          BCS      P0006
  516.  
  517.  
  518. ******************
  519. *-- Stop Timer --*
  520. ******************
  521.  
  522. ;   benchtime = dtime() - starttime - nulltime;
  523.  
  524.          JSR      _dtime               ;StopTime
  525.          SUB.L    -$48(A5),D0          ;StopTime - StartTime
  526.          SUB.L    -$4C(A5),D0          ;StopTime - StartTime - NullTime
  527.          MOVE.L   D0,-$50(A5)          ;BenchTime
  528.  
  529. ;   printf("   Time(sec) for %ld passes = %f\n", (long) LOOPS,
  530. ;             (float)benchtime/50.0);
  531.  
  532.          MOVE.L   -$50(A5),D0          ;BenchTime = Time in TICKS
  533.  
  534.          JSR      FFPFlt
  535.  
  536.          MOVE.L   #$C8000046,D1        ;50.00
  537.          JSR      FFPDiv               ;Time in SECONDS.
  538.  
  539.          MOVE.L   -$50(A5),-(A7)       ;benchtime / 50.00
  540.          PEA.L    $0000C350            ;50000
  541.          PEA.L    STR105
  542.          JSR      _printf
  543.          LEA.L    $0C(A7),A7
  544.  
  545. ;   printf("   This System Benchmarks at %ld dhrystones/second\n",
  546. ;      ((long) LOOPS) * 50L / benchtime);
  547.  
  548.          MOVE.L   #$002625A0,D0        ;50000 * 50
  549.          MOVE.L   -$50(A5),D1          ;BenchTime
  550.          JSR      LDivs                ;D0 = D0 / D1
  551.  
  552.          MOVE.L   D0,-(A7)             ;Dhrystones / Sec
  553.          PEA.L    STR106
  554.          JSR      _printf
  555.          ADDQ.L   #$08,A7
  556.  
  557. P0026:
  558.          MOVEM.L  (A7)+,D4-D7
  559.          UNLK     A5
  560.          RTS
  561.  
  562.  
  563. ****************** Optimized 68000 _Proc0 *******************************
  564. Proc0Opt00:
  565.          LINK     A5,#-$50
  566.          MOVEM.L  D4-D7,-(A7)
  567.  
  568.          JSR      _dtime                 ;Time Empty FOR Loop (nulltime).
  569.          MOVE.L   D0,-$48(A5)            ;starttime
  570.  
  571.          MOVEQ.L  #$00,D7
  572.          BRA      Q0004
  573. Q0002:
  574.          ADDQ.L   #$01,D7
  575. Q0004:
  576.          CMPI.W   #$C350,D7
  577.          BCS      Q0002
  578.  
  579.          JSR      _dtime                 ;StopTime
  580.          SUB.L    -$48(A5),D0            ;D0 = StopTime - StartTime
  581.          MOVE.L   D0,-$4C(A5)            ;D0 = NullTime 
  582.  
  583. ;   PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));
  584.  
  585.          MOVE.L   #Buf01,$14D0(A4)       ;_PtrGlbNext = ($14D0,A4)
  586.  
  587. ;   PtrGlb = (RecordPtr) malloc(sizeof(RecordType));
  588.  
  589.          MOVE.L   #Buf02,$14CC(A4)       ;_PtrGlb     = ($14CC,A4)
  590.  
  591. ;   PtrGlb->PtrComp = PtrGlbNext;
  592.  
  593.          MOVEA.L  $14CC(A4),A0
  594.          MOVE.L   $14D0(A4),(A0)
  595.  
  596. ;   PtrGlb->Discr = Ident1;
  597.  
  598.          MOVEA.L  $14CC(A4),A0
  599.          CLR.W    $04(A0)
  600.  
  601. ;   PtrGlb->EnumComp = Ident3;
  602.  
  603.          MOVEA.L  $14CC(A4),A0
  604.          MOVE.W   #$0002,$06(A0)
  605.  
  606. ;   PtrGlb->IntComp = 40;
  607.  
  608.          MOVEA.L  $14CC(A4),A0
  609.          MOVE.W   #$0028,$08(A0)
  610.  
  611. ;   strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING")
  612.  
  613.          PEA.L    STR103
  614.          MOVEA.L  $14CC(A4),A0
  615.          PEA.L    $0A(A0)
  616.          JSR      _strcpy
  617.          ADDQ.L   #$08,A7
  618.  
  619.  
  620. ;   Array2Glob[8][7] = 10;   /* Was missing in published Version  */
  621.  
  622.          MOVE.W   #$000A,$03B6(A4)       ;_Array2Glob+830
  623.  
  624. *******************
  625. *-- Start Timer --*
  626. *******************
  627.          MOVEQ.L  #$00,D3
  628.          MOVEQ.L  #$00,D5
  629.  
  630.          JSR      _dtime
  631.          MOVE.L   D0,-$48(A5)            ;StartTime
  632.  
  633.          MOVEQ.L  #$00,D7                ;MAIN FOR LOOP
  634.          JMP      Q0024
  635. Q0006:
  636.          MOVE.B   #$41,$08(A4)           ;_Proc5 Inlined.
  637.          CLR.W    $04(A4)
  638.  
  639.          MOVE.B   #$42,$0C(A4)           ;_Proc4 Inlined And Optimized!
  640.  
  641.          MOVE.W   #$0002,D5              ;IntLoc1 = 2
  642.  
  643.          MOVEQ.L  #$03,D4                ;IntLoc2 = 3
  644.  
  645. ;   strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
  646.  
  647.          LEA.L    -$44(A5),A0            ;_strcpy Inlined.
  648.          LEA.L    STR104,A1
  649.          MOVE.L   A0,D0
  650.  
  651. I0002:   MOVE.B   (A1)+,(A0)+
  652.          BNE.S    I0002
  653.  
  654.          MOVE.W   #$0001,-$06(A5)        ;EnumLoc = Ident2
  655.  
  656. ;   BoolGlob = ! Func2(String1Loc, String2Loc);
  657.  
  658.          PEA.L    -$44(A5)
  659.          PEA.L    -$25(A5)
  660.          JSR      Func2Opt00
  661.          ADDQ.L   #$08,A7
  662.  
  663.          TST.W    D0
  664.          BNE      Q0008
  665.  
  666.          MOVE.W   #$0001,$04(A4)         ;_BoolGlob
  667.          JMP      Q0010
  668. Q0008:
  669.          CLR.W    $04(A4)                ;_BoolGlob
  670. Q0010:
  671.  
  672. Q0012:                                   ;While (IntLoc1 < IntLoc2)
  673.          MOVE.W   D5,D0
  674.          CMP.W    D4,D0
  675.          BGE      Q0014
  676.  
  677.          MOVE.W   D5,D0                  ;IntLoc3 = 5 * IntLoc1 - IntLoc2
  678.          MULS.W   #$0005,D0
  679.          SUB.W    D4,D0
  680.          MOVE.W   D0,D3
  681.  
  682. ;      Proc7(IntLoc1, IntLoc2, &IntLoc3);
  683.  
  684.          MOVE.W   D5,D1                  ;_Proc7 Inlined!
  685.          ADDQ.W   #$02,D1
  686.          MOVE.W   D4,D0
  687.          ADD.W    D1,D0
  688.          MOVE.W   D0,D3
  689.  
  690.          ADDQ.W   #$0001,D5              ;++IntLoc1
  691.  
  692.          JMP      Q0012
  693. Q0014:
  694.  
  695.  
  696. ;   Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
  697.  
  698.          MOVE.W   D3,-(A7)
  699.          MOVE.W   D5,-(A7)
  700.          PEA.L    $78(A4)
  701.          PEA.L    $10(A4)                ;_Array1Glob = ($0010,A4)
  702.          JSR      Proc8Opt00
  703.          LEA.L    $0C(A7),A7
  704.  
  705. ;   Proc1(PtrGlb);
  706.  
  707.          MOVE.L   $14CC(A4),-(A7)
  708.          JSR      Proc1Opt00
  709.          ADDQ.L   #$04,A7
  710.  
  711. ;   for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
  712.  
  713.          MOVEQ.L  #$41,D6
  714.          JMP      Q0022
  715. Q0018:
  716.  
  717. ;      if (EnumLoc == Func1(CharIndex, 'C'))
  718. ;         Proc6(Ident1, &EnumLoc);
  719.  
  720.          MOVE.B   D6,D0                  ;_Func1 Inlined And Optimized!
  721.          EXT.W    D0
  722.  
  723.          CMPI.B   #$43,D0
  724.          BEQ.S    I0004
  725.          MOVEQ.L  #$00,D0
  726.          JMP      I0006
  727. I0004:
  728.          MOVEQ.L  #$01,D0
  729. I0006:
  730.  
  731.          CMP.W    -$06(A5),D0
  732.          BNE      Q0020
  733.  
  734.          PEA.L    -$06(A5)
  735.          CLR.W    -(A7)
  736.          JSR      Proc6Opt00
  737.          ADDQ.L   #$06,A7
  738.  
  739.  
  740. ;   IntLoc3 = IntLoc2 * IntLoc1;
  741.  
  742. Q0020:
  743.  
  744.          ADDQ.B   #$01,D6
  745. Q0022:
  746.          CMP.B    $0C(A4),D6              ;_Char2Glob = ($000C,A4)
  747.          BLE      Q0018
  748.  
  749.          MOVE.W   D4,D0
  750.          MULS.W   D5,D0
  751.          MOVE.W   D0,D3
  752.  
  753. ;   IntLoc2 = IntLoc3 / IntLoc1;
  754.  
  755.          MOVE.W   D3,D4
  756.          EXT.L    D4
  757.          DIVS.W   D5,D4
  758.  
  759. ;   IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
  760.  
  761.          MOVE.W   D3,D0
  762.          SUB.W    D4,D0
  763.          MULS.W   #$0007,D0
  764.          MOVE.W   D0,D4
  765.          SUB.W    D5,D4
  766.  
  767. ;   Proc2(&IntLoc1);
  768.                                           ;_Proc2 Inlined.
  769.          MOVE.W   D5,D1
  770.          ADDI.W   #$000A,D1
  771.          MOVEQ.L  #$00,D2                 ;This makes me think the subr
  772.                                           ;is wrong somehow.
  773. I0008:
  774.          CMPI.B   #$41,$08(A4)
  775.          BNE      I0010
  776.          SUBQ.W   #$01,D1
  777.          MOVE.W   D1,D0
  778.          SUB.W    (A4),D0
  779.          MOVE.W   D0,D5
  780. I0010:
  781.  
  782.          TST.W    D2
  783.          BEQ      I0012                   ;Break (But D2 _IS_ ZERO!)
  784.          JMP      I0008
  785. I0012:
  786.  
  787.          ADDQ.L   #$01,D7
  788. Q0024:
  789.          CMPI.W   #$C350,D7
  790.          BCS      Q0006
  791.  
  792.  
  793. ******************
  794. *-- Stop Timer --*
  795. ******************
  796.  
  797. ;   benchtime = dtime() - starttime - nulltime;
  798.  
  799.          JSR      _dtime                 ;StopTime
  800.          SUB.L    -$48(A5),D0            ;StopTime - StartTime
  801.          SUB.L    -$4C(A5),D0            ;StopTime - StartTime - NullTime
  802.          MOVE.L   D0,-$50(A5)            ;BenchTime
  803.  
  804. ;   printf("   Time(sec) for %ld passes = %f\n", (long) LOOPS,
  805. ;             (float)benchtime/50.0);
  806.  
  807.          MOVE.L   -$50(A5),D0            ;BenchTime = Time in TICKS
  808.  
  809.          JSR      FFPFlt
  810.  
  811.          MOVE.L   #$C8000046,D1          ;50.00
  812.          JSR      FFPDiv                 ;Time in SECONDS.
  813.  
  814.          MOVE.L   -$50(A5),-(A7)         ;benchtime / 50.00
  815.          PEA.L    $0000C350              ;50000
  816.          PEA.L    STR105
  817.          JSR      _printf
  818.          LEA.L    $0C(A7),A7
  819.  
  820. ;   printf("   This System Benchmarks at %ld dhrystones/second\n",
  821. ;      ((long) LOOPS) * 50L / benchtime);
  822.  
  823.          MOVE.L   #$002625A0,D0          ;50000 * 50
  824.          MOVE.L   -$50(A5),D1            ;BenchTime
  825.          JSR      LDivs                  ;D0 = D0 / D1
  826.  
  827.          MOVE.L   D0,-(A7)               ;Dhrystones / Sec
  828.          PEA.L    STR106
  829.          JSR      _printf
  830.          ADDQ.L   #$08,A7
  831.  
  832. Q0026:
  833.          MOVEM.L  (A7)+,D4-D7
  834.          UNLK     A5
  835.          RTS
  836.  
  837. ****************** Optimized 68020 _Proc0 *******************************
  838. Proc0Opt20:
  839.          LINK     A5,#-$50
  840.          MOVEM.L  D4-D7,-(A7)
  841.  
  842.          JSR      _dtime                 ;Time Empty FOR Loop (nulltime).
  843.          MOVE.L   D0,-$48(A5)            ;starttime
  844.  
  845.          MOVEQ.L  #$00,D7
  846.          BRA      U0004
  847. U0002:
  848.          ADDQ.L   #$01,D7
  849. U0004:
  850.          CMPI.W   #$C350,D7
  851.          BCS      U0002
  852.  
  853.          JSR      _dtime                 ;StopTime
  854.          SUB.L    -$48(A5),D0            ;D0 = StopTime - StartTime
  855.          MOVE.L   D0,-$4C(A5)            ;D0 = NullTime 
  856.  
  857. ;   PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));
  858.  
  859.          MOVE.L   #Buf01,$14D0(A4)       ;_PtrGlbNext = ($14D0,A4)
  860.  
  861. ;   PtrGlb = (RecordPtr) malloc(sizeof(RecordType));
  862.  
  863.          MOVE.L   #Buf02,$14CC(A4)       ;_PtrGlb     = ($14CC,A4)
  864.  
  865. ;   PtrGlb->PtrComp = PtrGlbNext;
  866.  
  867.          MOVEA.L  $14CC(A4),A0
  868.          MOVE.L   $14D0(A4),(A0)
  869.  
  870. ;   PtrGlb->Discr = Ident1;
  871.  
  872.          MOVEA.L  $14CC(A4),A0
  873.          CLR.W    $04(A0)
  874.  
  875. ;   PtrGlb->EnumComp = Ident3;
  876.  
  877.          MOVEA.L  $14CC(A4),A0
  878.          MOVE.W   #$0002,$06(A0)
  879.  
  880. ;   PtrGlb->IntComp = 40;
  881.  
  882.          MOVEA.L  $14CC(A4),A0
  883.          MOVE.W   #$0028,$08(A0)
  884.  
  885. ;   strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING")
  886.  
  887.          PEA.L    STR103
  888.          MOVEA.L  $14CC(A4),A0
  889.          PEA.L    $0A(A0)
  890.          JSR      _strcpy
  891.          ADDQ.L   #$08,A7
  892.  
  893.  
  894. ;   Array2Glob[8][7] = 10;   /* Was missing in published Version  */
  895.  
  896.          MOVE.W   #$000A,$03B6(A4)       ;_Array2Glob+830
  897.  
  898. *******************
  899. *-- Start Timer --*
  900. *******************
  901.          MOVEQ.L  #$00,D3
  902.          MOVEQ.L  #$00,D5
  903.  
  904.          JSR      _dtime
  905.          MOVE.L   D0,-$48(A5)            ;StartTime
  906.  
  907.          MOVEQ.L  #$00,D7                ;MAIN FOR LOOP
  908.          JMP      U0024
  909. U0006:
  910.          MOVE.B   #$41,$08(A4)           ;_Proc5 Inlined.
  911.          CLR.W    $04(A4)
  912.  
  913.          MOVE.B   #$42,$0C(A4)           ;_Proc4 Inlined And Optimized!
  914.  
  915.          MOVE.W   #$0002,D5              ;IntLoc1 = 2
  916.  
  917.          MOVEQ.L  #$03,D4                ;IntLoc2 = 3
  918.  
  919. ;   strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
  920.  
  921.          LEA.L    -$44(A5),A0            ;_strcpy Inlined.
  922.          LEA.L    STR104,A1
  923.          MOVE.L   A0,D0
  924.  
  925. J0002:   MOVE.B   (A1)+,(A0)+
  926.          BNE.S    J0002
  927.  
  928.          MOVE.W   #$0001,-$06(A5)        ;EnumLoc = Ident2
  929.  
  930. ;   BoolGlob = ! Func2(String1Loc, String2Loc);
  931.  
  932.          PEA.L    -$44(A5)
  933.          PEA.L    -$25(A5)
  934.          JSR      Func2Opt00
  935.          ADDQ.L   #$08,A7
  936.  
  937.          TST.W    D0
  938.          BNE.S    U0008
  939.  
  940.          MOVE.W   #$0001,$04(A4)         ;_BoolGlob
  941.          JMP      U0010
  942. U0008:
  943.          CLR.W    $04(A4)                ;_BoolGlob
  944. U0010:
  945.  
  946. U0012:                                   ;While (IntLoc1 < IntLoc2)
  947.          MOVE.W   D5,D0
  948.          CMP.W    D4,D0
  949.          BGE.S    U0014
  950.  
  951.          MOVE.W   D5,D0                  ;IntLoc3 = 5 * IntLoc1 - IntLoc2
  952.          MULS.W   #$0005,D0
  953.          SUB.W    D4,D0
  954.          MOVE.W   D0,D3
  955.  
  956. ;      Proc7(IntLoc1, IntLoc2, &IntLoc3);
  957.  
  958.          MOVE.W   D5,D1                  ;_Proc7 Inlined!
  959.          ADDQ.W   #$02,D1                
  960.          MOVE.W   D4,D0
  961.          ADD.W    D1,D0
  962.          MOVE.W   D0,D3
  963.  
  964.          ADDQ.W   #$0001,D5              ;++IntLoc1
  965.  
  966.          JMP      U0012
  967. U0014:
  968.  
  969. ;   Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
  970.  
  971.          MOVE.W   D3,-(A7)
  972.          MOVE.W   D5,-(A7)
  973.          PEA.L    $78(A4)
  974.          PEA.L    $10(A4)                ;_Array1Glob = ($0010,A4)
  975.          JSR      Proc8Opt20
  976.          LEA.L    $0C(A7),A7
  977.  
  978. ;   Proc1(PtrGlb);
  979.  
  980.          MOVE.L   $14CC(A4),-(A7)
  981.          JSR      Proc1Opt00
  982.          ADDQ.L   #$04,A7
  983.  
  984. ;   for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
  985.  
  986.          MOVEQ.L  #$41,D6
  987.          JMP      U0022
  988. U0018:
  989.  
  990. ;      if (EnumLoc == Func1(CharIndex, 'C'))
  991. ;         Proc6(Ident1, &EnumLoc);
  992.  
  993.          MOVE.B   D6,D0                  ;_Func1 Inlined And Optimized!
  994.          EXT.W    D0
  995.  
  996.          CMPI.B   #$43,D0
  997.          BEQ.S    J0004
  998.          MOVEQ.L  #$00,D0
  999.          JMP      J0006
  1000. J0004:
  1001.          MOVEQ.L  #$01,D0
  1002. J0006:
  1003.  
  1004.          CMP.W    -$06(A5),D0
  1005.          BNE.S    U0020
  1006.  
  1007.          PEA.L    -$06(A5)
  1008.          CLR.W    -(A7)
  1009.          JSR      Proc6Opt00
  1010.          ADDQ.L   #$06,A7
  1011.  
  1012.  
  1013. ;   IntLoc3 = IntLoc2 * IntLoc1;
  1014.  
  1015. U0020:
  1016.  
  1017.          ADDQ.B   #$01,D6
  1018. U0022:
  1019.          CMP.B    $0C(A4),D6              ;_Char2Glob = ($000C,A4)
  1020.          BLE.S    U0018
  1021.  
  1022.          MOVE.W   D4,D0
  1023.          MULS.W   D5,D0
  1024.          MOVE.W   D0,D3
  1025.  
  1026. ;   IntLoc2 = IntLoc3 / IntLoc1;
  1027.  
  1028.          MOVE.W   D3,D4
  1029.          EXT.L    D4
  1030.          DIVS.W   D5,D4
  1031.  
  1032. ;   IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
  1033.  
  1034.          MOVE.W   D3,D0
  1035.          SUB.W    D4,D0
  1036.          MULS.W   #$0007,D0
  1037.          MOVE.W   D0,D4
  1038.          SUB.W    D5,D4
  1039.  
  1040. ;   Proc2(&IntLoc1);
  1041.                                           ;_Proc2 Inlined.
  1042.          MOVE.W   D5,D1
  1043.          ADDI.W   #$000A,D1
  1044.          MOVEQ.L  #$00,D2                 ;This makes me think the subr
  1045.                                           ;is wrong somehow.
  1046. J0008:
  1047.          CMPI.B   #$41,$08(A4)
  1048.          BNE.S    J0010
  1049.          SUBQ.W   #$01,D1
  1050.          MOVE.W   D1,D0
  1051.          SUB.W    (A4),D0
  1052.          MOVE.W   D0,D5
  1053. J0010:
  1054.  
  1055.          TST.W    D2
  1056.          BEQ.S    J0012                   ;Break (But D2 _IS_ ZERO!)
  1057.          JMP      J0008
  1058. J0012:
  1059.  
  1060.          ADDQ.L   #$01,D7
  1061. U0024:
  1062.          CMPI.W   #$C350,D7
  1063.          BCS      U0006
  1064.  
  1065.  
  1066. ******************
  1067. *-- Stop Timer --*
  1068. ******************
  1069.  
  1070. ;   benchtime = dtime() - starttime - nulltime;
  1071.  
  1072.          JSR      _dtime                 ;StopTime
  1073.          SUB.L    -$48(A5),D0            ;StopTime - StartTime
  1074.          SUB.L    -$4C(A5),D0            ;StopTime - StartTime - NullTime
  1075.          MOVE.L   D0,-$50(A5)            ;BenchTime
  1076.  
  1077. ;   printf("   Time(sec) for %ld passes = %f\n", (long) LOOPS,
  1078. ;             (float)benchtime/50.0);
  1079.  
  1080.          MOVE.L   -$50(A5),D0            ;BenchTime = Time in TICKS
  1081.  
  1082.          JSR      FFPFlt
  1083.  
  1084.          MOVE.L   #$C8000046,D1          ;50.00
  1085.          JSR      FFPDiv                 ;Time in SECONDS.
  1086.  
  1087.          MOVE.L   -$50(A5),-(A7)         ;benchtime / 50.00
  1088.          PEA.L    $0000C350              ;50000
  1089.          PEA.L    STR105
  1090.          JSR      _printf
  1091.          LEA.L    $0C(A7),A7
  1092.  
  1093. ;   printf("   This System Benchmarks at %ld dhrystones/second\n",
  1094. ;      ((long) LOOPS) * 50L / benchtime);
  1095.  
  1096.          MOVE.L   #$002625A0,D0          ;50000 * 50
  1097.          MOVE.L   -$50(A5),D1            ;BenchTime
  1098.          JSR      LDivs                  ;D0 = D0 / D1
  1099.  
  1100.          MOVE.L   D0,-(A7)               ;Dhrystones / Sec
  1101.          PEA.L    STR106
  1102.          JSR      _printf
  1103.          ADDQ.L   #$08,A7
  1104.  
  1105. U0026:
  1106.          MOVEM.L  (A7)+,D4-D7
  1107.          UNLK     A5
  1108.          RTS
  1109.  
  1110. ****************** _Proc1 **************************************
  1111. _Proc1:
  1112.          LINK      A5,#$0000
  1113.          MOVE.L    A2,-(A7)
  1114.  
  1115.          MOVEA.L   $08(A5),A2
  1116.  
  1117. ;#define   NextRecord   (*(PtrParIn->PtrComp))
  1118. ;   structassign(NextRecord, *PtrGlb);
  1119.  
  1120.          MOVEA.L   (A2),A0               ;
  1121.          MOVEA.L   $14CC(A4),A1          ;_PrtGlb = ($14CC,A4)
  1122.          MOVEQ.L   #$09,D0
  1123. P0102:
  1124.          MOVE.L    (A1)+,(A0)+
  1125.          DBRA      D0,P0102
  1126.  
  1127.          MOVE.W    (A1)+,(A0)+
  1128.  
  1129. ;   PtrParIn->IntComp = 5;
  1130.  
  1131.          MOVE.W    #$0005,$08(A2)
  1132.  
  1133. ;   NextRecord.IntComp = PtrParIn->IntComp;
  1134.  
  1135.          MOVEA.L   (A2),A0
  1136.          MOVE.W    $08(A2),$08(A0)
  1137.  
  1138. ;   NextRecord.PtrComp = PtrParIn->PtrComp;
  1139.  
  1140.          MOVEA.L   (A2),A0
  1141.          MOVE.L    (A2),(A0)
  1142.  
  1143. ;   Proc3(NextRecord.PtrComp);
  1144.  
  1145.          MOVEA.L   (A2),A0
  1146.          MOVE.L    (A0),-(A7)
  1147.          JSR       _Proc3
  1148.          ADDQ.L    #$04,A7
  1149.  
  1150. ;   if (NextRecord.Discr == Ident1)
  1151.  
  1152.          MOVEA.L   (A2),A0
  1153.          TST.W     $04(A0)
  1154.          BNE       P0104
  1155.  
  1156. ;      NextRecord.IntComp = 6;
  1157.  
  1158.          MOVEA.L   (A2),A0
  1159.          MOVE.W    #$0006,$08(A0)
  1160.  
  1161. ;      Proc6(PtrParIn->EnumComp, &NextRecord.EnumComp);
  1162.  
  1163.          MOVEA.L   (A2),A0
  1164.          ADDQ.L    #$06,A0
  1165.          MOVE.L    A0,-(A7)
  1166.          MOVE.W    $06(A2),-(A7)
  1167.          JSR       _Proc6
  1168.          ADDQ.L    #$06,A7
  1169.  
  1170. ;      NextRecord.PtrComp = PtrGlb->PtrComp;
  1171.  
  1172.          MOVEA.L   $14CC(A4),A0          ;_PtrGlb = ($14CC,A4)
  1173.          MOVEA.L   (A2),A1
  1174.          MOVE.L    (A0),(A1)
  1175.  
  1176. ;      Proc7(NextRecord.IntComp, 10, &NextRecord.IntComp);
  1177.  
  1178.          MOVEA.L   (A2),A0
  1179.          ADDQ.L    #$08,A0
  1180.          MOVE.L    A0,-(A7)
  1181.          MOVE.W    #$000A,-(A7)
  1182.  
  1183.          MOVEA.L   (A2),A0
  1184.          MOVE.W    $08(A0),-(A7)
  1185.          JSR       _Proc7
  1186.          ADDQ.L    #$08,A7
  1187.  
  1188.          BRA       P0108
  1189. P0104:
  1190.  
  1191. ;      structassign(*PtrParIn, NextRecord);
  1192.  
  1193.          MOVEA.L   A2,A0
  1194.          MOVEA.L   (A2),A1
  1195.          MOVEQ.L   #$09,D0
  1196. P0106:
  1197.          MOVE.L    (A1)+,(A0)+
  1198.          DBRA      D0,P0106
  1199.  
  1200.          MOVE.W    (A1)+,(A0)+
  1201. P0108:
  1202.          MOVE.L    (A7)+,A2
  1203.          UNLK      A5
  1204.          RTS
  1205.  
  1206.          DC.W     $0000
  1207.  
  1208. ****************** _Proc1 With _Proc7 Inlined ***************************
  1209. Proc1Opt00:
  1210.          MOVE.L   A2,-(A7)
  1211.  
  1212.          MOVEA.L  $08(A7),A2
  1213.  
  1214. ;#define   NextRecord   (*(PtrParIn->PtrComp))
  1215. ;   structassign(NextRecord, *PtrGlb);
  1216.  
  1217.          MOVEA.L  (A2),A0                ;
  1218.          MOVEA.L  $14CC(A4),A1           ;_PrtGlb = ($14CC,A4)
  1219.          MOVEQ.L  #$09,D0
  1220. Q0102:
  1221.          MOVE.L   (A1)+,(A0)+
  1222.          DBRA     D0,Q0102
  1223.  
  1224.          MOVE.W   (A1)+,(A0)+
  1225.  
  1226. ;   PtrParIn->IntComp = 5;
  1227.  
  1228.          MOVE.W   #$0005,$08(A2)
  1229.  
  1230. ;   NextRecord.IntComp = PtrParIn->IntComp;
  1231.  
  1232.          MOVEA.L  (A2),A0                 ;Reset A0
  1233.          MOVE.W   $08(A2),$08(A0)
  1234.  
  1235. ;   NextRecord.PtrComp = PtrParIn->PtrComp;
  1236.  
  1237.          MOVE.L   (A2),(A0)
  1238.  
  1239. ;   Proc3(NextRecord.PtrComp);            ;_Proc3 and _Proc7 Inlined.
  1240.  
  1241.          MOVEA.L  $14CC(A4),A0
  1242.          TST.L    $14CC(A4)
  1243.          BEQ.S    I0302
  1244.          MOVEA.L  (A0),A1
  1245.          MOVE.L   (A0),(A1)
  1246.          JMP      I0304
  1247. I0302:
  1248.          MOVE.W   #$0064,(A4)
  1249. I0304:
  1250.          ADDQ.L   #$08,A0
  1251.          MOVE.W   #$000C,D1
  1252.          MOVE.W   (A4),D0
  1253.          ADD.W    D1,D0
  1254.          MOVE.W   D0,(A0)
  1255.  
  1256. ;   if (NextRecord.Discr == Ident1)
  1257.  
  1258.          MOVEA.L  (A2),A0                 ;Reset A0 as Subr may/does alter
  1259.          TST.W    $04(A0)
  1260.          BNE.S    Q0104
  1261.  
  1262. ;      NextRecord.IntComp = 6;
  1263.  
  1264.          MOVE.W   #$0006,$08(A0)
  1265.  
  1266. ;      Proc6(PtrParIn->EnumComp, &NextRecord.EnumComp);
  1267.  
  1268.          ADDQ.L   #$06,A0
  1269.          MOVE.L   A0,-(A7)
  1270.          MOVE.W   $06(A2),-(A7)
  1271.          JSR      Proc6Opt00
  1272.          ADDQ.L   #$06,A7
  1273.  
  1274. ;      NextRecord.PtrComp = PtrGlb->PtrComp;
  1275.  
  1276.          MOVEA.L  $14CC(A4),A0            ;_PtrGlb = ($14CC,A4)
  1277.          MOVEA.L  (A2),A1
  1278.          MOVE.L   (A0),(A1)
  1279.  
  1280. ;      Proc7(NextRecord.IntComp, 10, &NextRecord.IntComp);
  1281.  
  1282.          MOVEA.L  (A2),A0                 ;_Proc7 Inlined!
  1283.          ADDQ.L   #$08,A0
  1284.  
  1285.          MOVEA.L  (A2),A1
  1286.          MOVE.W   $08(A1),D1
  1287.          ADDQ.W   #$02,D1
  1288.          MOVE.W   #$000A,D0
  1289.          ADD.W    D1,D0
  1290.          MOVE.W   D0,(A0)
  1291.          JMP      Q0108
  1292. Q0104:
  1293.  
  1294. ;      structassign(*PtrParIn, NextRecord);
  1295.  
  1296.          MOVEA.L  A2,A1
  1297.          MOVEQ.L  #$09,D0
  1298. Q0106:
  1299.          MOVE.L   (A0)+,(A1)+
  1300.          DBRA     D0,Q0106
  1301.  
  1302.          MOVE.W   (A0)+,(A1)+
  1303. Q0108:
  1304.          MOVE.L   (A7)+,A2
  1305.          RTS
  1306.  
  1307. ****************** _Proc2 *****************************************
  1308. _Proc2:
  1309.          LINK     A5,#$0000
  1310.          MOVEM.L  D4/D5,-(A7)
  1311.  
  1312. ;   IntLoc = *IntParIO + 10;
  1313.  
  1314.          MOVEA.L  $08(A5),A0
  1315.          MOVE.W   (A0),D4
  1316.          ADD.W    #$000A,D4              ;D4 = IntLoc
  1317.          MOVEQ.L  #$00,D5                ;Could be garbage otherwise.
  1318.  
  1319. ;   for(;;)
  1320.  
  1321. P0202:
  1322.  
  1323. ;      if (Char1Glob == 'A')
  1324.  
  1325.          CMPI.B   #$41,$0008(A4)         ;_Char1Glob = ($0008,A4)
  1326.          BNE      P0204
  1327.  
  1328.          SUBQ.W   #$01,D4                ;--IntLoc
  1329.  
  1330. ;         *IntParIO = IntLoc - IntGlob;
  1331.  
  1332.          MOVEA.L  $08(A5),A0
  1333.          MOVE.W   D4,D0
  1334.          SUB.W    $0000(A4),D0           ;_IntGlob
  1335.          MOVE.W   D0,(A0)
  1336.  
  1337. ;         EnumLoc = Ident1;
  1338.  
  1339.          MOVEQ.L  #$00,D5
  1340.  
  1341.  
  1342. ;      if (EnumLoc == Ident1)
  1343.  
  1344. P0204:
  1345.  
  1346. ;         break;
  1347.  
  1348.          TST.W    D5
  1349.          BEQ      P0206
  1350.  
  1351.          BRA      P0202
  1352. P0206:
  1353.          MOVEM.L  (A7)+,D4/D5
  1354.          UNLK     A5
  1355.          RTS
  1356.  
  1357. ****************** Optimized _Proc2 *************************************
  1358. Proc2Opt00:
  1359.          MOVEM.L  D4/D5,-(A7)
  1360.  
  1361. ;   IntLoc = *IntParIO + 10;
  1362.  
  1363.          MOVEA.L  $0C(A7),A0
  1364.          MOVE.W   (A0),D4
  1365.          ADD.W    #$000A,D4              ;D4 = IntLoc
  1366.          MOVEQ.L  #$00,D5                ;Could be garbage otherwise.
  1367.  
  1368. ;   for(;;)
  1369.  
  1370. Q0202:
  1371.  
  1372. ;      if (Char1Glob == 'A')
  1373.  
  1374.          CMPI.B   #$41,$0008(A4)         ;_Char1Glob = ($0008,A4)
  1375.          BNE.S    Q0204
  1376.  
  1377.          SUBQ.W   #$01,D4                ;--IntLoc
  1378.  
  1379. ;         *IntParIO = IntLoc - IntGlob;
  1380.  
  1381.          MOVE.W   D4,D0
  1382.          SUB.W    (A4),D0                ;_IntGlob
  1383.          MOVE.W   D0,(A0)
  1384.  
  1385. ;         EnumLoc = Ident1;
  1386.  
  1387.          MOVEQ.L  #$00,D5
  1388.  
  1389.  
  1390. ;      if (EnumLoc == Ident1)
  1391.  
  1392. Q0204:
  1393.  
  1394. ;         break;
  1395.  
  1396.          TST.W    D5
  1397.          BEQ.S    Q0206
  1398.          JMP      Q0202
  1399.  
  1400. Q0206:
  1401.          MOVEM.L  (A7)+,D4/D5
  1402.          RTS
  1403.  
  1404. ****************** _Proc3 *****************************************
  1405. _Proc3:
  1406.          LINK     A5,#$0000
  1407.  
  1408. ;   if (PtrGlb != NULL)
  1409. ;      *PtrParOut = PtrGlb->PtrComp;
  1410.  
  1411.          TST.L    $14CC(A4)
  1412.          BEQ      P0302
  1413.          MOVEA.L  $14CC(A4),A0          ;_PrtGlb = ($14CC,A4)
  1414.          MOVE.L   $08(A5),A1
  1415.          MOVE.L   (A0),(A1)
  1416.  
  1417.          BRA      P0304
  1418. P0302:
  1419.  
  1420.          MOVE.W   #$0064,$0000(A4)    ;_IntGlob
  1421. P0304:
  1422.  
  1423. ;   Proc7(10, IntGlob, &PtrGlb->IntComp);
  1424.  
  1425.          MOVEA.L  $14CC(A4),A0        ;_PrtGlb = ($9768,A4)
  1426.          ADDQ.L   #$08,A0
  1427.          MOVE.L   A0,-(A7)
  1428.          MOVE.W   $0000(A4),-(A7)     ;_IntGlob
  1429.          MOVE.W   #$0A,-(A7)
  1430.          JSR      _Proc7
  1431.          ADDQ.L   #$08,A7
  1432.  
  1433.          UNLK     A5
  1434.          RTS
  1435.  
  1436. ****************** _Proc4 ****************************************
  1437. ** This looks like it can be optimized to almost nothing
  1438. **
  1439. _Proc4:
  1440.          LINK      A5,#$0000
  1441.          MOVE.L    D4,-(A7)
  1442.  
  1443. ;   BoolLoc = Char1Glob == 'A';
  1444.                                         ;
  1445.          CMPI.B    #$41,$0008(A4)       ;_Char1Glob = ($82AE,A4)
  1446.          SEQ.B     D4
  1447.          AND.W     #$0001,D4
  1448.  
  1449. ;   BoolLoc |= BoolGlob;
  1450.                                         ;
  1451.          OR.W      $0004(A4),D4         ;_BoolGlob
  1452.  
  1453. ;   Char2Glob = 'B';
  1454.                                         ;
  1455.          MOVE.B    #$42,$000C(A4)       ;_Char2Glob = ($82AF,A4)
  1456.  
  1457.          MOVE.L    (A7)+,D4
  1458.          UNLK      A5
  1459.          RTS
  1460.  
  1461.  
  1462. ****************** _Proc5 ***************************************
  1463. _Proc5:
  1464.          LINK      A5,#$0000
  1465. ;   Char1Glob = 'A';
  1466.                                         ;
  1467.          MOVE.B    #$41,$0008(A4)       ;_Char1Glob = ($82AE,A4)
  1468.  
  1469. ;   BoolGlob = FALSE;
  1470.  
  1471.          CLR.W     $0004(A4)            ;_BoolGlob = ($82AC,A4)
  1472.          UNLK      A5
  1473.          RTS
  1474.  
  1475. ****************** _Proc6 *****************************************
  1476. _Proc6:
  1477.          LINK      A5,#$0000
  1478.          MOVEM.L   D4/A2,-(A7)
  1479.  
  1480.          MOVE.W    $08(A5),D4
  1481.          MOVE.L    $0A(A5),A2
  1482.  
  1483. ;   *EnumParOut = EnumParIn;
  1484.  
  1485.          MOVE.W    D4,(A2)
  1486.  
  1487. ;   if (! Func3(EnumParIn) )
  1488. ;      *EnumParOut = Ident4;
  1489.  
  1490.          MOVE.W    D4,-(A7)
  1491.          JSR       _Func3
  1492.          ADDQ.L    #$02,A7
  1493.  
  1494.          TST.W     D0
  1495.          BNE.S     P0602
  1496.  
  1497.          MOVE.W    #$0003,(A2)
  1498.  
  1499. ;   switch (EnumParIn)
  1500.  
  1501. P0602:
  1502.          MOVE.W    D4,D0
  1503.          EXT.L     D0
  1504.          BRA.S     P0620
  1505.  
  1506. ;   case Ident1:   *EnumParOut = Ident1; break;
  1507.  
  1508. P0604:
  1509.          CLR.W     (A2)
  1510.          BRA.S     P0624
  1511.  
  1512. ;   case Ident2:   if (IntGlob > 100) *EnumParOut = Ident1;
  1513.  
  1514. P0606:                                 ;
  1515.          CMPI.W    #$0064,$0000(A4)    ;_IntGlob
  1516.          BLE.S     P0608
  1517.  
  1518.          CLR.W     (A2)
  1519.  
  1520. ;         else *EnumParOut = Ident4;
  1521.  
  1522.          BRA.S     P0610
  1523. P0608:
  1524.          MOVE.W    #$0003,(A2)
  1525. P0610:
  1526.  
  1527. ;         break;
  1528.  
  1529.          BRA.S     P0624
  1530.  
  1531. ;   case Ident3:   *EnumParOut = Ident2; break;
  1532.  
  1533. P0612:
  1534.          MOVE.W    #$0001,(A2)
  1535.          BRA.S     P0624
  1536.  
  1537. ;   case Ident4:   break;
  1538.  
  1539. P0614:
  1540.          BRA.S     P0624
  1541.  
  1542. ;   case Ident5:   *EnumParOut = Ident3;
  1543.  
  1544. P0616:
  1545.          MOVE.W    #$0002,(A2)
  1546.  
  1547.          BRA.S     P0624
  1548. P0618:
  1549.  
  1550.          DC.W      $FFC2
  1551.          DC.W      $FFC6
  1552.          DC.W      $FFD8
  1553.          DC.W      $FFDE
  1554.          DC.W      $FFE0
  1555.  
  1556. P0620:
  1557.          CMP.L    #$5,D0
  1558.          BCC.S    P0624
  1559.  
  1560.          ASL.L    #$01,D0
  1561.          DC.W     $303B,$00EA
  1562. P0622:
  1563.          DC.W     $4EFB,$0000
  1564. P0624:
  1565.          MOVEM.L  (A7)+,D4/A2
  1566.          UNLK     A5
  1567.          RTS
  1568.  
  1569.          DC.W     $0000
  1570.  
  1571. ****************** _Proc6 With _Func3 Inlined ***************************
  1572. Proc6Opt00:
  1573.          MOVEM.L  D4/A2,-(A7)
  1574.  
  1575.          MOVE.W   $0C(A7),D4
  1576.          MOVE.L   $0E(A7),A2
  1577.  
  1578. ;   *EnumParOut = EnumParIn;
  1579.  
  1580.          MOVE.W   D4,(A2)
  1581.  
  1582. ;   if (! Func3(EnumParIn) )
  1583. ;      *EnumParOut = Ident4;
  1584.  
  1585.          CMPI.W   #$0002,D4            ;_Func3 Inlined and Optimized!
  1586.          BNE      R0602
  1587.          MOVEQ.L  #$01,D0
  1588.          JMP      R0604
  1589. R0602:
  1590.          MOVEQ.L  #$00,D0
  1591. R0604:
  1592.          TST.W    D0
  1593.          BNE.S    Q0602
  1594.  
  1595.          MOVE.W   #$0003,(A2)
  1596.  
  1597. ;   switch (EnumParIn)
  1598.  
  1599. Q0602:
  1600.          MOVE.W   D4,D0
  1601.          EXT.L    D0
  1602.          BRA.S    Q0620
  1603.  
  1604. ;   case Ident1:   *EnumParOut = Ident1; break;
  1605.  
  1606. Q0604:
  1607.          CLR.W    (A2)
  1608.          BRA.S    Q0624
  1609.  
  1610. ;   case Ident2:   if (IntGlob > 100) *EnumParOut = Ident1;
  1611.  
  1612. Q0606:                                 ;
  1613.          CMPI.W   #$0064,(A4)          ;_IntGlob
  1614.          BLE.S    Q0608
  1615.  
  1616.          CLR.W    (A2)
  1617.  
  1618. ;         else *EnumParOut = Ident4;
  1619.  
  1620.          BRA.S    Q0610
  1621. Q0608:
  1622.          MOVE.W   #$0003,(A2)
  1623. Q0610:
  1624.  
  1625. ;         break;
  1626.  
  1627.          BRA.S    Q0624
  1628.  
  1629. ;   case Ident3:   *EnumParOut = Ident2; break;
  1630.  
  1631. Q0612:
  1632.          MOVE.W   #$0001,(A2)
  1633.          BRA.S    Q0624
  1634.  
  1635. ;   case Ident4:   break;
  1636.  
  1637. Q0614:
  1638.          BRA.S    Q0624
  1639.  
  1640. ;   case Ident5:   *EnumParOut = Ident3;
  1641.  
  1642. Q0616:
  1643.          MOVE.W   #$0002,(A2)
  1644.  
  1645.          BRA.S    Q0624
  1646. Q0618:
  1647.  
  1648.          DC.W     $FFC2
  1649.          DC.W     $FFC6
  1650.          DC.W     $FFD8
  1651.          DC.W     $FFDE
  1652.          DC.W     $FFE0
  1653.  
  1654. Q0620:
  1655.          CMP.L    #$5,D0
  1656.          BCC.S    Q0624
  1657.  
  1658.          ASL.L    #$01,D0
  1659.          DC.W     $303B,$00EA
  1660. Q0622:
  1661.          DC.W     $4EFB,$0000
  1662. Q0624:
  1663.          MOVEM.L  (A7)+,D4/A2
  1664.          RTS
  1665.  
  1666.  
  1667. ****************** _Proc7 ***************************************
  1668. _Proc7:
  1669.          LINK     A5,#$0000
  1670.          MOVE.L   D4,-(A7)
  1671.  
  1672. ;   IntLoc = IntParI1 + 2;
  1673.  
  1674.          MOVE.W   $08(A5),D4
  1675.          ADDQ.W   #$02,D4
  1676.  
  1677. ;   *IntParOut = IntParI2 + IntLoc;
  1678.  
  1679.          MOVEA.L  $0C(A5),A0
  1680.          MOVE.W   $0A(A5),D0
  1681.          ADD.W    D4,D0
  1682.          MOVE.W   D0,(A0)
  1683.  
  1684.          MOVE.L   (A7)+,D4
  1685.          UNLK     A5
  1686.          RTS
  1687.  
  1688.  
  1689. ****************** Std 68000 _Proc8 *************************************
  1690. _Proc8:
  1691.          LINK     A5,#$0000
  1692.          MOVEM.L  D4/D5,-(A7)
  1693.  
  1694. ;   IntLoc = IntParI1 + 5;
  1695.  
  1696.          MOVE.W   $10(A5),D4
  1697.          ADDQ.W   #$05,D4
  1698.  
  1699. ;   Array1Par[IntLoc] = IntParI2;
  1700.  
  1701.          MOVE.W   D4,D0
  1702.          EXT.L    D0
  1703.          ASL.L    #$01,D0
  1704.  
  1705.          MOVE.L   $08(A5),A0
  1706.          MOVE.W   $12(A5),$00(A0,D0.L)
  1707.  
  1708. ;   Array1Par[IntLoc+1] = Array1Par[IntLoc];
  1709.  
  1710.          MOVE.W   D4,D0
  1711.          EXT.L    D0
  1712.          ASL.L    #$01,D0
  1713.  
  1714.          MOVE.L   $08(A5),A0
  1715.          MOVE.W   D4,D1
  1716.          ADDQ.W   #$01,D1
  1717.          EXT.L    D1
  1718.          ASL.L    #$01,D1
  1719.          MOVE.L   $08(A5),A1
  1720.          MOVE.W   $00(A0,D0.L),$00(A1,D1.L)
  1721.  
  1722. ;   Array1Par[IntLoc+30] = IntLoc;
  1723.  
  1724.          MOVE.W   D4,D0
  1725.          ADD.W    #$001E,D0
  1726.  
  1727.          EXT.L    D0
  1728.          ASL.L    #$01,D0
  1729.          MOVE.L   $08(A5),A0
  1730.          MOVE.W   D4,$00(A0,D0.L)
  1731.  
  1732. ;   for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
  1733.  
  1734.          MOVE.W   D4,D5
  1735.          BRA      P0804
  1736. P0802:
  1737.  
  1738. ;      Array2Par[IntLoc][IntIndex] = IntLoc;
  1739.  
  1740.          MOVE.W   D4,D0
  1741.          MULS.W   #$66,D0
  1742.          MOVE.W   D5,D1
  1743.          EXT.L    D1
  1744.          ASL.L    #$01,D1
  1745.          ADD.L    D1,D0
  1746.          MOVE.L   $0C(A5),A0
  1747.          MOVE.W   D4,$00(A0,D0.L)
  1748.  
  1749.          ADDQ.W   #$01,D5
  1750. P0804:
  1751.          MOVE.W   D4,D0
  1752.          ADDQ.W   #$01,D0
  1753.          CMP.W    D0,D5
  1754.          BLE      P0802
  1755.  
  1756. ;   ++Array2Par[IntLoc][IntLoc-1];
  1757.          
  1758.          MOVE.W   D4,D0
  1759.          MULS.W   #$66,D0
  1760.          MOVE.W   D4,D1
  1761.          SUBQ.W   #$01,D1
  1762.          EXT.L    D1
  1763.          ASL.L    #$01,D1
  1764.          ADD.L    D1,D0
  1765.          MOVEA.L  $0C(A5),A0
  1766.          ADD.W    #$01,$00(A0,D0.L)
  1767.  
  1768. ;   Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
  1769.  
  1770.          MOVE.W   D4,D0
  1771.          EXT.L    D0
  1772.          ASL.L    #$01,D0
  1773.  
  1774.          MOVE.L   $08(A5),A0
  1775.          MOVE.W   D4,D1
  1776.          ADD.W    #$14,D1
  1777.          MULS.W   #$66,D1
  1778.  
  1779.          MOVE.W   D4,D2
  1780.          EXT.L    D2
  1781.          ASL.L    #$01,D2
  1782.          ADD.L    D2,D1
  1783.          MOVE.L   $0C(A5),A1
  1784.          MOVE.W   $00(A0,D0.L),$00(A1,D1.L)
  1785.  
  1786. ;   IntGlob = 5;
  1787.  
  1788.          MOVE.W   #$05,$0000(A4)     ;_IntGlob
  1789.  
  1790.          MOVEM.L  (A7)+,D4/D5
  1791.          UNLK     A5
  1792.          RTS
  1793.  
  1794. ****************** Standard 68020 Proc8 *********************************
  1795. Proc8Opt20:
  1796.          MOVEM.L  D4/D5,-(A7)
  1797.  
  1798. ;   IntLoc = IntParI1 + 5;
  1799.  
  1800.          MOVE.W   $14(A7),D4
  1801.          ADDQ.W   #$05,D4
  1802.  
  1803. ;   Array1Par[IntLoc] = IntParI2;
  1804.  
  1805.          MOVEA.L  $0C(A7),A0
  1806.          MOVEA.L  $10(A7),A1
  1807.          DC.W     $31AD,$0012,$4200
  1808.  
  1809. ;   Array1Par[IntLoc+1] = Array1Par[IntLoc];
  1810.  
  1811.          MOVE.W   D4,D0
  1812.  
  1813.          ADDQ.W   #$01,D0
  1814.          DC.W     $31B0,$4200,$0200
  1815.  
  1816. ;   Array1Par[IntLoc+30] = IntLoc;
  1817.  
  1818.          MOVE.W   D4,D0
  1819.          ADD.W    #$001E,D0
  1820.  
  1821.          DC.W     $3184,$0200
  1822.  
  1823. ;   for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
  1824.  
  1825.          MOVE.W   D4,D5
  1826.          JMP      P0904
  1827. P0902:
  1828.  
  1829. ;      Array2Par[IntLoc][IntIndex] = IntLoc;
  1830.  
  1831.          MOVE.W   D4,D0
  1832.          MULS.W   #$66,D0
  1833.          MOVE.W   D5,D1
  1834.          EXT.L    D1
  1835.          ASL.L    #$01,D1
  1836.          ADD.L    D1,D0
  1837.          MOVE.W   D4,$00(A1,D0.L)
  1838.  
  1839.          ADDQ.W   #$01,D5
  1840. P0904:
  1841.          MOVE.W   D4,D0
  1842.          ADDQ.W   #$01,D0
  1843.          CMP.W    D0,D5
  1844.          BLE.S    P0902
  1845.  
  1846. ;   ++Array2Par[IntLoc][IntLoc-1];
  1847.          
  1848.          MOVE.W   D4,D0
  1849.          MULS.W   #$66,D0
  1850.          MOVE.W   D4,D1
  1851.          SUBQ.W   #$01,D1
  1852.          EXT.L    D1
  1853.          ASL.L    #$01,D1
  1854.          ADD.L    D1,D0
  1855.          ADD.W    #$01,$00(A1,D0.L)
  1856.  
  1857. ;   Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
  1858.  
  1859.          MOVE.W   D4,D0
  1860.          ADD.W    #$0014,D0
  1861.          MULS.W   #$0066,D0
  1862.  
  1863.          MOVE.W   D4,D1
  1864.          EXT.L    D1
  1865.          ASL.L    #$01,D1
  1866.          ADD.L    D1,D0
  1867.          DC.W     $33B0,$4200,$0800
  1868.  
  1869. ;   IntGlob = 5;
  1870.  
  1871.          MOVE.W   #$05,(A4)            ;_IntGlob
  1872.  
  1873.          MOVEM.L  (A7)+,D4/D5
  1874.          RTS
  1875.  
  1876. ****************** Optimized 68000 _Proc8 *******************************
  1877. Proc8Opt00:
  1878.          MOVEM.L  D4/D5,-(A7)
  1879.  
  1880. ;   IntLoc = IntParI1 + 5;
  1881.  
  1882.          MOVE.W   $14(A7),D4
  1883.          ADDQ.W   #$0005,D4
  1884.  
  1885. ;   Array1Par[IntLoc] = IntParI2;
  1886.  
  1887.          MOVE.W   D4,D0
  1888.          EXT.L    D0
  1889.          ASL.L    #$01,D0
  1890.  
  1891.          MOVEA.L  $0C(A7),A0
  1892.          MOVEA.L  $10(A7),A1
  1893.          MOVE.W   $16(A7),$00(A0,D0.L)
  1894.  
  1895. ;   Array1Par[IntLoc+1] = Array1Par[IntLoc];
  1896.  
  1897.          MOVE.W   D4,D0
  1898.          EXT.L    D0
  1899.          ASL.L    #$01,D0
  1900.  
  1901.          MOVE.W   D4,D1
  1902.          ADDQ.W   #$01,D1
  1903.          EXT.L    D1
  1904.          ASL.L    #$01,D1
  1905.          MOVE.W   $00(A0,D0.L),$00(A0,D1.L)
  1906.  
  1907. ;   Array1Par[IntLoc+30] = IntLoc;
  1908.  
  1909.          MOVE.W   D4,D0
  1910.          ADD.W    #$001E,D0
  1911.  
  1912.          EXT.L    D0
  1913.          ASL.L    #$01,D0
  1914.          MOVE.W   D4,$00(A0,D0.L)
  1915.  
  1916. ;   for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
  1917.  
  1918.          MOVE.W   D4,D5
  1919.          JMP      P1004
  1920. P1002:
  1921.  
  1922. ;      Array2Par[IntLoc][IntIndex] = IntLoc;
  1923.  
  1924.          MOVE.W   D4,D0
  1925.          MULS.W   #$0066,D0
  1926.          MOVE.W   D5,D1
  1927.          EXT.L    D1
  1928.          ASL.L    #$01,D1
  1929.          ADD.L    D1,D0
  1930.          MOVE.W   D4,$00(A1,D0.L)
  1931.  
  1932.          ADDQ.W   #$01,D5
  1933. P1004:
  1934.          MOVE.W   D4,D0
  1935.          ADDQ.W   #$01,D0
  1936.          CMP.W    D0,D5
  1937.          BLE      P1002
  1938.  
  1939. ;   ++Array2Par[IntLoc][IntLoc-1];
  1940.          
  1941.          MOVE.W   D4,D0
  1942.          MULS.W   #$0066,D0
  1943.          MOVE.W   D4,D1
  1944.          SUBQ.W   #$01,D1
  1945.          EXT.L    D1
  1946.          ASL.L    #$01,D1
  1947.          ADD.L    D1,D0
  1948.          ADD.W    #$0001,$00(A1,D0.L)
  1949.  
  1950. ;   Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
  1951.  
  1952.          MOVE.W   D4,D0
  1953.          EXT.L    D0
  1954.          ASL.L    #$01,D0
  1955.  
  1956.          MOVE.W   D4,D1
  1957.          ADD.W    #$0014,D1
  1958.          MULS.W   #$0066,D1
  1959.  
  1960.          MOVE.W   D4,D2
  1961.          EXT.L    D2
  1962.          ASL.L    #$01,D2
  1963.          ADD.L    D2,D1
  1964.          MOVE.W   $00(A0,D0.L),$00(A1,D1.L)
  1965.  
  1966. ;   IntGlob = 5;
  1967.  
  1968.          MOVE.W   #$05,(A4)          ;_IntGlob
  1969.  
  1970.          MOVEM.L  (A7)+,D4/D5
  1971.          RTS
  1972.  
  1973. ****************** _Func1 ******************************************
  1974. _Func1:
  1975.          LINK     A5,#$0000
  1976.          MOVEM.L  D4/D5,-(A7)
  1977.  
  1978. ;   CharLoc1 = CharPar1;
  1979.  
  1980.          MOVE.B   $09(A5),D4
  1981.  
  1982. ;   CharLoc2 = CharLoc1;
  1983.  
  1984.          MOVE.B   D4,D5
  1985.  
  1986. ;   if (CharLoc2 != CharPar2)
  1987. ;      return (Ident1);
  1988.  
  1989.          CMP.B    $0B(A5),D5
  1990.          BEQ      F0104
  1991.  
  1992.          MOVEQ.L  #$00,D0
  1993. F0102:
  1994.          MOVEM.L  (A7)+,D4/D5
  1995.          UNLK     A5
  1996.          RTS
  1997.  
  1998. F0104:
  1999.  
  2000. ;      return (Ident2);
  2001.  
  2002.          MOVEQ.L  #$01,D0
  2003.          BRA      F0102
  2004.  
  2005.  
  2006. ****************** _Func2 ***************************************
  2007. _Func2:
  2008.          LINK     A5,#$0000
  2009.          MOVEM.L  D4/D5,-(A7)
  2010.  
  2011. ;   IntLoc = 1;
  2012.  
  2013.          MOVEQ.L  #$01,D4
  2014.  
  2015. ;   while (IntLoc <= 1)
  2016.  
  2017. F0202:
  2018.          CMPI.W   #$0001,D4
  2019.          BGT      F0206
  2020.  
  2021. ;      if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1)
  2022.  
  2023.          MOVE.W   D4,D0
  2024.          ADDQ.W   #$01,D0
  2025.          MOVEA.L  $0C(A5),A0
  2026.          MOVE.B   $00(A0,D0.W),D1
  2027.          EXT.W    D1
  2028.          MOVE.W   D1,-(A7)
  2029.          MOVEA.L  $08(A5),A0
  2030.          MOVE.B   $00(A0,D4.W),D0
  2031.          EXT.W    D0
  2032.  
  2033.          MOVE.W   D0,-(A7)
  2034.          JSR      _Func1
  2035.          ADDQ.L   #$04,A7
  2036.  
  2037.          TST.W    D0
  2038.          BNE      F0204
  2039.  
  2040. ;         CharLoc = 'A';
  2041.  
  2042.          MOVEQ.L  #$41,D5
  2043.  
  2044. ;         ++IntLoc;
  2045.  
  2046.          ADDQ.W   #$01,D4
  2047.  
  2048.  
  2049. ;   if (CharLoc >= 'W' && CharLoc <= 'Z')
  2050.  
  2051. F0204:
  2052.          BRA      F0202
  2053. F0206:
  2054.  
  2055. ;      IntLoc = 7;
  2056.  
  2057.          CMPI.B   #$57,D5
  2058.          BLT      F0208
  2059.          CMPI.B   #$5A,D5
  2060.          BGT      F0208
  2061.          MOVEQ.L  #$07,D4
  2062.  
  2063. ;   if (CharLoc == 'X')
  2064.  
  2065. F0208:
  2066.  
  2067. ;      return(TRUE);
  2068.  
  2069.          CMPI.B   #$58,D5
  2070.          BNE      F0212
  2071.          MOVEQ.L  #$01,D0
  2072. F0210:
  2073.          MOVEM.L  (A7)+,D4/D5
  2074.          UNLK     A5
  2075.          RTS
  2076.  
  2077.  
  2078. F0212:
  2079.  
  2080. ;      if (strcmp(StrParI1, StrParI2) > 0)
  2081.  
  2082.          MOVE.L   $0C(A5),-(A7)
  2083.          MOVE.L   $08(A5),-(A7)
  2084.          JSR      _strcmp
  2085.          ADDQ.L   #$08,A7
  2086.          TST.W    D0
  2087.          BLE      F0214
  2088.  
  2089. ;         IntLoc += 7;
  2090.  
  2091.          ADDQ.W   #$07,D4
  2092.  
  2093. ;         return (TRUE);
  2094.  
  2095.          MOVEQ.L  #$01,D0
  2096.          BRA      F0210
  2097.  
  2098. F0214:
  2099.  
  2100. ;         return (FALSE);
  2101.  
  2102.          MOVEQ.L  #$00,D0
  2103.          BRA      F0210
  2104.  
  2105.  
  2106. ****************** _Func3 ****************************************
  2107. _Func3:
  2108.          LINK     A5,#$0000
  2109.          MOVEM.L  D4/D5,-(A7)
  2110.  
  2111.          MOVE.W   $08(A5),D4
  2112.  
  2113. ;   EnumLoc = EnumParIn;
  2114.  
  2115.          MOVE.W   D4,D5
  2116.  
  2117. ;   if (EnumLoc == Ident3) return (TRUE);
  2118.  
  2119.          CMPI.W   #$0002,D5
  2120.          BNE      F0304
  2121.  
  2122.          MOVEQ.L  #$01,D0
  2123. F0302:
  2124.          MOVEM.L  (A7)+,D4/D5
  2125.          UNLK     A5
  2126.          RTS
  2127.  
  2128. ;   return (FALSE);
  2129.  
  2130. F0304:
  2131.          MOVEQ.L  #$00,D0
  2132.          BRA      F0302
  2133.  
  2134.          DC.W     $0000
  2135.  
  2136. ****************** _Func2 With _Func1 and _strcmp Inlined ***************
  2137. Func2Opt00:
  2138.          MOVEM.L  D4/D5,-(A7)
  2139.  
  2140. ;   IntLoc = 1;
  2141.  
  2142.          MOVEQ.L  #$01,D4
  2143.  
  2144. ;   while (IntLoc <= 1)
  2145.  
  2146. F0402:
  2147.          CMPI.W   #$0001,D4
  2148.          BGT.S    F0406
  2149.  
  2150. ;      if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1)
  2151.  
  2152.          MOVE.W   D4,D0
  2153.          ADDQ.W   #$01,D0
  2154.          MOVEA.L  $10(A7),A0
  2155.          MOVE.B   $00(A0,D0.W),D1
  2156.          EXT.W    D1
  2157.  
  2158.          MOVEA.L  $0C(A7),A0
  2159.          MOVE.B   $00(A0,D4.W),D0
  2160.          EXT.W    D0
  2161.  
  2162.          CMP.B    D1,D0                ;_Func1 Inlined and Optimized.
  2163.          BEQ.S    G0402
  2164.          MOVEQ.L  #$00,D0
  2165.          JMP      G0404
  2166. G0402:
  2167.          MOVEQ.L  #$01,D0
  2168. G0404:
  2169.          TST.W     D0
  2170.          BNE.S    F0404
  2171.  
  2172. ;         CharLoc = 'A';
  2173.  
  2174.          MOVEQ.L  #$41,D5
  2175.  
  2176. ;         ++IntLoc;
  2177.  
  2178.          ADDQ.W   #$01,D4
  2179.  
  2180.  
  2181. ;   if (CharLoc >= 'W' && CharLoc <= 'Z')
  2182.  
  2183. F0404:
  2184.          JMP      F0402
  2185. F0406:
  2186.  
  2187. ;      IntLoc = 7;
  2188.  
  2189.          CMPI.B   #$57,D5
  2190.          BLT.S    F0408
  2191.          CMPI.B   #$5A,D5
  2192.          BGT.S    F0408
  2193.          MOVEQ.L  #$07,D4
  2194.  
  2195. ;   if (CharLoc == 'X')
  2196.  
  2197. F0408:
  2198.  
  2199. ;      return(TRUE);
  2200.  
  2201.          CMPI.B   #$58,D5
  2202.          BNE.S    F0412
  2203.          MOVEQ.L  #$01,D0
  2204. F0410:
  2205.          MOVEM.L  (A7)+,D4/D5
  2206.          RTS
  2207. F0412:
  2208.  
  2209. ;      if (strcmp(StrParI1, StrParI2) > 0)
  2210.  
  2211.  
  2212.          MOVE.W   #$7FFF,D0
  2213. G0406:
  2214.          SUBQ.W   #$01,D0
  2215.          BMI.S    G0410
  2216.  
  2217.          MOVEA.L  $0C(A7),A0
  2218.          MOVEA.L  $10(A7),A1
  2219. G0408:
  2220.          CMPM.B   (A1)+,(A0)+
  2221.          BNE.S    G0412
  2222.  
  2223.          SUBQ.W   #$01,A0
  2224.          TST.B    (A0)+
  2225.          DBEQ     D0,G0408
  2226. G0410:
  2227.          MOVEQ.L  #$00,D0
  2228.          MOVEM.L  (A7)+,D4/D5
  2229.          RTS
  2230. G0412:
  2231.          BLS.S    F0414
  2232.          MOVEQ.L  #$01,D0
  2233. G0418:
  2234. ;         IntLoc += 7;
  2235.  
  2236.          ADDQ.W   #$07,D4
  2237.  
  2238. ;         return (TRUE);
  2239.  
  2240.          MOVEQ.L  #$01,D0
  2241.          MOVEM.L  (A7)+,D4/D5
  2242.          RTS
  2243. F0414:
  2244. ;         return (FALSE);
  2245.  
  2246.          MOVEQ.L  #$00,D0
  2247.          MOVEM.L  (A7)+,D4/D5
  2248.          RTS
  2249.  
  2250. ****************** _dtime ****************************************
  2251. _dtime:
  2252.          LINK      A5,#-$000C
  2253.  
  2254.          PEA.L     -$0C(A5)
  2255.          JSR       DTG
  2256.          ADDQ.L    #$04,A7
  2257.  
  2258. ;   return (tt.ticks + (tt.minutes * 60L * 50L));
  2259.  
  2260.          MOVE.L    #$00000BB8,D1
  2261.          MOVE.L    -$08(A5),D0
  2262.          JSR       LMulu
  2263.          ADD.L     -$04(A5),D0
  2264.  
  2265.          UNLK      A5
  2266.          RTS
  2267.  
  2268. ****************** AmigaDOS DateStamp ********************************
  2269. DTG:
  2270.          MOVE.L    $04(A7),D1
  2271.          MOVEA.L   _DOSBase,A6
  2272.          JMP       _LVODateStamp(A6)
  2273.  
  2274. ****************** _strcpy *******************************************
  2275. _strcpy:
  2276.          MOVE.L    $04(A7),A0
  2277.          MOVE.L    A0,D0
  2278.          MOVE.L    $08(A7),A1
  2279.  
  2280. S0102:   MOVE.B    (A1)+,(A0)+
  2281.          BNE       S0102
  2282.          RTS
  2283.  
  2284. ****************** _strcmp *******************************************
  2285. _strcmp:
  2286.          MOVE.W    #$7FFF,D0
  2287.          BRA       S0202
  2288.  
  2289.          MOVE.W    $0C(A7),D0
  2290. S0202:
  2291.          SUBQ.W    #$01,D0
  2292.          BMI       S0206
  2293.  
  2294.          MOVEA.L   $04(A7),A0
  2295.          MOVEA.L   $08(A7),A1
  2296. S0204:
  2297.          CMPM.B    (A1)+,(A0)+
  2298.          BNE       S0208
  2299.  
  2300.          SUBQ.W    #$01,A0
  2301.          TST.B     (A0)+
  2302.          DBEQ      D0,S0204
  2303. S0206:
  2304.          MOVEQ.L   #$00,D0
  2305.          RTS
  2306.  
  2307. S0208:
  2308.          BLS       S0210
  2309.          MOVEQ.L   #$01,D0
  2310.          RTS
  2311.  
  2312. S0210:   MOVEQ.L   #-$01,D0
  2313.          RTS
  2314.  
  2315. ************************ _printf ****************************************
  2316. _printf:
  2317.          MOVEM.L  D1-D3/A0-A3/A6,-(A7)
  2318.          MOVEA.L  $24(A7),A0
  2319.          LEA.L    $28(A7),A1
  2320.          LEA.L    S0303,A2
  2321.  
  2322.          LEA.L    -$200(A7),A7
  2323.          MOVEA.L  A7,A3
  2324.  
  2325.          MOVEA.L  _SysBase,A6
  2326.          JSR      _LVORawDoFmt(A6)
  2327.  
  2328.          MOVEQ.L  #-$01,D0
  2329. S0301:   TST.B    (A3)+
  2330.          DBEQ     D0,S0301
  2331.  
  2332.          NOT.L    D0
  2333.          BEQ      S0302
  2334.  
  2335.          MOVE.L   _stdout,D1
  2336.          MOVE.L   A7,D2
  2337.          MOVE.L   D0,D3
  2338.          MOVEA.L  _DOSBase,A6
  2339.          JSR      _LVOWrite(A6)
  2340.  
  2341. S0302:   LEA.L    $200(A7),A7
  2342.          MOVEM.L  (A7)+,D1-D3/A0-A3/A6
  2343.          RTS
  2344.  
  2345. S0303:   MOVE.B   D0,(A3)+
  2346.          RTS
  2347.  
  2348. ************************* Input Command *********************************
  2349. Command:
  2350.          MOVEM.L  D1-D3/A1-A6,-(A7)
  2351.          MOVE.L   crtFile,_stdout
  2352.  
  2353.          MOVE.L   A0,-(A7)
  2354.          JSR      _printf
  2355.          LEA.L    $04(A7),A7
  2356.  
  2357.          MOVEA.L  PrgCmdBuf,A0
  2358.          MOVEQ.L  #$4F,D1
  2359.  
  2360. S0401:   CLR.B    (A0)+
  2361.          SUBQ.L   #$01,D1
  2362.          BPL      S0401
  2363.  
  2364.          MOVEA.L  PrgCmdBuf,A0
  2365.          MOVE.L   _stdin,D1
  2366.          MOVE.L   A0,D2
  2367.          MOVEQ.L  #$50,D3
  2368.          MOVEA.L  _DOSBase,A6
  2369.          JSR      _LVORead(A6)
  2370.  
  2371.          MOVE.L   D0,PrgCmdLen
  2372.          MOVE.L   PrgCmdBuf,A0
  2373.  
  2374.          MOVEM.L  (A7)+,D1-D3/A1-A6
  2375.          RTS
  2376.  
  2377. ****************** FFP Float *****************************************
  2378. FFPFlt:
  2379.  
  2380.          RTS
  2381.  
  2382. ****************** FFP Divide ****************************************
  2383. FFPDiv:
  2384.  
  2385.          RTS
  2386.  
  2387. ****************** Long Signed Divide ***********************************
  2388. LDivs:
  2389.          MOVEM.L  D1/D4,-(A7)
  2390.          MOVEQ.L  #$00,D4
  2391.          TST.L    D0
  2392.          BPL.S    S0702
  2393.  
  2394.          NEG.L    D0
  2395.          ADDQ.W   #$01,D4
  2396. S0702:
  2397.          TST.L    D1
  2398.          BPL.S    S0704
  2399.          NEG.L    D1
  2400.          EORI.W   #$0001,D4
  2401. S0704:
  2402.          BSR      Div32
  2403.          TST.W    D4
  2404.          BEQ.S    S0706
  2405.          NEG.L    D0
  2406. S0706:
  2407.          MOVEM.L  (A7)+,D1/D4
  2408.          TST.L    D0
  2409.          RTS
  2410.  
  2411. ****************** Div32 *********************************************
  2412. Div32:
  2413.          MOVEM.L  D2/D3,-(A7)
  2414.          SWAP     D1
  2415.          TST.W    D1
  2416.          BNE.B    S0802
  2417.          SWAP     D1
  2418.          MOVE.W   D1,D3
  2419.          MOVE.W   D0,D2
  2420.          CLR.W    D0
  2421.          SWAP     D0
  2422.          DIVU.W   D3,D0
  2423.          MOVE.L   D0,D1
  2424.          SWAP     D0
  2425.          MOVE.W   D2,D1
  2426.          DIVU.W   D3,D1
  2427.          MOVE.W   D1,D0
  2428.          CLR.W    D1
  2429.          SWAP     D1
  2430.          MOVEM.L  (A7)+,D2/D3
  2431.          RTS
  2432.  
  2433. S0802:   SWAP     D1
  2434.          MOVE.L   D1,D3
  2435.          MOVE.L   D0,D1
  2436.          CLR.W    D1
  2437.          SWAP     D1
  2438.          SWAP     D0
  2439.          CLR.W    D0
  2440.          MOVEQ.L  #$0F,D2
  2441. S0804:
  2442.          ADD.L    D0,D0
  2443.          ADDX.L   D1,D1
  2444.          CMP.L    D1,D3
  2445.          BHI.S    S0806
  2446.          SUB.L    D3,D1
  2447.          ADDQ.W   #$01,D0
  2448. S0806:
  2449.          DBF      D2,S0804
  2450.  
  2451.          MOVEM.L  (A7)+,D2/D3
  2452.          RTS
  2453.  
  2454. ****************** Long Unsigned Multiply *******************************
  2455. LMulu:
  2456.          MOVEM.L  D1-D3,-(A7)
  2457.          MOVE.W   D1,D2
  2458.          MULU.W   D0,D2
  2459.          MOVE.L   D1,D3
  2460.          SWAP     D3
  2461.          MULU.W   D0,D3
  2462.          SWAP     D3
  2463.          CLR.W    D3
  2464.          ADD.L    D3,D2
  2465.          SWAP     D0
  2466.          MULU.W   D1,D0
  2467.          SWAP     D0
  2468.          CLR.W    D0
  2469.          ADD.L    D2,D0
  2470.          MOVEM.L  (A7)+,D1-D3
  2471.          RTS
  2472.  
  2473. ******************** Print CPU and FPU Types ****************************
  2474. PrtCPUFPU:
  2475.          MOVEM.L  D0/A0-A1,-(A7)
  2476.  
  2477.          MOVE.L   CPU_Type,D0
  2478.          LSL.L    #$03,D0
  2479.          LEA.L    STR501,A0
  2480.          ADDA.L   D0,A0
  2481.  
  2482.          MOVE.L   FPU_Type,D0
  2483.          LSL.L    #$03,D0
  2484.          LEA.L    STR502,A1
  2485.          ADDA.L   D0,A1
  2486.  
  2487.          MOVE.L   A1,-(A7)
  2488.          MOVE.L   A0,-(A7)
  2489.          PEA.L    STR500
  2490.          JSR      _printf
  2491.          LEA.L    $0C(A7),A7
  2492.  
  2493.          MOVEM.L  (A7)+,D0/A0-A1
  2494.          RTS
  2495.  
  2496. ******************** Print Cache Control Register Status ****************
  2497. Cache_Status:
  2498.          MOVE.L   CPU_Type,D0
  2499.          CMPI.W   #$0000,D0
  2500.          BEQ      S1160
  2501.          CMPI.W   #$0001,D0
  2502.          BEQ      S1170
  2503.  
  2504.          MOVE.L   #$00000002,D0     ;D0.W = CNTRL REG (GURU if not right)
  2505.          BSR      ReadCR            ;D0 Contains CACR Value.
  2506.  
  2507.          MOVE.L   D0,D4
  2508.  
  2509.          LEA.L    ITS_OFF,A1
  2510.          BTST.L   #$0000,D4
  2511.          BEQ      S1102
  2512.          LEA.L    ITS_ON,A1
  2513.  
  2514. S1102:   LEA.L    ICacheE,A2
  2515.          JSR      S1180
  2516.  
  2517.          LEA.L    ITS_OFF,A1
  2518.          BTST.L   #$0001,D4
  2519.          BEQ      S1104
  2520.          LEA.L    ITS_ON,A1
  2521.  
  2522. S1104:   LEA.L    ICacheF,A2
  2523.          JSR      S1180
  2524.  
  2525.          MOVE.L   CPU_Type,D0
  2526.          CMPI.W   #$0002,D0
  2527.          BEQ      S1150
  2528.  
  2529.          LEA.L    ITS_OFF,A1
  2530.          BTST.L   #$0004,D4
  2531.          BEQ      S1106
  2532.          LEA.L   ITS_ON,A1
  2533.  
  2534. S1106:   LEA.L    ICacheB,A2
  2535.          JSR      S1180
  2536.  
  2537.          LEA.L    ITS_OFF,A1
  2538.          BTST.L   #$0008,D4
  2539.          BEQ      S1108
  2540.          LEA.L    ITS_ON,A1
  2541.  
  2542. S1108:   LEA.L    DCacheE,A2
  2543.          JSR      S1180
  2544.  
  2545.          LEA.L    ITS_OFF,A1
  2546.          BTST.L   #$0009,D4
  2547.          BEQ      S1110
  2548.          LEA.L    ITS_ON,A1
  2549.  
  2550. S1110:   LEA.L    DCacheF,A2
  2551.          JSR      S1180
  2552.  
  2553.          LEA.L    ITS_OFF,A1
  2554.          BTST.L   #$000C,D4
  2555.          BEQ      S1112
  2556.          LEA.L    ITS_ON,A1
  2557.  
  2558. S1112:   LEA.L    DCacheB,A2
  2559.          JSR      S1180
  2560.  
  2561.          LEA.L    ITS_OFF,A1
  2562.          BTST.L   #$000D,D4
  2563.          BEQ      S1114
  2564.          LEA.L    ITS_ON,A1
  2565.  
  2566. S1114:   LEA.L    WriteAlloc,A2
  2567.          JSR      S1180
  2568.  
  2569. S1150:
  2570.          PEA.L    LineFeed
  2571.          JSR      _printf
  2572.          ADDQ.L   #$04,A7
  2573.          RTS
  2574.  
  2575. S1160:   LEA.L    STR117,A2
  2576.          JSR      PrintError
  2577.          RTS
  2578.  
  2579. S1170:   LEA.L    STR118,A2
  2580.          JSR      PrintError
  2581.          RTS
  2582.  
  2583. S1180:   MOVE.L   A1,-(A7)
  2584.          MOVE.L   A2,-(A7)
  2585.          JSR      _printf
  2586.          ADDQ.L   #$08,A7
  2587.          RTS
  2588.  
  2589. *************************************************************************
  2590. Write_To_CACR:
  2591.          MOVE.L   CPU_Type,D5
  2592.          CMPI.W   #$0000,D5
  2593.          BEQ      S1160
  2594.          CMPI.W   #$0001,D5
  2595.          BEQ      S1170
  2596.  
  2597.          MOVE.W   (A0),D2
  2598.  
  2599.          MOVEQ.L  #$00,D3
  2600.          MOVE.B   D2,D3
  2601.          ANDI.W   #$0001,D3
  2602.          ANDI.W   #$FF00,D2
  2603.  
  2604.          CMPI.W   #$3000,D2
  2605.          BEQ      S1202
  2606.          CMPI.W   #$3100,D2         ;ICache
  2607.          BEQ      S1204
  2608.          CMPI.W   #$3200,D2
  2609.          BEQ      S1206
  2610.          CMPI.W   #$3300,D2
  2611.          BEQ      S1208
  2612.          CMPI.W   #$3400,D2
  2613.          BEQ      S1210
  2614.          CMPI.W   #$3500,D2
  2615.          BEQ      S1212
  2616.          BRA      S1250
  2617.  
  2618. S1202:   MOVEQ.L  #$00,D0
  2619.          BRA      S1230
  2620. S1204:   MOVEQ.L  #$00,D4
  2621.          BRA      S1220
  2622. S1206:   MOVEQ.L  #$04,D4
  2623.          BRA      S1220
  2624. S1208:   MOVEQ.L  #$08,D4
  2625.          BRA      S1220
  2626. S1210:   MOVEQ.L  #$0C,D4
  2627.          BRA      S1220
  2628. S1212:   MOVEQ.L  #$0D,D4
  2629.  
  2630. S1220:
  2631.          MOVE.L   #$00000002,D0     ;D0.W = CNTRL REG (GURU if not right)
  2632.          BSR      ReadCR            ;D0 Contains Current CACR Value.
  2633.  
  2634.          BSET.L   #$0003,D0
  2635.          CMPI.W   #$0003,D5
  2636.          BNE      S1226
  2637.          BSET.L   #$000B,D0
  2638. S1226:
  2639.          TST.B    D3
  2640.          BNE      S1228
  2641.          BCLR.L   D4,D0
  2642.          BRA      S1230
  2643. S1228:   BSET.L   D4,D0
  2644.  
  2645. S1230:
  2646.          MOVE.L   #$00000002,D1     ;D1.W = CNTRL REG (GURU if not right)
  2647.          BSR      WriteCR
  2648. S1250:
  2649.          RTS
  2650.  
  2651. *************************************************************************
  2652. PrintError:
  2653.          MOVE.L   A2,-(A7)
  2654.          PEA.L    STR115
  2655.          JSR      _printf
  2656.          ADDQ.L   #$04,A7
  2657.          MOVEA.L  (A7)+,A2
  2658.          RTS
  2659.  
  2660. ******************** Control Registers **********************************
  2661. *** D0.W defines the Control Register (CR) to Read.
  2662. *** Result in D0.L
  2663. ReadCR:
  2664.          MOVEM.L  A5/A6,-(A7)
  2665.          MOVEA.L  _SysBase,A6
  2666.          JSR      _LVODisable(A6)
  2667.  
  2668.          LEA.L    XCode,A5
  2669.          MOVE.W   #$4E7A,$00(A5)    ;MOVEC.L CR,D0
  2670.          MOVE.W   D0,$02(A5)
  2671.          MOVE.W   #$4E73,$04(A5)    ;RTE
  2672.  
  2673.          MOVEA.L  _SysBase,A6
  2674.          JSR      _LVOSupervisor(A6)
  2675.  
  2676.          JSR      _LVOEnable(A6)
  2677.          MOVEM.L  (A7)+,A5/A6
  2678.          RTS
  2679.  
  2680. *************************************************************************
  2681. *** D1.W defines the Control Register (CR) to Write.
  2682. *** D0.L is the data to Write.
  2683. WriteCR:
  2684.          MOVEM.L  A5/A6,-(A7)
  2685.          MOVEA.L  _SysBase,A6
  2686.          JSR      _LVODisable(A6)
  2687.  
  2688.          LEA.L    XCode,A5
  2689.          MOVE.W   #$4E7B,$00(A5)    ;MOVEC.L D0,CR
  2690.          MOVE.W   D1,$02(A5)
  2691.          MOVE.W   #$4E73,$04(A5)    ;RTE
  2692.  
  2693.          MOVEA.L  _SysBase,A6
  2694.          JSR      _LVOSupervisor(A6)
  2695.  
  2696.          JSR      _LVOEnable(A6)
  2697.          MOVEM.L  (A7)+,A5/A6
  2698.          RTS
  2699.  
  2700. *************************************************************************
  2701. *** Result in D0.W
  2702. ReadSR:
  2703.          MOVEM.L  A5/A6,-(A7)
  2704.          LEA.L    XCode,A5
  2705.          MOVE.W   #$40C0,$00(A5)    ;MOVE.W SR,D0
  2706.          MOVE.W   #$4E73,$02(A5)    ;RTE
  2707.  
  2708.          MOVEA.L  _SysBase,A6
  2709.          JSR      _LVOSupervisor(A6)
  2710.  
  2711.          MOVEM.L  (A7)+,A5/A6
  2712.          RTS
  2713.  
  2714. ***********************************************************
  2715. *** D0.W defines the MMU Control Register (CR) to Read.
  2716. *** Result in (A0), where A0 --> XData.
  2717. ReadMMUCR:
  2718.          MOVEM.L  A5/A6,-(A7)
  2719.          MOVEA.L  _SysBase,A6
  2720.          JSR      _LVODisable(A6)
  2721.  
  2722.          LEA.L    XCode,A5
  2723.          LEA.L    XData,A0
  2724.          MOVE.W   #$F010,$00(A5)    ;PMOVE.SZ MMUCR,(A0)
  2725.          MOVE.W   D0,$02(A5)
  2726.          MOVE.W   #$4E73,$04(A5)    ;RTE
  2727.  
  2728.          MOVEA.L  _SysBase,A6
  2729.          JSR      _LVOSupervisor(A6)
  2730.  
  2731.          JSR      _LVOEnable(A6)
  2732.          MOVEM.L  (A7)+,A5/A6
  2733.          RTS
  2734.  
  2735. XCode:   DC.W     $0000,$0000
  2736.          DC.W     $0000,$0000
  2737.  
  2738. XData:   DC.W     $0000,$0000
  2739.          DC.W     $0000,$0000
  2740.          DC.W     $0000,$0000
  2741.  
  2742. ****************** CPU and FPU Types **********************
  2743. CPU_FPU_Type:
  2744.          MOVEM.L  D0/D1/A0/A6,-(A7)
  2745.          MOVEA.L  _SysBase,A6
  2746.          LEA.L    AttnFlags(A6),A0
  2747.          LEA.L    $01(A0),A0
  2748.  
  2749.          MOVEQ.L  #$00,D0
  2750.          MOVE.B   (A0),D0
  2751.  
  2752.          MOVE.L   D0,D1
  2753.          ANDI.B   #$0F,D1
  2754.          MOVE.L   D1,CPU_Type
  2755.  
  2756.          CMPI.B   #$03,D1
  2757.          BNE      S1402
  2758.          MOVE.L   #$00000002,CPU_Type
  2759.          BRA      S1404
  2760.  
  2761. S1402:   CMPI.B   #$07,D1
  2762.          BNE      S1404
  2763.          MOVE.L   #$00000003,CPU_Type
  2764.  
  2765. S1404:   MOVE.L   D0,D1
  2766.          ANDI.W   #$00F0,D1
  2767.          LSR.L    #$04,D1
  2768.          MOVE.L   D1,FPU_Type
  2769.  
  2770.          CMPI.B   #$03,D1
  2771.          BNE      S1406
  2772.          MOVE.L   #$00000002,FPU_Type
  2773.          BRA      S1408
  2774.  
  2775. S1406:   CMPI.B   #$07,D1
  2776.          BNE      S1408
  2777.          MOVE.L   #$00000003,FPU_Type
  2778.  
  2779. S1408:
  2780.          MOVEM.L  (A7)+,D0/D1/A0/A6
  2781.          RTS
  2782.  
  2783. ****************** Strings *******************************************
  2784.             CNOP  0,2
  2785. TaskName:   DC.B  'AmigaBench',$00
  2786.  
  2787.             CNOP  0,2
  2788. _TWspec:    DC.B  'CON:0/0/640/200/ AmigaBench',$00
  2789.  
  2790.             CNOP  0,2
  2791. Dump01      DC.B  '   Program Subroutine And Global Data Addresses:',$0A,$0A
  2792.             DC.B  '   _main:       $%08lx',$0A
  2793.             DC.B  '   Proc0Opt00:  $%08lx',$0A
  2794.             DC.B  $00
  2795.  
  2796.             CNOP  0,2
  2797. Dump02      DC.B  '   Proc0Opt20:  $%08lx',$0A
  2798.             DC.B  '   Proc1Opt00:  $%08lx',$0A
  2799.             DC.B  $00
  2800.  
  2801.             CNOP  0,2
  2802. Dump03      DC.B  '   Proc2Opt00:  $%08lx',$0A
  2803.             DC.B  '   Froc6Opt00:  $%08lx',$0A
  2804.             DC.B  $00
  2805.  
  2806.             CNOP  0,2
  2807. Dump04      DC.B  '   Proc8Opt20:  $%08lx',$0A
  2808.             DC.B  '   Proc8Opt00:  $%08lx',$0A
  2809.             DC.B  $00
  2810.  
  2811.             CNOP  0,2
  2812. Dump05      DC.B  '   Func2Opt00:  $%08lx',$0A
  2813.             DC.B  '   _A4Ref:      $%08lx',$0A
  2814.             DC.B  $0A,$00
  2815.  
  2816.             CNOP  0,2
  2817. PrtReg      DC.B  '   CACR = $%08lx',$0A,$00
  2818.  
  2819.             CNOP  0,2
  2820. CmdRepeat   DC.B  $0A,$0A
  2821.             DC.B  $9B,$30,$33,$41
  2822.             DC.B  $9B,$4A
  2823.             DC.B  $00
  2824.  
  2825.             CNOP  0,2
  2826. CmdPrompt   DC.B  'Command:> ',$00
  2827.  
  2828.             CNOP  0,2
  2829. EntPrompt   DC.B  'Enter Cache Command:> ',$00
  2830.  
  2831.             CNOP  0,2
  2832. LineFeed    DC.B  $0A
  2833.             DC.B  $00
  2834.  
  2835.             CNOP  0,2
  2836. Title       DC.B  $0C,$9B,$33,$33,$6D
  2837.             DC.B  '   ****<<<'
  2838.             DC.B  $9B,$37,$3B,$33,$31,$6D
  2839.             DC.B  ' Amiga Assembly Benchmark Programs, 03 Aug 1989, By ALA '
  2840.             DC.B  $9B,$30,$3B,$33,$33,$6D
  2841.             DC.B  '>>>****'
  2842.             DC.B  $9B,$33,$31,$6D
  2843.             DC.B  $0A,$0A,$00
  2844.  
  2845.             CNOP  0,2
  2846. ITS_OFF     DC.B  'OFF',$00
  2847.  
  2848.             CNOP  0,2
  2849. ITS_ON      DC.B  $9B,$33,$33,$6D
  2850.             DC.B  'ON '
  2851.             DC.B  $9B,$33,$31,$6D
  2852.             DC.B  $00
  2853.  
  2854.             CNOP  0,2
  2855. ICacheE     DC.B  '   Cache Status:',$0A,$0A
  2856.             DC.B  '   Instruction Cache:         %s',$0A,$00
  2857.  
  2858.             CNOP  0,2
  2859. ICacheF     DC.B  '   Freeze Instruction Cache:  %s',$0A,$00
  2860.  
  2861.             CNOP  0,2
  2862. ICacheB     DC.B  '   Instruction Burst:         %s',$0A,$00
  2863.  
  2864.             CNOP  0,2
  2865. DCacheE     DC.B  '   Data Cache:                %s',$0A,$00
  2866.  
  2867.             CNOP  0,2
  2868. DCacheF     DC.B  '   Freeze Data Cache:         %s',$0A,$00
  2869.  
  2870.             CNOP  0,2
  2871. DCacheB     DC.B  '   Data Burst:                %s',$0A,$00
  2872.  
  2873.             CNOP  0,2
  2874. WriteAlloc  DC.B  '   Write Allocate:            %s',$0A,$00
  2875.  
  2876.  
  2877.             CNOP  0,2
  2878. STR101      DC.B  $9B,$33,$33,$6D
  2879.             DC.B  '   Dhrystone Benchmark Program',$0A
  2880.             DC.B  $9B,$33,$31,$6D
  2881.             DC.B  $00
  2882.  
  2883.             CNOP  0,2
  2884. STR102      DC.B  '   Enter ',$27,' ?<cr> ',$27,' For Command List.'
  2885.             DC.B  $0A,$0A,$00
  2886.  
  2887.             CNOP  0,4
  2888.             DC.L  $00000000
  2889.  
  2890. STR103      DC.B  'DHRYSTONE PROGRAM, SOME STRING',$00
  2891.  
  2892.             CNOP  0,4
  2893.             DC.L  $00000000
  2894.  
  2895. STR104      DC.B  'DHRYSTONE PROGRAM, 2',$27,'ND STRING',$00
  2896.  
  2897.             CNOP  0,2
  2898. STR105      DC.B  $9B,$33,$33,$6D
  2899.             DC.B  '   BenchTime (50*Seconds) for %ld Passes ='
  2900.             DC.B  $9B,$33,$31,$6D
  2901.             DC.B  ' %ld '
  2902.             DC.B  $0A,$0A,$00
  2903.  
  2904.             CNOP  0,2
  2905. STR106      DC.B  $9B,$33,$33,$6D
  2906.             DC.B  '   This System Benchmarks at'
  2907.             DC.B  $9B,$33,$31,$6D
  2908.             DC.B  ' %ld '
  2909.             DC.B  $9B,$33,$33,$6D
  2910.             DC.B  'Dhrystones/sec.',$0A
  2911.             DC.B  $9B,$33,$31,$6D
  2912.             DC.B  $00
  2913.  
  2914.             CNOP  0,2
  2915. STR107:     DC.B  '   Standard  68000 Assembly Version.',$0A,$0A,$0A,$00
  2916.  
  2917.             CNOP  0,2
  2918. STR108:     DC.B  '   Optimized 68000 Assembly Version.',$0A,$0A,$0A,$00
  2919.  
  2920.             CNOP  0,2
  2921. STR109      DC.B  '   Optimized 68020 Assembly Version',$0A,$0A,$0A,$00
  2922.  
  2923.             CNOP  0,2
  2924. STR110      DC.B  '   Command List:',$0A,$0A
  2925.             DC.B  '   ?     ;This Command List',$0A
  2926.             DC.B  '   q     ;Quit',$0A
  2927.             DC.B  '   ca    ;Check Subr and Global Data Addresses.',$0A
  2928.             DC.B  '   cs    ;Cache Status.',$0A
  2929.             DC.B  '   wc    ;Write Cache.',$0A,$0A
  2930.             DC.B  '   1     ;Std 68000 Assembly Dhrystone',$0A
  2931.             DC.B  '   2     ;Opt 68000 Assembly Dhrystone',$0A
  2932.             DC.B  '   3     ;Opt 68020 Assembly Dhrystone',$0A
  2933.             DC.B  $00
  2934.  
  2935.             CNOP  0,2
  2936. STR115      DC.B  $9B,$30,$32,$41
  2937.             DC.B  $9B,$4A
  2938.             DC.B  $9B,$30,$3B,$33,$33,$6D
  2939.             DC.B  '   %s',$0A
  2940.             DC.B  $9B,$30,$3B,$33,$31,$6D
  2941.             DC.B  $00
  2942.  
  2943.             CNOP  0,2
  2944. STR116:     DC.B  'Error, 68000 and 68010 Can Not Run 68020 Code.',$00
  2945.  
  2946.             CNOP  0,2
  2947. STR117:     DC.B  'Error, The 68000 Has No Internal Cache.',$00
  2948.  
  2949.             CNOP  0,2
  2950. STR118:     DC.B  'Error, The 68010 Has No Internal Cache.',$00
  2951.  
  2952.             CNOP  0,2
  2953. STR119:     DC.B  '   Command:',$0A,$0A
  2954.             DC.B  '   0         ;Clear ALL Cache Bits.',$0A
  2955.             DC.B  '   11[0]     ;Instruction Cache ON[OFF].',$0A
  2956.             DC.B  '   21[0]     ;Instruction Burst ON[OFF].',$0A
  2957.             DC.B  '   31[0]     ;Data        Cache ON[OFF].',$0A
  2958.             DC.B  '   41[0]     ;Data        Burst ON[OFF].',$0A
  2959.             DC.B  '   51[0]     ;Write_Allocate    ON[OFF].',$0A
  2960.             DC.B  $00
  2961.  
  2962.             CNOP  0,2
  2963. STR120:     DC.B  $0A
  2964.             DC.B  '   E.G., 11 Turns ICache ON, 10 Turns ICache OFF',$0A
  2965.             DC.B  $0A,$00
  2966.  
  2967.             CNOP  0,2
  2968. STR500:     DC.B  $9B,$33,$33,$6D
  2969.             DC.B  '   CPU / FPU:  '
  2970.             DC.B  $9B,$33,$31,$6D
  2971.             DC.B  '%s/%s',$0A,$00
  2972.  
  2973. STR501:     DC.B  '68000',$00,$00,$00
  2974.             DC.B  '68010',$00,$00,$00
  2975.             DC.B  '68020',$00,$00,$00
  2976.             DC.B  '68030',$00,$00,$00
  2977.             DC.B  '68040',$00,$00,$00
  2978.             DC.B  '?????',$00,$00,$00
  2979.  
  2980. STR502:     DC.B  '-----',$00,$00,$00
  2981.             DC.B  '68881',$00,$00,$00
  2982.             DC.B  '68882',$00,$00,$00
  2983.             DC.B  '?????',$00,$00,$00
  2984.             DC.B  '?????',$00,$00,$00
  2985.             DC.B  '?????',$00,$00,$00
  2986.  
  2987. ****************** Fixed Constants ************************************
  2988.  
  2989. ThisTCB:    DS.L  $01
  2990. CPU_Type:   DS.L  $01
  2991. FPU_Type:   DS.L  $01
  2992. SaveA7:     DS.L  $01
  2993. crtFile:    DS.L  $01
  2994. PrgCmdBuf:  DS.L  $01
  2995. PrgCmdLen:  DS.L  $01
  2996.  
  2997. _A4Ref:
  2998. _IntGlb:    DS.B  $04               ;$0000
  2999.  
  3000. _BoolGlb:   DS.B  $04               ;$0004
  3001.  
  3002. _Char1Glb:  DS.B  $04               ;$0008
  3003.  
  3004. _Char2Glb:  DS.B  $04               ;$000C
  3005.  
  3006. _Array1Glb: DS.B  $68               ;$0010
  3007.  
  3008. _Array2Glb: DS.B  $1454             ;$0078
  3009.  
  3010. _PtrGlb:    DS.B  $04               ;$14CC
  3011.  
  3012. _PrtGlbNxt: DS.B  $04               ;$14D0
  3013.  
  3014. _Buffer:    DS.B  $140
  3015.  
  3016. Buf01:      DS.B  $30
  3017.  
  3018. Buf02:      DS.B  $30
  3019.  
  3020. ************************* Thats All Folks! *******************************
  3021.  
  3022.       END
  3023.