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 >
Wrap
Assembly Source File
|
1989-08-09
|
68KB
|
3,023 lines
*************************************
* Assembly Program: AmigaBench.asm *
* Al Aburto *
* 03 Aug 1989 *
* Must Link with TWStartup.o *
*************************************
INCLUDE "exec/types.i"
INCLUDE "exec/execbase.i"
INCLUDE "exec/nodes.i"
INCLUDE "exec/memory.i"
INCLUDE "libraries/dos.i"
INCLUDE "libraries/dosextens.i"
XREF _LVORawDoFmt
XREF _LVOForbid
XREF _LVOPermit
XREF _LVODisable
XREF _LVOEnable
XREF _LVOSupervisor
XREF _LVOOpen
XREF _LVOExamine
XREF _LVOClose
XREF _LVOWrite
XREF _LVORead
XREF _LVODateStamp
XREF _DOSBase
XREF _SysBase
XREF _stdin
XREF _stdout
XREF _stderr
XDEF _main
XDEF _TWspec
*************************************************************************
_main:
MOVE.L A7,SaveA7
MOVE.L A4,ThisTCB
MOVE.L #TaskName,LN_NAME(A4)
JSR CPU_FPU_Type
MOVE.L _stdout,crtFile ;Save _stdout File Handle.
LEA.L _Buffer,A0
MOVE.L A0,PrgCmdBuf
MOVEQ.L #$00,D0
M001: PEA.L Title ;Print Title.
JSR _printf
ADDQ.L #$04,A7
PEA.L STR102
JSR _printf
ADDQ.L #$04,A7
M004:
M005: LEA.L CmdPrompt,A0
BSR Command
CLR.B -$01(A0,D0.L) ;Clear the Line Feed at String End.
;String Length Includes NULL
;Character At The End Now.
MOVE.W (A0),D0
TST.B D0
BNE M006
ORI.W #$2000,D0 ;Convert Command to Lower Case.
CMPI.W #$3F00,D0 ;'?'<cr> Input?
BEQ Command_List ;Yes --- Show Command List.
CMPI.W #$7100,D0 ;'q'<cr> Input?
BEQ EndRun ;Yes --- Quit Run.
CMPI.W #$3100,D0 ;'1'<cr> Input?
BEQ DhryStd00 ;Yes --- Do Dhrystone Std 68000.
CMPI.W #$3200,D0 ;'2'<cr> Input?
BEQ DhryOpt00 ;Yes --- Do Dhrystone Opt 68000.
CMPI.W #$3300,D0 ;'3'<cr> Input?
BEQ DhryOpt20 ;Yes --- Do Dhrystone Opt 68020.
BRA M007
M006: OR.W #$2020,D0
CMPI.W #$6361,D0 ;'ca'<cr> Input?
BEQ Check_Addr ;Yes --- Check Routine Addresses.
CMPI.W #$6373,D0 ;'cs'<cr> Input?
BEQ Read_Cache ;Yes --- Read Cache.
CMPI.W #$7763,D0 ;'wc'<cr> Input?
BEQ Write_Cache ;Yes --- Write Cache.
M007:
PEA.L CmdRepeat
JSR _printf
ADDQ.L #$04,A7
BRA M004
DhryStd00:
PEA.L Title
JSR _printf
ADDQ.L #$04,A7
PEA.L STR101
JSR _printf
ADDQ.L #$04,A7
PEA.L STR107
JSR _printf
ADDQ.L #$04,A7
JSR PrtCPUFPU
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
LEA.L _A4Ref,A4
BSR _Proc0
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
BRA M005
DhryOpt00:
PEA.L Title
JSR _printf
ADDQ.L #$04,A7
PEA.L STR101
JSR _printf
ADDQ.L #$04,A7
PEA.L STR108
JSR _printf
ADDQ.L #$04,A7
JSR PrtCPUFPU
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
LEA.L _A4Ref,A4
BSR Proc0Opt00
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
BRA M005
DhryOpt20:
MOVE.L CPU_Type,D0
CMPI.W #$0002,D0
BLT.S Error01
PEA.L Title
JSR _printf
ADDQ.L #$04,A7
PEA.L STR101
JSR _printf
ADDQ.L #$04,A7
PEA.L STR109
JSR _printf
ADDQ.L #$04,A7
JSR PrtCPUFPU
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
LEA.L _A4Ref,A4
BSR Proc0Opt20
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
BRA M005
Error01:
LEA.L STR116,A2
JSR PrintError
BRA M005
Command_List:
PEA.L Title
JSR _printf
ADDQ.L #$04,A7
PEA.L STR110
JSR _printf
ADDQ.L #$04,A7
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
BRA M005
Check_Addr:
PEA.L Title
JSR _printf
ADDQ.L #$04,A7
MOVE.L #Proc0Opt00,-(A7)
MOVE.L #_main,-(A7)
PEA.L Dump01
JSR _printf
LEA.L $0C(A7),A7
MOVE.L #Proc1Opt00,-(A7)
MOVE.L #Proc0Opt20,-(A7)
PEA.L Dump02
JSR _printf
LEA.L $0C(A7),A7
MOVE.L #Proc6Opt00,-(A7)
MOVE.L #Proc2Opt00,-(A7)
PEA.L Dump03
JSR _printf
LEA.L $0C(A7),A7
MOVE.L #Proc8Opt00,-(A7)
MOVE.L #Proc8Opt20,-(A7)
PEA.L Dump04
JSR _printf
LEA.L $0C(A7),A7
MOVE.L #_A4Ref,-(A7)
MOVE.L #Func2Opt00,-(A7)
PEA.L Dump05
JSR _printf
LEA.L $0C(A7),A7
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
BRA M005
Read_Cache:
PEA.L Title
JSR _printf
ADDQ.L #$04,A7
JSR Cache_Status
BRA M005
Write_Cache:
PEA.L Title
JSR _printf
ADDQ.L #$04,A7
PEA.L STR119
JSR _printf
ADDQ.L #$04,A7
PEA.L STR120
JSR _printf
ADDQ.L #$04,A7
LEA.L EntPrompt,A0
BSR Command
CLR.B -$01(A0,D0.L) ;Clear the Line Feed at String End.
JSR Write_To_CACR
BRA M007
EndRun:
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
QuitC:
MOVEA.L SaveA7,A7
MOVEQ.L #$00,D0
RTS
*<<<<<<<<<<<<<<<<<<<<<<<< Subroutines >>>>>>>>>>>>>>>>>>>>>>>>>>>*
****************** Standard 68000 _Proc0 *************************
_Proc0:
LINK A5,#-$50
MOVEM.L D4-D7,-(A7)
JSR _dtime ;Time Empty FOR Loop (nulltime).
MOVE.L D0,-$48(A5) ;starttime
MOVEQ.L #$00,D7
BRA P0004
P0002:
ADDQ.L #$01,D7
P0004:
CMPI.W #$C350,D7
BCS P0002
JSR _dtime ;StopTime
SUB.L -$48(A5),D0 ;D0 = StopTime - StartTime
MOVE.L D0,-$4C(A5) ;D0 = NullTime
; PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));
MOVE.L #Buf01,$14D0(A4) ;_PtrGlbNext = ($976C,A4)
; PtrGlb = (RecordPtr) malloc(sizeof(RecordType));
MOVE.L #Buf02,$14CC(A4) ;_PtrGlb = ($9768,A4)
; PtrGlb->PtrComp = PtrGlbNext;
MOVEA.L $14CC(A4),A0
MOVE.L $14D0(A4),(A0)
; PtrGlb->Discr = Ident1; ;Ident1 is $0000
MOVEA.L $14CC(A4),A0
CLR.W $04(A0)
; PtrGlb->EnumComp = Ident3;
MOVEA.L $14CC(A4),A0 ;Ident3 is $0002
MOVE.W #$0002,$06(A0)
; PtrGlb->IntComp = 40;
MOVEA.L $14CC(A4),A0
MOVE.W #$0028,$08(A0)
; strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING")
PEA.L STR103
MOVEA.L $14CC(A4),A0
PEA.L $0A(A0)
JSR _strcpy
ADDQ.L #$08,A7
; Array2Glob[8][7] = 10; /* Was missing in published Version */
MOVE.W #$0A,$03B6(A4) ;_Array2Glob+830
*******************
*-- Start Timer --*
*******************
JSR _dtime
MOVE.L D0,-$48(A5) ;StartTime
MOVEQ.L #$00,D7 ;MAIN FOR LOOP
BRA P0024
P0006:
JSR _Proc5
JSR _Proc4
MOVE.W #$0002,-$02(A5) ;IntLoc1 = 2
MOVEQ.L #$03,D4 ;IntLoc2 = 3
; strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
PEA.L STR104
PEA.L -$44(A5) ;String2Loc
JSR _strcpy
ADDQ.L #$08,A7
MOVE.W #$0001,-$06(A5) ;EnumLoc = Ident2
;Ident2 = $0001
; BoolGlob = ! Func2(String1Loc, String2Loc);
PEA.L -$44(A5) ;String2Loc
PEA.L -$25(A5) ;String1Loc
JSR _Func2
ADDQ.L #$08,A7
TST.W D0
BNE P0008
MOVE.W #$0001,$0004(A4) ;_BoolGlob
BRA P0010
P0008:
CLR.W $0004(A4) ;_BoolGlob
P0010:
P0012: ;While (IntLoc1 < IntLoc2)
MOVE.W -$02(A5),D0
CMP.W D4,D0
BGE P0014
MOVE.W -$02(A5),D0 ;IntLoc3 = 5 * IntLoc1 - IntLoc2
MULS.W #$0005,D0
SUB.W D4,D0
MOVE.W D0,-$04(A5)
; Proc7(IntLoc1, IntLoc2, &IntLoc3);
PEA.L -$04(A5)
MOVE.W D4,-(A7)
MOVE.W -$02(A5),-(A7)
JSR _Proc7
ADDQ.L #$08,A7
ADDQ.W #$0001,-$02(A5) ;++IntLoc1
BRA P0012
P0014:
; Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
MOVE.W -$04(A5),-(A7)
MOVE.W -$02(A5),-(A7)
PEA.L $0078(A4) ;_Array2Glob
PEA.L $0010(A4) ;_Array1Glob
JSR _Proc8
LEA.L $0C(A7),A7
; Proc1(PtrGlb);
MOVE.L $14CC(A4),-(A7) ;_PtrGlb
JSR _Proc1
ADDQ.L #$04,A7
; for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
MOVEQ.L #$41,D6
BRA P0022
P0018:
; if (EnumLoc == Func1(CharIndex, 'C'))
; Proc6(Ident1, &EnumLoc);
MOVE.W #$0043,-(A7)
MOVE.B D6,D0
EXT.W D0
MOVE.W D0,-(A7)
JSR _Func1
ADDQ.L #$04,A7
CMP.W -$06(A5),D0
BNE P0020
PEA.L -$06(A5)
CLR.W -(A7)
JSR _Proc6
ADDQ.L #$06,A7
; IntLoc3 = IntLoc2 * IntLoc1;
P0020:
ADDQ.B #$01,D6
P0022:
CMP.B $000C(A4),D6 ;_Char2Glob = ($000C,A4)
BLE P0018
MOVE.W D4,D0
MULS.W -$02(A5),D0
MOVE.W D0,-$04(A5)
; IntLoc2 = IntLoc3 / IntLoc1;
MOVE.W -$04(A5),D4
EXT.L D4
DIVS.W -$02(A5),D4
; IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
MOVE.W -$04(A5),D0
SUB.W D4,D0
MULS.W #$0007,D0
MOVE.W D0,D4
SUB.W -$02(A5),D4
; Proc2(&IntLoc1);
PEA.L -$02(A5)
JSR _Proc2
ADDQ.L #$04,A7
ADDQ.L #$01,D7
P0024:
CMPI.W #$C350,D7
BCS P0006
******************
*-- Stop Timer --*
******************
; benchtime = dtime() - starttime - nulltime;
JSR _dtime ;StopTime
SUB.L -$48(A5),D0 ;StopTime - StartTime
SUB.L -$4C(A5),D0 ;StopTime - StartTime - NullTime
MOVE.L D0,-$50(A5) ;BenchTime
; printf(" Time(sec) for %ld passes = %f\n", (long) LOOPS,
; (float)benchtime/50.0);
MOVE.L -$50(A5),D0 ;BenchTime = Time in TICKS
JSR FFPFlt
MOVE.L #$C8000046,D1 ;50.00
JSR FFPDiv ;Time in SECONDS.
MOVE.L -$50(A5),-(A7) ;benchtime / 50.00
PEA.L $0000C350 ;50000
PEA.L STR105
JSR _printf
LEA.L $0C(A7),A7
; printf(" This System Benchmarks at %ld dhrystones/second\n",
; ((long) LOOPS) * 50L / benchtime);
MOVE.L #$002625A0,D0 ;50000 * 50
MOVE.L -$50(A5),D1 ;BenchTime
JSR LDivs ;D0 = D0 / D1
MOVE.L D0,-(A7) ;Dhrystones / Sec
PEA.L STR106
JSR _printf
ADDQ.L #$08,A7
P0026:
MOVEM.L (A7)+,D4-D7
UNLK A5
RTS
****************** Optimized 68000 _Proc0 *******************************
Proc0Opt00:
LINK A5,#-$50
MOVEM.L D4-D7,-(A7)
JSR _dtime ;Time Empty FOR Loop (nulltime).
MOVE.L D0,-$48(A5) ;starttime
MOVEQ.L #$00,D7
BRA Q0004
Q0002:
ADDQ.L #$01,D7
Q0004:
CMPI.W #$C350,D7
BCS Q0002
JSR _dtime ;StopTime
SUB.L -$48(A5),D0 ;D0 = StopTime - StartTime
MOVE.L D0,-$4C(A5) ;D0 = NullTime
; PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));
MOVE.L #Buf01,$14D0(A4) ;_PtrGlbNext = ($14D0,A4)
; PtrGlb = (RecordPtr) malloc(sizeof(RecordType));
MOVE.L #Buf02,$14CC(A4) ;_PtrGlb = ($14CC,A4)
; PtrGlb->PtrComp = PtrGlbNext;
MOVEA.L $14CC(A4),A0
MOVE.L $14D0(A4),(A0)
; PtrGlb->Discr = Ident1;
MOVEA.L $14CC(A4),A0
CLR.W $04(A0)
; PtrGlb->EnumComp = Ident3;
MOVEA.L $14CC(A4),A0
MOVE.W #$0002,$06(A0)
; PtrGlb->IntComp = 40;
MOVEA.L $14CC(A4),A0
MOVE.W #$0028,$08(A0)
; strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING")
PEA.L STR103
MOVEA.L $14CC(A4),A0
PEA.L $0A(A0)
JSR _strcpy
ADDQ.L #$08,A7
; Array2Glob[8][7] = 10; /* Was missing in published Version */
MOVE.W #$000A,$03B6(A4) ;_Array2Glob+830
*******************
*-- Start Timer --*
*******************
MOVEQ.L #$00,D3
MOVEQ.L #$00,D5
JSR _dtime
MOVE.L D0,-$48(A5) ;StartTime
MOVEQ.L #$00,D7 ;MAIN FOR LOOP
JMP Q0024
Q0006:
MOVE.B #$41,$08(A4) ;_Proc5 Inlined.
CLR.W $04(A4)
MOVE.B #$42,$0C(A4) ;_Proc4 Inlined And Optimized!
MOVE.W #$0002,D5 ;IntLoc1 = 2
MOVEQ.L #$03,D4 ;IntLoc2 = 3
; strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
LEA.L -$44(A5),A0 ;_strcpy Inlined.
LEA.L STR104,A1
MOVE.L A0,D0
I0002: MOVE.B (A1)+,(A0)+
BNE.S I0002
MOVE.W #$0001,-$06(A5) ;EnumLoc = Ident2
; BoolGlob = ! Func2(String1Loc, String2Loc);
PEA.L -$44(A5)
PEA.L -$25(A5)
JSR Func2Opt00
ADDQ.L #$08,A7
TST.W D0
BNE Q0008
MOVE.W #$0001,$04(A4) ;_BoolGlob
JMP Q0010
Q0008:
CLR.W $04(A4) ;_BoolGlob
Q0010:
Q0012: ;While (IntLoc1 < IntLoc2)
MOVE.W D5,D0
CMP.W D4,D0
BGE Q0014
MOVE.W D5,D0 ;IntLoc3 = 5 * IntLoc1 - IntLoc2
MULS.W #$0005,D0
SUB.W D4,D0
MOVE.W D0,D3
; Proc7(IntLoc1, IntLoc2, &IntLoc3);
MOVE.W D5,D1 ;_Proc7 Inlined!
ADDQ.W #$02,D1
MOVE.W D4,D0
ADD.W D1,D0
MOVE.W D0,D3
ADDQ.W #$0001,D5 ;++IntLoc1
JMP Q0012
Q0014:
; Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
MOVE.W D3,-(A7)
MOVE.W D5,-(A7)
PEA.L $78(A4)
PEA.L $10(A4) ;_Array1Glob = ($0010,A4)
JSR Proc8Opt00
LEA.L $0C(A7),A7
; Proc1(PtrGlb);
MOVE.L $14CC(A4),-(A7)
JSR Proc1Opt00
ADDQ.L #$04,A7
; for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
MOVEQ.L #$41,D6
JMP Q0022
Q0018:
; if (EnumLoc == Func1(CharIndex, 'C'))
; Proc6(Ident1, &EnumLoc);
MOVE.B D6,D0 ;_Func1 Inlined And Optimized!
EXT.W D0
CMPI.B #$43,D0
BEQ.S I0004
MOVEQ.L #$00,D0
JMP I0006
I0004:
MOVEQ.L #$01,D0
I0006:
CMP.W -$06(A5),D0
BNE Q0020
PEA.L -$06(A5)
CLR.W -(A7)
JSR Proc6Opt00
ADDQ.L #$06,A7
; IntLoc3 = IntLoc2 * IntLoc1;
Q0020:
ADDQ.B #$01,D6
Q0022:
CMP.B $0C(A4),D6 ;_Char2Glob = ($000C,A4)
BLE Q0018
MOVE.W D4,D0
MULS.W D5,D0
MOVE.W D0,D3
; IntLoc2 = IntLoc3 / IntLoc1;
MOVE.W D3,D4
EXT.L D4
DIVS.W D5,D4
; IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
MOVE.W D3,D0
SUB.W D4,D0
MULS.W #$0007,D0
MOVE.W D0,D4
SUB.W D5,D4
; Proc2(&IntLoc1);
;_Proc2 Inlined.
MOVE.W D5,D1
ADDI.W #$000A,D1
MOVEQ.L #$00,D2 ;This makes me think the subr
;is wrong somehow.
I0008:
CMPI.B #$41,$08(A4)
BNE I0010
SUBQ.W #$01,D1
MOVE.W D1,D0
SUB.W (A4),D0
MOVE.W D0,D5
I0010:
TST.W D2
BEQ I0012 ;Break (But D2 _IS_ ZERO!)
JMP I0008
I0012:
ADDQ.L #$01,D7
Q0024:
CMPI.W #$C350,D7
BCS Q0006
******************
*-- Stop Timer --*
******************
; benchtime = dtime() - starttime - nulltime;
JSR _dtime ;StopTime
SUB.L -$48(A5),D0 ;StopTime - StartTime
SUB.L -$4C(A5),D0 ;StopTime - StartTime - NullTime
MOVE.L D0,-$50(A5) ;BenchTime
; printf(" Time(sec) for %ld passes = %f\n", (long) LOOPS,
; (float)benchtime/50.0);
MOVE.L -$50(A5),D0 ;BenchTime = Time in TICKS
JSR FFPFlt
MOVE.L #$C8000046,D1 ;50.00
JSR FFPDiv ;Time in SECONDS.
MOVE.L -$50(A5),-(A7) ;benchtime / 50.00
PEA.L $0000C350 ;50000
PEA.L STR105
JSR _printf
LEA.L $0C(A7),A7
; printf(" This System Benchmarks at %ld dhrystones/second\n",
; ((long) LOOPS) * 50L / benchtime);
MOVE.L #$002625A0,D0 ;50000 * 50
MOVE.L -$50(A5),D1 ;BenchTime
JSR LDivs ;D0 = D0 / D1
MOVE.L D0,-(A7) ;Dhrystones / Sec
PEA.L STR106
JSR _printf
ADDQ.L #$08,A7
Q0026:
MOVEM.L (A7)+,D4-D7
UNLK A5
RTS
****************** Optimized 68020 _Proc0 *******************************
Proc0Opt20:
LINK A5,#-$50
MOVEM.L D4-D7,-(A7)
JSR _dtime ;Time Empty FOR Loop (nulltime).
MOVE.L D0,-$48(A5) ;starttime
MOVEQ.L #$00,D7
BRA U0004
U0002:
ADDQ.L #$01,D7
U0004:
CMPI.W #$C350,D7
BCS U0002
JSR _dtime ;StopTime
SUB.L -$48(A5),D0 ;D0 = StopTime - StartTime
MOVE.L D0,-$4C(A5) ;D0 = NullTime
; PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));
MOVE.L #Buf01,$14D0(A4) ;_PtrGlbNext = ($14D0,A4)
; PtrGlb = (RecordPtr) malloc(sizeof(RecordType));
MOVE.L #Buf02,$14CC(A4) ;_PtrGlb = ($14CC,A4)
; PtrGlb->PtrComp = PtrGlbNext;
MOVEA.L $14CC(A4),A0
MOVE.L $14D0(A4),(A0)
; PtrGlb->Discr = Ident1;
MOVEA.L $14CC(A4),A0
CLR.W $04(A0)
; PtrGlb->EnumComp = Ident3;
MOVEA.L $14CC(A4),A0
MOVE.W #$0002,$06(A0)
; PtrGlb->IntComp = 40;
MOVEA.L $14CC(A4),A0
MOVE.W #$0028,$08(A0)
; strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING")
PEA.L STR103
MOVEA.L $14CC(A4),A0
PEA.L $0A(A0)
JSR _strcpy
ADDQ.L #$08,A7
; Array2Glob[8][7] = 10; /* Was missing in published Version */
MOVE.W #$000A,$03B6(A4) ;_Array2Glob+830
*******************
*-- Start Timer --*
*******************
MOVEQ.L #$00,D3
MOVEQ.L #$00,D5
JSR _dtime
MOVE.L D0,-$48(A5) ;StartTime
MOVEQ.L #$00,D7 ;MAIN FOR LOOP
JMP U0024
U0006:
MOVE.B #$41,$08(A4) ;_Proc5 Inlined.
CLR.W $04(A4)
MOVE.B #$42,$0C(A4) ;_Proc4 Inlined And Optimized!
MOVE.W #$0002,D5 ;IntLoc1 = 2
MOVEQ.L #$03,D4 ;IntLoc2 = 3
; strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
LEA.L -$44(A5),A0 ;_strcpy Inlined.
LEA.L STR104,A1
MOVE.L A0,D0
J0002: MOVE.B (A1)+,(A0)+
BNE.S J0002
MOVE.W #$0001,-$06(A5) ;EnumLoc = Ident2
; BoolGlob = ! Func2(String1Loc, String2Loc);
PEA.L -$44(A5)
PEA.L -$25(A5)
JSR Func2Opt00
ADDQ.L #$08,A7
TST.W D0
BNE.S U0008
MOVE.W #$0001,$04(A4) ;_BoolGlob
JMP U0010
U0008:
CLR.W $04(A4) ;_BoolGlob
U0010:
U0012: ;While (IntLoc1 < IntLoc2)
MOVE.W D5,D0
CMP.W D4,D0
BGE.S U0014
MOVE.W D5,D0 ;IntLoc3 = 5 * IntLoc1 - IntLoc2
MULS.W #$0005,D0
SUB.W D4,D0
MOVE.W D0,D3
; Proc7(IntLoc1, IntLoc2, &IntLoc3);
MOVE.W D5,D1 ;_Proc7 Inlined!
ADDQ.W #$02,D1
MOVE.W D4,D0
ADD.W D1,D0
MOVE.W D0,D3
ADDQ.W #$0001,D5 ;++IntLoc1
JMP U0012
U0014:
; Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
MOVE.W D3,-(A7)
MOVE.W D5,-(A7)
PEA.L $78(A4)
PEA.L $10(A4) ;_Array1Glob = ($0010,A4)
JSR Proc8Opt20
LEA.L $0C(A7),A7
; Proc1(PtrGlb);
MOVE.L $14CC(A4),-(A7)
JSR Proc1Opt00
ADDQ.L #$04,A7
; for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
MOVEQ.L #$41,D6
JMP U0022
U0018:
; if (EnumLoc == Func1(CharIndex, 'C'))
; Proc6(Ident1, &EnumLoc);
MOVE.B D6,D0 ;_Func1 Inlined And Optimized!
EXT.W D0
CMPI.B #$43,D0
BEQ.S J0004
MOVEQ.L #$00,D0
JMP J0006
J0004:
MOVEQ.L #$01,D0
J0006:
CMP.W -$06(A5),D0
BNE.S U0020
PEA.L -$06(A5)
CLR.W -(A7)
JSR Proc6Opt00
ADDQ.L #$06,A7
; IntLoc3 = IntLoc2 * IntLoc1;
U0020:
ADDQ.B #$01,D6
U0022:
CMP.B $0C(A4),D6 ;_Char2Glob = ($000C,A4)
BLE.S U0018
MOVE.W D4,D0
MULS.W D5,D0
MOVE.W D0,D3
; IntLoc2 = IntLoc3 / IntLoc1;
MOVE.W D3,D4
EXT.L D4
DIVS.W D5,D4
; IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
MOVE.W D3,D0
SUB.W D4,D0
MULS.W #$0007,D0
MOVE.W D0,D4
SUB.W D5,D4
; Proc2(&IntLoc1);
;_Proc2 Inlined.
MOVE.W D5,D1
ADDI.W #$000A,D1
MOVEQ.L #$00,D2 ;This makes me think the subr
;is wrong somehow.
J0008:
CMPI.B #$41,$08(A4)
BNE.S J0010
SUBQ.W #$01,D1
MOVE.W D1,D0
SUB.W (A4),D0
MOVE.W D0,D5
J0010:
TST.W D2
BEQ.S J0012 ;Break (But D2 _IS_ ZERO!)
JMP J0008
J0012:
ADDQ.L #$01,D7
U0024:
CMPI.W #$C350,D7
BCS U0006
******************
*-- Stop Timer --*
******************
; benchtime = dtime() - starttime - nulltime;
JSR _dtime ;StopTime
SUB.L -$48(A5),D0 ;StopTime - StartTime
SUB.L -$4C(A5),D0 ;StopTime - StartTime - NullTime
MOVE.L D0,-$50(A5) ;BenchTime
; printf(" Time(sec) for %ld passes = %f\n", (long) LOOPS,
; (float)benchtime/50.0);
MOVE.L -$50(A5),D0 ;BenchTime = Time in TICKS
JSR FFPFlt
MOVE.L #$C8000046,D1 ;50.00
JSR FFPDiv ;Time in SECONDS.
MOVE.L -$50(A5),-(A7) ;benchtime / 50.00
PEA.L $0000C350 ;50000
PEA.L STR105
JSR _printf
LEA.L $0C(A7),A7
; printf(" This System Benchmarks at %ld dhrystones/second\n",
; ((long) LOOPS) * 50L / benchtime);
MOVE.L #$002625A0,D0 ;50000 * 50
MOVE.L -$50(A5),D1 ;BenchTime
JSR LDivs ;D0 = D0 / D1
MOVE.L D0,-(A7) ;Dhrystones / Sec
PEA.L STR106
JSR _printf
ADDQ.L #$08,A7
U0026:
MOVEM.L (A7)+,D4-D7
UNLK A5
RTS
****************** _Proc1 **************************************
_Proc1:
LINK A5,#$0000
MOVE.L A2,-(A7)
MOVEA.L $08(A5),A2
;#define NextRecord (*(PtrParIn->PtrComp))
; structassign(NextRecord, *PtrGlb);
MOVEA.L (A2),A0 ;
MOVEA.L $14CC(A4),A1 ;_PrtGlb = ($14CC,A4)
MOVEQ.L #$09,D0
P0102:
MOVE.L (A1)+,(A0)+
DBRA D0,P0102
MOVE.W (A1)+,(A0)+
; PtrParIn->IntComp = 5;
MOVE.W #$0005,$08(A2)
; NextRecord.IntComp = PtrParIn->IntComp;
MOVEA.L (A2),A0
MOVE.W $08(A2),$08(A0)
; NextRecord.PtrComp = PtrParIn->PtrComp;
MOVEA.L (A2),A0
MOVE.L (A2),(A0)
; Proc3(NextRecord.PtrComp);
MOVEA.L (A2),A0
MOVE.L (A0),-(A7)
JSR _Proc3
ADDQ.L #$04,A7
; if (NextRecord.Discr == Ident1)
MOVEA.L (A2),A0
TST.W $04(A0)
BNE P0104
; NextRecord.IntComp = 6;
MOVEA.L (A2),A0
MOVE.W #$0006,$08(A0)
; Proc6(PtrParIn->EnumComp, &NextRecord.EnumComp);
MOVEA.L (A2),A0
ADDQ.L #$06,A0
MOVE.L A0,-(A7)
MOVE.W $06(A2),-(A7)
JSR _Proc6
ADDQ.L #$06,A7
; NextRecord.PtrComp = PtrGlb->PtrComp;
MOVEA.L $14CC(A4),A0 ;_PtrGlb = ($14CC,A4)
MOVEA.L (A2),A1
MOVE.L (A0),(A1)
; Proc7(NextRecord.IntComp, 10, &NextRecord.IntComp);
MOVEA.L (A2),A0
ADDQ.L #$08,A0
MOVE.L A0,-(A7)
MOVE.W #$000A,-(A7)
MOVEA.L (A2),A0
MOVE.W $08(A0),-(A7)
JSR _Proc7
ADDQ.L #$08,A7
BRA P0108
P0104:
; structassign(*PtrParIn, NextRecord);
MOVEA.L A2,A0
MOVEA.L (A2),A1
MOVEQ.L #$09,D0
P0106:
MOVE.L (A1)+,(A0)+
DBRA D0,P0106
MOVE.W (A1)+,(A0)+
P0108:
MOVE.L (A7)+,A2
UNLK A5
RTS
DC.W $0000
****************** _Proc1 With _Proc7 Inlined ***************************
Proc1Opt00:
MOVE.L A2,-(A7)
MOVEA.L $08(A7),A2
;#define NextRecord (*(PtrParIn->PtrComp))
; structassign(NextRecord, *PtrGlb);
MOVEA.L (A2),A0 ;
MOVEA.L $14CC(A4),A1 ;_PrtGlb = ($14CC,A4)
MOVEQ.L #$09,D0
Q0102:
MOVE.L (A1)+,(A0)+
DBRA D0,Q0102
MOVE.W (A1)+,(A0)+
; PtrParIn->IntComp = 5;
MOVE.W #$0005,$08(A2)
; NextRecord.IntComp = PtrParIn->IntComp;
MOVEA.L (A2),A0 ;Reset A0
MOVE.W $08(A2),$08(A0)
; NextRecord.PtrComp = PtrParIn->PtrComp;
MOVE.L (A2),(A0)
; Proc3(NextRecord.PtrComp); ;_Proc3 and _Proc7 Inlined.
MOVEA.L $14CC(A4),A0
TST.L $14CC(A4)
BEQ.S I0302
MOVEA.L (A0),A1
MOVE.L (A0),(A1)
JMP I0304
I0302:
MOVE.W #$0064,(A4)
I0304:
ADDQ.L #$08,A0
MOVE.W #$000C,D1
MOVE.W (A4),D0
ADD.W D1,D0
MOVE.W D0,(A0)
; if (NextRecord.Discr == Ident1)
MOVEA.L (A2),A0 ;Reset A0 as Subr may/does alter
TST.W $04(A0)
BNE.S Q0104
; NextRecord.IntComp = 6;
MOVE.W #$0006,$08(A0)
; Proc6(PtrParIn->EnumComp, &NextRecord.EnumComp);
ADDQ.L #$06,A0
MOVE.L A0,-(A7)
MOVE.W $06(A2),-(A7)
JSR Proc6Opt00
ADDQ.L #$06,A7
; NextRecord.PtrComp = PtrGlb->PtrComp;
MOVEA.L $14CC(A4),A0 ;_PtrGlb = ($14CC,A4)
MOVEA.L (A2),A1
MOVE.L (A0),(A1)
; Proc7(NextRecord.IntComp, 10, &NextRecord.IntComp);
MOVEA.L (A2),A0 ;_Proc7 Inlined!
ADDQ.L #$08,A0
MOVEA.L (A2),A1
MOVE.W $08(A1),D1
ADDQ.W #$02,D1
MOVE.W #$000A,D0
ADD.W D1,D0
MOVE.W D0,(A0)
JMP Q0108
Q0104:
; structassign(*PtrParIn, NextRecord);
MOVEA.L A2,A1
MOVEQ.L #$09,D0
Q0106:
MOVE.L (A0)+,(A1)+
DBRA D0,Q0106
MOVE.W (A0)+,(A1)+
Q0108:
MOVE.L (A7)+,A2
RTS
****************** _Proc2 *****************************************
_Proc2:
LINK A5,#$0000
MOVEM.L D4/D5,-(A7)
; IntLoc = *IntParIO + 10;
MOVEA.L $08(A5),A0
MOVE.W (A0),D4
ADD.W #$000A,D4 ;D4 = IntLoc
MOVEQ.L #$00,D5 ;Could be garbage otherwise.
; for(;;)
P0202:
; if (Char1Glob == 'A')
CMPI.B #$41,$0008(A4) ;_Char1Glob = ($0008,A4)
BNE P0204
SUBQ.W #$01,D4 ;--IntLoc
; *IntParIO = IntLoc - IntGlob;
MOVEA.L $08(A5),A0
MOVE.W D4,D0
SUB.W $0000(A4),D0 ;_IntGlob
MOVE.W D0,(A0)
; EnumLoc = Ident1;
MOVEQ.L #$00,D5
; if (EnumLoc == Ident1)
P0204:
; break;
TST.W D5
BEQ P0206
BRA P0202
P0206:
MOVEM.L (A7)+,D4/D5
UNLK A5
RTS
****************** Optimized _Proc2 *************************************
Proc2Opt00:
MOVEM.L D4/D5,-(A7)
; IntLoc = *IntParIO + 10;
MOVEA.L $0C(A7),A0
MOVE.W (A0),D4
ADD.W #$000A,D4 ;D4 = IntLoc
MOVEQ.L #$00,D5 ;Could be garbage otherwise.
; for(;;)
Q0202:
; if (Char1Glob == 'A')
CMPI.B #$41,$0008(A4) ;_Char1Glob = ($0008,A4)
BNE.S Q0204
SUBQ.W #$01,D4 ;--IntLoc
; *IntParIO = IntLoc - IntGlob;
MOVE.W D4,D0
SUB.W (A4),D0 ;_IntGlob
MOVE.W D0,(A0)
; EnumLoc = Ident1;
MOVEQ.L #$00,D5
; if (EnumLoc == Ident1)
Q0204:
; break;
TST.W D5
BEQ.S Q0206
JMP Q0202
Q0206:
MOVEM.L (A7)+,D4/D5
RTS
****************** _Proc3 *****************************************
_Proc3:
LINK A5,#$0000
; if (PtrGlb != NULL)
; *PtrParOut = PtrGlb->PtrComp;
TST.L $14CC(A4)
BEQ P0302
MOVEA.L $14CC(A4),A0 ;_PrtGlb = ($14CC,A4)
MOVE.L $08(A5),A1
MOVE.L (A0),(A1)
BRA P0304
P0302:
MOVE.W #$0064,$0000(A4) ;_IntGlob
P0304:
; Proc7(10, IntGlob, &PtrGlb->IntComp);
MOVEA.L $14CC(A4),A0 ;_PrtGlb = ($9768,A4)
ADDQ.L #$08,A0
MOVE.L A0,-(A7)
MOVE.W $0000(A4),-(A7) ;_IntGlob
MOVE.W #$0A,-(A7)
JSR _Proc7
ADDQ.L #$08,A7
UNLK A5
RTS
****************** _Proc4 ****************************************
** This looks like it can be optimized to almost nothing
**
_Proc4:
LINK A5,#$0000
MOVE.L D4,-(A7)
; BoolLoc = Char1Glob == 'A';
;
CMPI.B #$41,$0008(A4) ;_Char1Glob = ($82AE,A4)
SEQ.B D4
AND.W #$0001,D4
; BoolLoc |= BoolGlob;
;
OR.W $0004(A4),D4 ;_BoolGlob
; Char2Glob = 'B';
;
MOVE.B #$42,$000C(A4) ;_Char2Glob = ($82AF,A4)
MOVE.L (A7)+,D4
UNLK A5
RTS
****************** _Proc5 ***************************************
_Proc5:
LINK A5,#$0000
; Char1Glob = 'A';
;
MOVE.B #$41,$0008(A4) ;_Char1Glob = ($82AE,A4)
; BoolGlob = FALSE;
CLR.W $0004(A4) ;_BoolGlob = ($82AC,A4)
UNLK A5
RTS
****************** _Proc6 *****************************************
_Proc6:
LINK A5,#$0000
MOVEM.L D4/A2,-(A7)
MOVE.W $08(A5),D4
MOVE.L $0A(A5),A2
; *EnumParOut = EnumParIn;
MOVE.W D4,(A2)
; if (! Func3(EnumParIn) )
; *EnumParOut = Ident4;
MOVE.W D4,-(A7)
JSR _Func3
ADDQ.L #$02,A7
TST.W D0
BNE.S P0602
MOVE.W #$0003,(A2)
; switch (EnumParIn)
P0602:
MOVE.W D4,D0
EXT.L D0
BRA.S P0620
; case Ident1: *EnumParOut = Ident1; break;
P0604:
CLR.W (A2)
BRA.S P0624
; case Ident2: if (IntGlob > 100) *EnumParOut = Ident1;
P0606: ;
CMPI.W #$0064,$0000(A4) ;_IntGlob
BLE.S P0608
CLR.W (A2)
; else *EnumParOut = Ident4;
BRA.S P0610
P0608:
MOVE.W #$0003,(A2)
P0610:
; break;
BRA.S P0624
; case Ident3: *EnumParOut = Ident2; break;
P0612:
MOVE.W #$0001,(A2)
BRA.S P0624
; case Ident4: break;
P0614:
BRA.S P0624
; case Ident5: *EnumParOut = Ident3;
P0616:
MOVE.W #$0002,(A2)
BRA.S P0624
P0618:
DC.W $FFC2
DC.W $FFC6
DC.W $FFD8
DC.W $FFDE
DC.W $FFE0
P0620:
CMP.L #$5,D0
BCC.S P0624
ASL.L #$01,D0
DC.W $303B,$00EA
P0622:
DC.W $4EFB,$0000
P0624:
MOVEM.L (A7)+,D4/A2
UNLK A5
RTS
DC.W $0000
****************** _Proc6 With _Func3 Inlined ***************************
Proc6Opt00:
MOVEM.L D4/A2,-(A7)
MOVE.W $0C(A7),D4
MOVE.L $0E(A7),A2
; *EnumParOut = EnumParIn;
MOVE.W D4,(A2)
; if (! Func3(EnumParIn) )
; *EnumParOut = Ident4;
CMPI.W #$0002,D4 ;_Func3 Inlined and Optimized!
BNE R0602
MOVEQ.L #$01,D0
JMP R0604
R0602:
MOVEQ.L #$00,D0
R0604:
TST.W D0
BNE.S Q0602
MOVE.W #$0003,(A2)
; switch (EnumParIn)
Q0602:
MOVE.W D4,D0
EXT.L D0
BRA.S Q0620
; case Ident1: *EnumParOut = Ident1; break;
Q0604:
CLR.W (A2)
BRA.S Q0624
; case Ident2: if (IntGlob > 100) *EnumParOut = Ident1;
Q0606: ;
CMPI.W #$0064,(A4) ;_IntGlob
BLE.S Q0608
CLR.W (A2)
; else *EnumParOut = Ident4;
BRA.S Q0610
Q0608:
MOVE.W #$0003,(A2)
Q0610:
; break;
BRA.S Q0624
; case Ident3: *EnumParOut = Ident2; break;
Q0612:
MOVE.W #$0001,(A2)
BRA.S Q0624
; case Ident4: break;
Q0614:
BRA.S Q0624
; case Ident5: *EnumParOut = Ident3;
Q0616:
MOVE.W #$0002,(A2)
BRA.S Q0624
Q0618:
DC.W $FFC2
DC.W $FFC6
DC.W $FFD8
DC.W $FFDE
DC.W $FFE0
Q0620:
CMP.L #$5,D0
BCC.S Q0624
ASL.L #$01,D0
DC.W $303B,$00EA
Q0622:
DC.W $4EFB,$0000
Q0624:
MOVEM.L (A7)+,D4/A2
RTS
****************** _Proc7 ***************************************
_Proc7:
LINK A5,#$0000
MOVE.L D4,-(A7)
; IntLoc = IntParI1 + 2;
MOVE.W $08(A5),D4
ADDQ.W #$02,D4
; *IntParOut = IntParI2 + IntLoc;
MOVEA.L $0C(A5),A0
MOVE.W $0A(A5),D0
ADD.W D4,D0
MOVE.W D0,(A0)
MOVE.L (A7)+,D4
UNLK A5
RTS
****************** Std 68000 _Proc8 *************************************
_Proc8:
LINK A5,#$0000
MOVEM.L D4/D5,-(A7)
; IntLoc = IntParI1 + 5;
MOVE.W $10(A5),D4
ADDQ.W #$05,D4
; Array1Par[IntLoc] = IntParI2;
MOVE.W D4,D0
EXT.L D0
ASL.L #$01,D0
MOVE.L $08(A5),A0
MOVE.W $12(A5),$00(A0,D0.L)
; Array1Par[IntLoc+1] = Array1Par[IntLoc];
MOVE.W D4,D0
EXT.L D0
ASL.L #$01,D0
MOVE.L $08(A5),A0
MOVE.W D4,D1
ADDQ.W #$01,D1
EXT.L D1
ASL.L #$01,D1
MOVE.L $08(A5),A1
MOVE.W $00(A0,D0.L),$00(A1,D1.L)
; Array1Par[IntLoc+30] = IntLoc;
MOVE.W D4,D0
ADD.W #$001E,D0
EXT.L D0
ASL.L #$01,D0
MOVE.L $08(A5),A0
MOVE.W D4,$00(A0,D0.L)
; for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
MOVE.W D4,D5
BRA P0804
P0802:
; Array2Par[IntLoc][IntIndex] = IntLoc;
MOVE.W D4,D0
MULS.W #$66,D0
MOVE.W D5,D1
EXT.L D1
ASL.L #$01,D1
ADD.L D1,D0
MOVE.L $0C(A5),A0
MOVE.W D4,$00(A0,D0.L)
ADDQ.W #$01,D5
P0804:
MOVE.W D4,D0
ADDQ.W #$01,D0
CMP.W D0,D5
BLE P0802
; ++Array2Par[IntLoc][IntLoc-1];
MOVE.W D4,D0
MULS.W #$66,D0
MOVE.W D4,D1
SUBQ.W #$01,D1
EXT.L D1
ASL.L #$01,D1
ADD.L D1,D0
MOVEA.L $0C(A5),A0
ADD.W #$01,$00(A0,D0.L)
; Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
MOVE.W D4,D0
EXT.L D0
ASL.L #$01,D0
MOVE.L $08(A5),A0
MOVE.W D4,D1
ADD.W #$14,D1
MULS.W #$66,D1
MOVE.W D4,D2
EXT.L D2
ASL.L #$01,D2
ADD.L D2,D1
MOVE.L $0C(A5),A1
MOVE.W $00(A0,D0.L),$00(A1,D1.L)
; IntGlob = 5;
MOVE.W #$05,$0000(A4) ;_IntGlob
MOVEM.L (A7)+,D4/D5
UNLK A5
RTS
****************** Standard 68020 Proc8 *********************************
Proc8Opt20:
MOVEM.L D4/D5,-(A7)
; IntLoc = IntParI1 + 5;
MOVE.W $14(A7),D4
ADDQ.W #$05,D4
; Array1Par[IntLoc] = IntParI2;
MOVEA.L $0C(A7),A0
MOVEA.L $10(A7),A1
DC.W $31AD,$0012,$4200
; Array1Par[IntLoc+1] = Array1Par[IntLoc];
MOVE.W D4,D0
ADDQ.W #$01,D0
DC.W $31B0,$4200,$0200
; Array1Par[IntLoc+30] = IntLoc;
MOVE.W D4,D0
ADD.W #$001E,D0
DC.W $3184,$0200
; for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
MOVE.W D4,D5
JMP P0904
P0902:
; Array2Par[IntLoc][IntIndex] = IntLoc;
MOVE.W D4,D0
MULS.W #$66,D0
MOVE.W D5,D1
EXT.L D1
ASL.L #$01,D1
ADD.L D1,D0
MOVE.W D4,$00(A1,D0.L)
ADDQ.W #$01,D5
P0904:
MOVE.W D4,D0
ADDQ.W #$01,D0
CMP.W D0,D5
BLE.S P0902
; ++Array2Par[IntLoc][IntLoc-1];
MOVE.W D4,D0
MULS.W #$66,D0
MOVE.W D4,D1
SUBQ.W #$01,D1
EXT.L D1
ASL.L #$01,D1
ADD.L D1,D0
ADD.W #$01,$00(A1,D0.L)
; Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
MOVE.W D4,D0
ADD.W #$0014,D0
MULS.W #$0066,D0
MOVE.W D4,D1
EXT.L D1
ASL.L #$01,D1
ADD.L D1,D0
DC.W $33B0,$4200,$0800
; IntGlob = 5;
MOVE.W #$05,(A4) ;_IntGlob
MOVEM.L (A7)+,D4/D5
RTS
****************** Optimized 68000 _Proc8 *******************************
Proc8Opt00:
MOVEM.L D4/D5,-(A7)
; IntLoc = IntParI1 + 5;
MOVE.W $14(A7),D4
ADDQ.W #$0005,D4
; Array1Par[IntLoc] = IntParI2;
MOVE.W D4,D0
EXT.L D0
ASL.L #$01,D0
MOVEA.L $0C(A7),A0
MOVEA.L $10(A7),A1
MOVE.W $16(A7),$00(A0,D0.L)
; Array1Par[IntLoc+1] = Array1Par[IntLoc];
MOVE.W D4,D0
EXT.L D0
ASL.L #$01,D0
MOVE.W D4,D1
ADDQ.W #$01,D1
EXT.L D1
ASL.L #$01,D1
MOVE.W $00(A0,D0.L),$00(A0,D1.L)
; Array1Par[IntLoc+30] = IntLoc;
MOVE.W D4,D0
ADD.W #$001E,D0
EXT.L D0
ASL.L #$01,D0
MOVE.W D4,$00(A0,D0.L)
; for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
MOVE.W D4,D5
JMP P1004
P1002:
; Array2Par[IntLoc][IntIndex] = IntLoc;
MOVE.W D4,D0
MULS.W #$0066,D0
MOVE.W D5,D1
EXT.L D1
ASL.L #$01,D1
ADD.L D1,D0
MOVE.W D4,$00(A1,D0.L)
ADDQ.W #$01,D5
P1004:
MOVE.W D4,D0
ADDQ.W #$01,D0
CMP.W D0,D5
BLE P1002
; ++Array2Par[IntLoc][IntLoc-1];
MOVE.W D4,D0
MULS.W #$0066,D0
MOVE.W D4,D1
SUBQ.W #$01,D1
EXT.L D1
ASL.L #$01,D1
ADD.L D1,D0
ADD.W #$0001,$00(A1,D0.L)
; Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
MOVE.W D4,D0
EXT.L D0
ASL.L #$01,D0
MOVE.W D4,D1
ADD.W #$0014,D1
MULS.W #$0066,D1
MOVE.W D4,D2
EXT.L D2
ASL.L #$01,D2
ADD.L D2,D1
MOVE.W $00(A0,D0.L),$00(A1,D1.L)
; IntGlob = 5;
MOVE.W #$05,(A4) ;_IntGlob
MOVEM.L (A7)+,D4/D5
RTS
****************** _Func1 ******************************************
_Func1:
LINK A5,#$0000
MOVEM.L D4/D5,-(A7)
; CharLoc1 = CharPar1;
MOVE.B $09(A5),D4
; CharLoc2 = CharLoc1;
MOVE.B D4,D5
; if (CharLoc2 != CharPar2)
; return (Ident1);
CMP.B $0B(A5),D5
BEQ F0104
MOVEQ.L #$00,D0
F0102:
MOVEM.L (A7)+,D4/D5
UNLK A5
RTS
F0104:
; return (Ident2);
MOVEQ.L #$01,D0
BRA F0102
****************** _Func2 ***************************************
_Func2:
LINK A5,#$0000
MOVEM.L D4/D5,-(A7)
; IntLoc = 1;
MOVEQ.L #$01,D4
; while (IntLoc <= 1)
F0202:
CMPI.W #$0001,D4
BGT F0206
; if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1)
MOVE.W D4,D0
ADDQ.W #$01,D0
MOVEA.L $0C(A5),A0
MOVE.B $00(A0,D0.W),D1
EXT.W D1
MOVE.W D1,-(A7)
MOVEA.L $08(A5),A0
MOVE.B $00(A0,D4.W),D0
EXT.W D0
MOVE.W D0,-(A7)
JSR _Func1
ADDQ.L #$04,A7
TST.W D0
BNE F0204
; CharLoc = 'A';
MOVEQ.L #$41,D5
; ++IntLoc;
ADDQ.W #$01,D4
; if (CharLoc >= 'W' && CharLoc <= 'Z')
F0204:
BRA F0202
F0206:
; IntLoc = 7;
CMPI.B #$57,D5
BLT F0208
CMPI.B #$5A,D5
BGT F0208
MOVEQ.L #$07,D4
; if (CharLoc == 'X')
F0208:
; return(TRUE);
CMPI.B #$58,D5
BNE F0212
MOVEQ.L #$01,D0
F0210:
MOVEM.L (A7)+,D4/D5
UNLK A5
RTS
F0212:
; if (strcmp(StrParI1, StrParI2) > 0)
MOVE.L $0C(A5),-(A7)
MOVE.L $08(A5),-(A7)
JSR _strcmp
ADDQ.L #$08,A7
TST.W D0
BLE F0214
; IntLoc += 7;
ADDQ.W #$07,D4
; return (TRUE);
MOVEQ.L #$01,D0
BRA F0210
F0214:
; return (FALSE);
MOVEQ.L #$00,D0
BRA F0210
****************** _Func3 ****************************************
_Func3:
LINK A5,#$0000
MOVEM.L D4/D5,-(A7)
MOVE.W $08(A5),D4
; EnumLoc = EnumParIn;
MOVE.W D4,D5
; if (EnumLoc == Ident3) return (TRUE);
CMPI.W #$0002,D5
BNE F0304
MOVEQ.L #$01,D0
F0302:
MOVEM.L (A7)+,D4/D5
UNLK A5
RTS
; return (FALSE);
F0304:
MOVEQ.L #$00,D0
BRA F0302
DC.W $0000
****************** _Func2 With _Func1 and _strcmp Inlined ***************
Func2Opt00:
MOVEM.L D4/D5,-(A7)
; IntLoc = 1;
MOVEQ.L #$01,D4
; while (IntLoc <= 1)
F0402:
CMPI.W #$0001,D4
BGT.S F0406
; if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1)
MOVE.W D4,D0
ADDQ.W #$01,D0
MOVEA.L $10(A7),A0
MOVE.B $00(A0,D0.W),D1
EXT.W D1
MOVEA.L $0C(A7),A0
MOVE.B $00(A0,D4.W),D0
EXT.W D0
CMP.B D1,D0 ;_Func1 Inlined and Optimized.
BEQ.S G0402
MOVEQ.L #$00,D0
JMP G0404
G0402:
MOVEQ.L #$01,D0
G0404:
TST.W D0
BNE.S F0404
; CharLoc = 'A';
MOVEQ.L #$41,D5
; ++IntLoc;
ADDQ.W #$01,D4
; if (CharLoc >= 'W' && CharLoc <= 'Z')
F0404:
JMP F0402
F0406:
; IntLoc = 7;
CMPI.B #$57,D5
BLT.S F0408
CMPI.B #$5A,D5
BGT.S F0408
MOVEQ.L #$07,D4
; if (CharLoc == 'X')
F0408:
; return(TRUE);
CMPI.B #$58,D5
BNE.S F0412
MOVEQ.L #$01,D0
F0410:
MOVEM.L (A7)+,D4/D5
RTS
F0412:
; if (strcmp(StrParI1, StrParI2) > 0)
MOVE.W #$7FFF,D0
G0406:
SUBQ.W #$01,D0
BMI.S G0410
MOVEA.L $0C(A7),A0
MOVEA.L $10(A7),A1
G0408:
CMPM.B (A1)+,(A0)+
BNE.S G0412
SUBQ.W #$01,A0
TST.B (A0)+
DBEQ D0,G0408
G0410:
MOVEQ.L #$00,D0
MOVEM.L (A7)+,D4/D5
RTS
G0412:
BLS.S F0414
MOVEQ.L #$01,D0
G0418:
; IntLoc += 7;
ADDQ.W #$07,D4
; return (TRUE);
MOVEQ.L #$01,D0
MOVEM.L (A7)+,D4/D5
RTS
F0414:
; return (FALSE);
MOVEQ.L #$00,D0
MOVEM.L (A7)+,D4/D5
RTS
****************** _dtime ****************************************
_dtime:
LINK A5,#-$000C
PEA.L -$0C(A5)
JSR DTG
ADDQ.L #$04,A7
; return (tt.ticks + (tt.minutes * 60L * 50L));
MOVE.L #$00000BB8,D1
MOVE.L -$08(A5),D0
JSR LMulu
ADD.L -$04(A5),D0
UNLK A5
RTS
****************** AmigaDOS DateStamp ********************************
DTG:
MOVE.L $04(A7),D1
MOVEA.L _DOSBase,A6
JMP _LVODateStamp(A6)
****************** _strcpy *******************************************
_strcpy:
MOVE.L $04(A7),A0
MOVE.L A0,D0
MOVE.L $08(A7),A1
S0102: MOVE.B (A1)+,(A0)+
BNE S0102
RTS
****************** _strcmp *******************************************
_strcmp:
MOVE.W #$7FFF,D0
BRA S0202
MOVE.W $0C(A7),D0
S0202:
SUBQ.W #$01,D0
BMI S0206
MOVEA.L $04(A7),A0
MOVEA.L $08(A7),A1
S0204:
CMPM.B (A1)+,(A0)+
BNE S0208
SUBQ.W #$01,A0
TST.B (A0)+
DBEQ D0,S0204
S0206:
MOVEQ.L #$00,D0
RTS
S0208:
BLS S0210
MOVEQ.L #$01,D0
RTS
S0210: MOVEQ.L #-$01,D0
RTS
************************ _printf ****************************************
_printf:
MOVEM.L D1-D3/A0-A3/A6,-(A7)
MOVEA.L $24(A7),A0
LEA.L $28(A7),A1
LEA.L S0303,A2
LEA.L -$200(A7),A7
MOVEA.L A7,A3
MOVEA.L _SysBase,A6
JSR _LVORawDoFmt(A6)
MOVEQ.L #-$01,D0
S0301: TST.B (A3)+
DBEQ D0,S0301
NOT.L D0
BEQ S0302
MOVE.L _stdout,D1
MOVE.L A7,D2
MOVE.L D0,D3
MOVEA.L _DOSBase,A6
JSR _LVOWrite(A6)
S0302: LEA.L $200(A7),A7
MOVEM.L (A7)+,D1-D3/A0-A3/A6
RTS
S0303: MOVE.B D0,(A3)+
RTS
************************* Input Command *********************************
Command:
MOVEM.L D1-D3/A1-A6,-(A7)
MOVE.L crtFile,_stdout
MOVE.L A0,-(A7)
JSR _printf
LEA.L $04(A7),A7
MOVEA.L PrgCmdBuf,A0
MOVEQ.L #$4F,D1
S0401: CLR.B (A0)+
SUBQ.L #$01,D1
BPL S0401
MOVEA.L PrgCmdBuf,A0
MOVE.L _stdin,D1
MOVE.L A0,D2
MOVEQ.L #$50,D3
MOVEA.L _DOSBase,A6
JSR _LVORead(A6)
MOVE.L D0,PrgCmdLen
MOVE.L PrgCmdBuf,A0
MOVEM.L (A7)+,D1-D3/A1-A6
RTS
****************** FFP Float *****************************************
FFPFlt:
RTS
****************** FFP Divide ****************************************
FFPDiv:
RTS
****************** Long Signed Divide ***********************************
LDivs:
MOVEM.L D1/D4,-(A7)
MOVEQ.L #$00,D4
TST.L D0
BPL.S S0702
NEG.L D0
ADDQ.W #$01,D4
S0702:
TST.L D1
BPL.S S0704
NEG.L D1
EORI.W #$0001,D4
S0704:
BSR Div32
TST.W D4
BEQ.S S0706
NEG.L D0
S0706:
MOVEM.L (A7)+,D1/D4
TST.L D0
RTS
****************** Div32 *********************************************
Div32:
MOVEM.L D2/D3,-(A7)
SWAP D1
TST.W D1
BNE.B S0802
SWAP D1
MOVE.W D1,D3
MOVE.W D0,D2
CLR.W D0
SWAP D0
DIVU.W D3,D0
MOVE.L D0,D1
SWAP D0
MOVE.W D2,D1
DIVU.W D3,D1
MOVE.W D1,D0
CLR.W D1
SWAP D1
MOVEM.L (A7)+,D2/D3
RTS
S0802: SWAP D1
MOVE.L D1,D3
MOVE.L D0,D1
CLR.W D1
SWAP D1
SWAP D0
CLR.W D0
MOVEQ.L #$0F,D2
S0804:
ADD.L D0,D0
ADDX.L D1,D1
CMP.L D1,D3
BHI.S S0806
SUB.L D3,D1
ADDQ.W #$01,D0
S0806:
DBF D2,S0804
MOVEM.L (A7)+,D2/D3
RTS
****************** Long Unsigned Multiply *******************************
LMulu:
MOVEM.L D1-D3,-(A7)
MOVE.W D1,D2
MULU.W D0,D2
MOVE.L D1,D3
SWAP D3
MULU.W D0,D3
SWAP D3
CLR.W D3
ADD.L D3,D2
SWAP D0
MULU.W D1,D0
SWAP D0
CLR.W D0
ADD.L D2,D0
MOVEM.L (A7)+,D1-D3
RTS
******************** Print CPU and FPU Types ****************************
PrtCPUFPU:
MOVEM.L D0/A0-A1,-(A7)
MOVE.L CPU_Type,D0
LSL.L #$03,D0
LEA.L STR501,A0
ADDA.L D0,A0
MOVE.L FPU_Type,D0
LSL.L #$03,D0
LEA.L STR502,A1
ADDA.L D0,A1
MOVE.L A1,-(A7)
MOVE.L A0,-(A7)
PEA.L STR500
JSR _printf
LEA.L $0C(A7),A7
MOVEM.L (A7)+,D0/A0-A1
RTS
******************** Print Cache Control Register Status ****************
Cache_Status:
MOVE.L CPU_Type,D0
CMPI.W #$0000,D0
BEQ S1160
CMPI.W #$0001,D0
BEQ S1170
MOVE.L #$00000002,D0 ;D0.W = CNTRL REG (GURU if not right)
BSR ReadCR ;D0 Contains CACR Value.
MOVE.L D0,D4
LEA.L ITS_OFF,A1
BTST.L #$0000,D4
BEQ S1102
LEA.L ITS_ON,A1
S1102: LEA.L ICacheE,A2
JSR S1180
LEA.L ITS_OFF,A1
BTST.L #$0001,D4
BEQ S1104
LEA.L ITS_ON,A1
S1104: LEA.L ICacheF,A2
JSR S1180
MOVE.L CPU_Type,D0
CMPI.W #$0002,D0
BEQ S1150
LEA.L ITS_OFF,A1
BTST.L #$0004,D4
BEQ S1106
LEA.L ITS_ON,A1
S1106: LEA.L ICacheB,A2
JSR S1180
LEA.L ITS_OFF,A1
BTST.L #$0008,D4
BEQ S1108
LEA.L ITS_ON,A1
S1108: LEA.L DCacheE,A2
JSR S1180
LEA.L ITS_OFF,A1
BTST.L #$0009,D4
BEQ S1110
LEA.L ITS_ON,A1
S1110: LEA.L DCacheF,A2
JSR S1180
LEA.L ITS_OFF,A1
BTST.L #$000C,D4
BEQ S1112
LEA.L ITS_ON,A1
S1112: LEA.L DCacheB,A2
JSR S1180
LEA.L ITS_OFF,A1
BTST.L #$000D,D4
BEQ S1114
LEA.L ITS_ON,A1
S1114: LEA.L WriteAlloc,A2
JSR S1180
S1150:
PEA.L LineFeed
JSR _printf
ADDQ.L #$04,A7
RTS
S1160: LEA.L STR117,A2
JSR PrintError
RTS
S1170: LEA.L STR118,A2
JSR PrintError
RTS
S1180: MOVE.L A1,-(A7)
MOVE.L A2,-(A7)
JSR _printf
ADDQ.L #$08,A7
RTS
*************************************************************************
Write_To_CACR:
MOVE.L CPU_Type,D5
CMPI.W #$0000,D5
BEQ S1160
CMPI.W #$0001,D5
BEQ S1170
MOVE.W (A0),D2
MOVEQ.L #$00,D3
MOVE.B D2,D3
ANDI.W #$0001,D3
ANDI.W #$FF00,D2
CMPI.W #$3000,D2
BEQ S1202
CMPI.W #$3100,D2 ;ICache
BEQ S1204
CMPI.W #$3200,D2
BEQ S1206
CMPI.W #$3300,D2
BEQ S1208
CMPI.W #$3400,D2
BEQ S1210
CMPI.W #$3500,D2
BEQ S1212
BRA S1250
S1202: MOVEQ.L #$00,D0
BRA S1230
S1204: MOVEQ.L #$00,D4
BRA S1220
S1206: MOVEQ.L #$04,D4
BRA S1220
S1208: MOVEQ.L #$08,D4
BRA S1220
S1210: MOVEQ.L #$0C,D4
BRA S1220
S1212: MOVEQ.L #$0D,D4
S1220:
MOVE.L #$00000002,D0 ;D0.W = CNTRL REG (GURU if not right)
BSR ReadCR ;D0 Contains Current CACR Value.
BSET.L #$0003,D0
CMPI.W #$0003,D5
BNE S1226
BSET.L #$000B,D0
S1226:
TST.B D3
BNE S1228
BCLR.L D4,D0
BRA S1230
S1228: BSET.L D4,D0
S1230:
MOVE.L #$00000002,D1 ;D1.W = CNTRL REG (GURU if not right)
BSR WriteCR
S1250:
RTS
*************************************************************************
PrintError:
MOVE.L A2,-(A7)
PEA.L STR115
JSR _printf
ADDQ.L #$04,A7
MOVEA.L (A7)+,A2
RTS
******************** Control Registers **********************************
*** D0.W defines the Control Register (CR) to Read.
*** Result in D0.L
ReadCR:
MOVEM.L A5/A6,-(A7)
MOVEA.L _SysBase,A6
JSR _LVODisable(A6)
LEA.L XCode,A5
MOVE.W #$4E7A,$00(A5) ;MOVEC.L CR,D0
MOVE.W D0,$02(A5)
MOVE.W #$4E73,$04(A5) ;RTE
MOVEA.L _SysBase,A6
JSR _LVOSupervisor(A6)
JSR _LVOEnable(A6)
MOVEM.L (A7)+,A5/A6
RTS
*************************************************************************
*** D1.W defines the Control Register (CR) to Write.
*** D0.L is the data to Write.
WriteCR:
MOVEM.L A5/A6,-(A7)
MOVEA.L _SysBase,A6
JSR _LVODisable(A6)
LEA.L XCode,A5
MOVE.W #$4E7B,$00(A5) ;MOVEC.L D0,CR
MOVE.W D1,$02(A5)
MOVE.W #$4E73,$04(A5) ;RTE
MOVEA.L _SysBase,A6
JSR _LVOSupervisor(A6)
JSR _LVOEnable(A6)
MOVEM.L (A7)+,A5/A6
RTS
*************************************************************************
*** Result in D0.W
ReadSR:
MOVEM.L A5/A6,-(A7)
LEA.L XCode,A5
MOVE.W #$40C0,$00(A5) ;MOVE.W SR,D0
MOVE.W #$4E73,$02(A5) ;RTE
MOVEA.L _SysBase,A6
JSR _LVOSupervisor(A6)
MOVEM.L (A7)+,A5/A6
RTS
***********************************************************
*** D0.W defines the MMU Control Register (CR) to Read.
*** Result in (A0), where A0 --> XData.
ReadMMUCR:
MOVEM.L A5/A6,-(A7)
MOVEA.L _SysBase,A6
JSR _LVODisable(A6)
LEA.L XCode,A5
LEA.L XData,A0
MOVE.W #$F010,$00(A5) ;PMOVE.SZ MMUCR,(A0)
MOVE.W D0,$02(A5)
MOVE.W #$4E73,$04(A5) ;RTE
MOVEA.L _SysBase,A6
JSR _LVOSupervisor(A6)
JSR _LVOEnable(A6)
MOVEM.L (A7)+,A5/A6
RTS
XCode: DC.W $0000,$0000
DC.W $0000,$0000
XData: DC.W $0000,$0000
DC.W $0000,$0000
DC.W $0000,$0000
****************** CPU and FPU Types **********************
CPU_FPU_Type:
MOVEM.L D0/D1/A0/A6,-(A7)
MOVEA.L _SysBase,A6
LEA.L AttnFlags(A6),A0
LEA.L $01(A0),A0
MOVEQ.L #$00,D0
MOVE.B (A0),D0
MOVE.L D0,D1
ANDI.B #$0F,D1
MOVE.L D1,CPU_Type
CMPI.B #$03,D1
BNE S1402
MOVE.L #$00000002,CPU_Type
BRA S1404
S1402: CMPI.B #$07,D1
BNE S1404
MOVE.L #$00000003,CPU_Type
S1404: MOVE.L D0,D1
ANDI.W #$00F0,D1
LSR.L #$04,D1
MOVE.L D1,FPU_Type
CMPI.B #$03,D1
BNE S1406
MOVE.L #$00000002,FPU_Type
BRA S1408
S1406: CMPI.B #$07,D1
BNE S1408
MOVE.L #$00000003,FPU_Type
S1408:
MOVEM.L (A7)+,D0/D1/A0/A6
RTS
****************** Strings *******************************************
CNOP 0,2
TaskName: DC.B 'AmigaBench',$00
CNOP 0,2
_TWspec: DC.B 'CON:0/0/640/200/ AmigaBench',$00
CNOP 0,2
Dump01 DC.B ' Program Subroutine And Global Data Addresses:',$0A,$0A
DC.B ' _main: $%08lx',$0A
DC.B ' Proc0Opt00: $%08lx',$0A
DC.B $00
CNOP 0,2
Dump02 DC.B ' Proc0Opt20: $%08lx',$0A
DC.B ' Proc1Opt00: $%08lx',$0A
DC.B $00
CNOP 0,2
Dump03 DC.B ' Proc2Opt00: $%08lx',$0A
DC.B ' Froc6Opt00: $%08lx',$0A
DC.B $00
CNOP 0,2
Dump04 DC.B ' Proc8Opt20: $%08lx',$0A
DC.B ' Proc8Opt00: $%08lx',$0A
DC.B $00
CNOP 0,2
Dump05 DC.B ' Func2Opt00: $%08lx',$0A
DC.B ' _A4Ref: $%08lx',$0A
DC.B $0A,$00
CNOP 0,2
PrtReg DC.B ' CACR = $%08lx',$0A,$00
CNOP 0,2
CmdRepeat DC.B $0A,$0A
DC.B $9B,$30,$33,$41
DC.B $9B,$4A
DC.B $00
CNOP 0,2
CmdPrompt DC.B 'Command:> ',$00
CNOP 0,2
EntPrompt DC.B 'Enter Cache Command:> ',$00
CNOP 0,2
LineFeed DC.B $0A
DC.B $00
CNOP 0,2
Title DC.B $0C,$9B,$33,$33,$6D
DC.B ' ****<<<'
DC.B $9B,$37,$3B,$33,$31,$6D
DC.B ' Amiga Assembly Benchmark Programs, 03 Aug 1989, By ALA '
DC.B $9B,$30,$3B,$33,$33,$6D
DC.B '>>>****'
DC.B $9B,$33,$31,$6D
DC.B $0A,$0A,$00
CNOP 0,2
ITS_OFF DC.B 'OFF',$00
CNOP 0,2
ITS_ON DC.B $9B,$33,$33,$6D
DC.B 'ON '
DC.B $9B,$33,$31,$6D
DC.B $00
CNOP 0,2
ICacheE DC.B ' Cache Status:',$0A,$0A
DC.B ' Instruction Cache: %s',$0A,$00
CNOP 0,2
ICacheF DC.B ' Freeze Instruction Cache: %s',$0A,$00
CNOP 0,2
ICacheB DC.B ' Instruction Burst: %s',$0A,$00
CNOP 0,2
DCacheE DC.B ' Data Cache: %s',$0A,$00
CNOP 0,2
DCacheF DC.B ' Freeze Data Cache: %s',$0A,$00
CNOP 0,2
DCacheB DC.B ' Data Burst: %s',$0A,$00
CNOP 0,2
WriteAlloc DC.B ' Write Allocate: %s',$0A,$00
CNOP 0,2
STR101 DC.B $9B,$33,$33,$6D
DC.B ' Dhrystone Benchmark Program',$0A
DC.B $9B,$33,$31,$6D
DC.B $00
CNOP 0,2
STR102 DC.B ' Enter ',$27,' ?<cr> ',$27,' For Command List.'
DC.B $0A,$0A,$00
CNOP 0,4
DC.L $00000000
STR103 DC.B 'DHRYSTONE PROGRAM, SOME STRING',$00
CNOP 0,4
DC.L $00000000
STR104 DC.B 'DHRYSTONE PROGRAM, 2',$27,'ND STRING',$00
CNOP 0,2
STR105 DC.B $9B,$33,$33,$6D
DC.B ' BenchTime (50*Seconds) for %ld Passes ='
DC.B $9B,$33,$31,$6D
DC.B ' %ld '
DC.B $0A,$0A,$00
CNOP 0,2
STR106 DC.B $9B,$33,$33,$6D
DC.B ' This System Benchmarks at'
DC.B $9B,$33,$31,$6D
DC.B ' %ld '
DC.B $9B,$33,$33,$6D
DC.B 'Dhrystones/sec.',$0A
DC.B $9B,$33,$31,$6D
DC.B $00
CNOP 0,2
STR107: DC.B ' Standard 68000 Assembly Version.',$0A,$0A,$0A,$00
CNOP 0,2
STR108: DC.B ' Optimized 68000 Assembly Version.',$0A,$0A,$0A,$00
CNOP 0,2
STR109 DC.B ' Optimized 68020 Assembly Version',$0A,$0A,$0A,$00
CNOP 0,2
STR110 DC.B ' Command List:',$0A,$0A
DC.B ' ? ;This Command List',$0A
DC.B ' q ;Quit',$0A
DC.B ' ca ;Check Subr and Global Data Addresses.',$0A
DC.B ' cs ;Cache Status.',$0A
DC.B ' wc ;Write Cache.',$0A,$0A
DC.B ' 1 ;Std 68000 Assembly Dhrystone',$0A
DC.B ' 2 ;Opt 68000 Assembly Dhrystone',$0A
DC.B ' 3 ;Opt 68020 Assembly Dhrystone',$0A
DC.B $00
CNOP 0,2
STR115 DC.B $9B,$30,$32,$41
DC.B $9B,$4A
DC.B $9B,$30,$3B,$33,$33,$6D
DC.B ' %s',$0A
DC.B $9B,$30,$3B,$33,$31,$6D
DC.B $00
CNOP 0,2
STR116: DC.B 'Error, 68000 and 68010 Can Not Run 68020 Code.',$00
CNOP 0,2
STR117: DC.B 'Error, The 68000 Has No Internal Cache.',$00
CNOP 0,2
STR118: DC.B 'Error, The 68010 Has No Internal Cache.',$00
CNOP 0,2
STR119: DC.B ' Command:',$0A,$0A
DC.B ' 0 ;Clear ALL Cache Bits.',$0A
DC.B ' 11[0] ;Instruction Cache ON[OFF].',$0A
DC.B ' 21[0] ;Instruction Burst ON[OFF].',$0A
DC.B ' 31[0] ;Data Cache ON[OFF].',$0A
DC.B ' 41[0] ;Data Burst ON[OFF].',$0A
DC.B ' 51[0] ;Write_Allocate ON[OFF].',$0A
DC.B $00
CNOP 0,2
STR120: DC.B $0A
DC.B ' E.G., 11 Turns ICache ON, 10 Turns ICache OFF',$0A
DC.B $0A,$00
CNOP 0,2
STR500: DC.B $9B,$33,$33,$6D
DC.B ' CPU / FPU: '
DC.B $9B,$33,$31,$6D
DC.B '%s/%s',$0A,$00
STR501: DC.B '68000',$00,$00,$00
DC.B '68010',$00,$00,$00
DC.B '68020',$00,$00,$00
DC.B '68030',$00,$00,$00
DC.B '68040',$00,$00,$00
DC.B '?????',$00,$00,$00
STR502: DC.B '-----',$00,$00,$00
DC.B '68881',$00,$00,$00
DC.B '68882',$00,$00,$00
DC.B '?????',$00,$00,$00
DC.B '?????',$00,$00,$00
DC.B '?????',$00,$00,$00
****************** Fixed Constants ************************************
ThisTCB: DS.L $01
CPU_Type: DS.L $01
FPU_Type: DS.L $01
SaveA7: DS.L $01
crtFile: DS.L $01
PrgCmdBuf: DS.L $01
PrgCmdLen: DS.L $01
_A4Ref:
_IntGlb: DS.B $04 ;$0000
_BoolGlb: DS.B $04 ;$0004
_Char1Glb: DS.B $04 ;$0008
_Char2Glb: DS.B $04 ;$000C
_Array1Glb: DS.B $68 ;$0010
_Array2Glb: DS.B $1454 ;$0078
_PtrGlb: DS.B $04 ;$14CC
_PrtGlbNxt: DS.B $04 ;$14D0
_Buffer: DS.B $140
Buf01: DS.B $30
Buf02: DS.B $30
************************* Thats All Folks! *******************************
END