************************************* * 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 ;'?' Input? BEQ Command_List ;Yes --- Show Command List. CMPI.W #$7100,D0 ;'q' Input? BEQ EndRun ;Yes --- Quit Run. CMPI.W #$3100,D0 ;'1' Input? BEQ DhryStd00 ;Yes --- Do Dhrystone Std 68000. CMPI.W #$3200,D0 ;'2' Input? BEQ DhryOpt00 ;Yes --- Do Dhrystone Opt 68000. CMPI.W #$3300,D0 ;'3' Input? BEQ DhryOpt20 ;Yes --- Do Dhrystone Opt 68020. BRA M007 M006: OR.W #$2020,D0 CMPI.W #$6361,D0 ;'ca' Input? BEQ Check_Addr ;Yes --- Check Routine Addresses. CMPI.W #$6373,D0 ;'cs' Input? BEQ Read_Cache ;Yes --- Read Cache. CMPI.W #$7763,D0 ;'wc' 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,' ? ',$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