;--------------------------------------------------------------------------- ; File: USTMacros.a ; ; Contains: This file contains macros, record definitions and equates that ; are used by the test software. ; ; Written by: Scott Smyers ; ; Copyright: © 1990, 1992-1993 by Apple Computer, Inc., all rights reserved. ; ; Change History (most recent first): ; ; 12/13/93 PN Roll in KAOs and Horror changes to support Malcom and AJ ; machines. ; 5/2/92 kc Roll in Horror. Comments follow: ;

3/6/92 AL Extended the USTGlobals structure to include all of the data ; needed to keep track of CTE v2.1 DTM parameters (for the GI ; routine ExecuteDTM). Also enhanced the USTTests and USTSubtests ; structure definitions to match the CTE v2.1 Test and Subtest ; info ; structures and added support for StandardTestParams. Modified ; the ; CopyRamToPRAM and CopyPRAMToRam macros to handle long branches ; to the routines. When USTStartTest.a outgrew its allocated space ; in the ROM and some of the USTxxx.a files were ; moved to the new USTStartTest1.a file, an addressing range ; problem came up. This solves it (for these routines). ; <4> 4/2/91 CCH Rolled in changes from Scott Smyers': Changed subtest ID to a ; word and added a word sized test ID to CPUTestList structure. ; Added subtest IDs for SONIC tests and 53C96 test. Changed some ; ambiguous structure element names to be unique between ; structures. ; <3> 3/13/91 CCH Rolled in RBI changes from Scott Smyers. ; <2> 1/14/91 CCH Rolled in Scott Smyer's changes. ; <1> 12/14/90 SS first checked in ; ; ;--------------------------------------------------------------------------- TITLE 'USTMacros.a' IF &TYPE('USTMacros')='UNDEFINED' THEN USTMacros EQU 1 UTEChar EQU '!' ;Character prefix for CTE command in STM ; ; The following structure is used by the routines in this file. By convention, each ; routine expects a0 to point to this structure upon entry, except for the initialization ; routine, which creates this structure and points a0 to it. ; ; ; Aaron Ludtke - 11/4/91 ; ; This structure has been extended to make room for the parameters to the GI_ExecuteDTM ; routine. The ROM-based environments that utilize CTE v2.1 or later will require these ; parameters to be set up and initialized. By adding them to the end of the USTGlobals, ; they will always be available and can be referenced from a5, as the rest of the ; universal diagnostic information is. The stack will be adjusted by the size of this global ; area, and the fields will be filled out to reflect the information necessary for the call. ; ; The RelocateGlobals routine should not have to change to account for this modification, ; and a new routine will has been added to fill in the info to set up for the GI_ExecuteDTM ; call. That routine name is, oddly enough, SetupForExecuteDTM. It exists in the file ; USTEnvirons.a, where the Serial Test Manager and In House Tester hook reside. ; ; This is intended to be a "universal" structure that could be used by four of the ROM ; based environments (startup, RBI, IHT, STM - note that the ATrap does not need the ; USTGlobals because the information kept in there [bases valid flags, product info ptr, ; etc.] can be derived from the OS). It should also be able to use the SetupForExecuteDTM ; routine, if I work it right. I'll have to check into that... ; ; This structure was enhanced (2/2/92) to support a standardTestParams structure, which ; is used by Tests to further refine their performance. The executionOptions field ; testParams will be set to point to this structure after it has been filled out by the ; SetupForExecuteDTM routine. USTGlobals RECORD 0, Increment CmdNumber ds.l 1 ;Current command number CallFrameSize ds.l 1 ;Size of the call stack frame for CTE command RunMode ds.w 1 ;the mode flags (i.e., restart, startup, etc.) USTTestList ds.l 1 ;Pointer to a list of tests to execute USTSubTestList ds.l 1 ;Pointer to a list of subtests for each test GlobCPUTestList ds.l 1 ;Pointer to the CPU specific test list in ROM <2> CTEGlobals ds.l 1 ;Pointer to the CTE Globals ErrorHandler ds.l 1 ;Pointer to error handler, if any WarmStartConst ds.l 1 ;Warm start constant (if =#WmStConst, warm start) DcdrInfPtr ds.l 1 ;Decoder information pointer PrdctInfPtr ds.l 1 ;Pointer to the product info record. BasesValidFlags ds.l 1 ;Bases valid flags, as returned by Get Hardware Info. ; Here's the new GI_ExecuteDTM paramters stuff: ;; This is the CTEDTMExecutionOptions structure. See the What's New In CTE 2.0 documentation ; for a more thorough description of what these fields mean: exOpUserInfo ds.l 1 ; a pointer to user-specific info that CTE knows nothing about exOpProcessorType ds.l 1 ; the gestalt-enumerated processor (68000 = 1, 68040 = 5, etc.) exOpExecutionMode ds.l 1 ; the CTE execution mode being used (executeTest, etc.) exOpTestParams ds.l 1 ; a pointer to the test parameters exOpTestResultsOverride ds.l 1 exOpSubtestParamsOverride ds.l 1 exOpSubtestResultsOverride ds.l 1 exOpIdleMethod ds.l 1 exOpIdleMethodArg ds.l 1 ;; This is the testInfo structure: tInfoUserInfo ds.l 1 ; a pointer to user-specific info that CTE knows nothing about tInfoID ds.l 1 ; the ID number of the test (a la CTE) tInfoFunctionEntry ds.l 1 ; the address of the test tInfoParamsSize ds.l 1 ; size (in bytes) of the test parameters (can usually be NULL) tInfoResultsSize ds.l 1 ; ditto for the test results size ;; This is the subtestInfo structure: sInfoUserInfo ds.l 1 ; a pointer to user-specific info that CTE knows nothing about sInfoID ds.l 1 ; the ID number of the subtest (a la CTE) sInfoFunctionEntry ds.l 1 ; the address of the subtest sInfoParamsSize ds.l 1 ; size (in bytes) of the subtest parameters (can usually be NULL) sInfoResultsSize ds.l 1 ; ditto for the subtest results size ;; This is the executionResults structure: exResErr ds.l 1 ; the DTM error exResTestParams ds.l 1 exResTestResults ds.l 1 exResSubtestParams ds.l 1 exResSubtestResults ds.l 1 ;; This is the StdTestParams structure: stdModifier ds.l 1 ; the "modifier" field stdMachineType ds.l 1 ; the box flag (gestalt) machine type ; The Chunk Table should be the last thing in this record, in case it needs to be extended ; in the future: ChunkTable ds.l 1 ;Chunk table comes after sizeofUSTGlobals equ * ;Size of preceding structure ENDR SizeOfCTEGlobals equ 54*1024 ;give 54K to the CTE globals ; ; The following record defines the bits which determine under what conditions each ; machine specific test can execute. ; RunBits RECORD 0,increment StartupBit ds.b 1 ;System power up - bit 0 RestartBit ds.b 1 ;System restart - bit 1 STMBit ds.b 1 ;Serial Test Manager - bit 2 ATrapBit ds.b 1 ;_TestManager A trap - bit 3 RBIBit ds.b 1 ;ROM Burnin - bit 4 ; Mask values Startup equ 1< DSF.L TEntryPtr ;Pointer to the entry point DSF.L TNamePtr ;Pointer to the name of this test (or NULL) DSF.L TCodeSize ;Size of the code (in bytes, can be NULL) DSF.L TParamSize ; Size of the parameter block DSF.L TResultSize ; Size of the results block ENDSTRUCT ; ; The following macro creates an entry in the test table ; MACRO USTTestItem &items STRUCTITEM USTTest, &items ENDM ; ; USTSubtest - the structure which defines the data for a single subtest. ; Each test in the main subtest table has a single entry in the main test table. Each ; entry has the following structure: ; USTSubtest STRUCTURE 0 DSF.L STSubtest_ID ;ID for this subtest DSF.L STEntryPtr ;Pointer to the entry point DSF.L STNamePtr ;Pointer to the name of this subtest (or NULL) DSF.L STCodeSize ;Size of the code (in bytes, can be NULL) DSF.L STParamSize ;Size of the parameter block DSF.L STResultSize ;Size of the results block ENDSTRUCT ; ; The following macro creates an entry in the main test table: ; MACRO USTSubtestItem &items STRUCTITEM USTSubtest, &items ENDM ; ; The following defines the test ID for the one test in ROM ; USTTestIDs RECORD 1, Increment ; USTMainTest_ID ds.b 1 ;#1 - Test to handle all non-CTE tests in ROM SONIC_Test_ID ds.b 1 ;#2 - Test for the SONIC chip in eclipse/spike MaxTest_ID equ *-1 ;max test number ENDR ; ; ; Following are the equates which define the subtest ID number for each of the subtests. ; StartingSubtestID EQU $80 ;Starting subtest ID number USTSubtestIDs RECORD StartingSubtestID, Increment MapRamDataTest_ID ds.b 1 ;$80 MapRamUniqTest_ID ds.b 1 ;$81 VramDataTest_ID ds.b 1 ;$82 VramAddrTest_ID ds.b 1 ;$83 SCCRegTest_ID ds.b 1 ;$84 SCCLoopTest_ID ds.b 1 ;$85 SCCTimerTest_ID ds.b 1 ;$86 VIATest_ID ds.b 1 ;$87 TestSCSI_ID ds.b 1 ;$88 TestASC_ID ds.b 1 ;$89 PramTest_ID ds.b 1 ;$8A TestRBV_ID ds.b 1 ;$8B TestSWIM_ID ds.b 1 ;$8C Float_Test_ID ds.b 1 ;$8D TestPGC_ID ds.b 1 ;$8E FMCRegTest_ID ds.b 1 ;$8F FMCCacheTest_ID ds.b 1 ;$90 OSSRegTest_ID ds.b 1 ;$91 OSSIntTest_ID ds.b 1 ;$92 RPUTest_ID ds.b 1 ;$93 EgretTest_ID ds.b 1 ;$94 TestSndInts_ID ds.b 1 ;$95 TestCLUT_ID ds.b 1 ;$96 TestVRAM_ID ds.b 1 ;$97 TestPWM_ID ds.b 1 ;$98 - only in Apollo ROM TimeSoundInts ds.b 1 ;$99 - only in Apollo ROM TestC96_ID ds.b 1 ;$9A SONIC_BitMarch_ID ds.b 1 ;$9B SONIC_CAMDMA_ID ds.b 1 ;$9C SONIC_Loopback_ID ds.b 1 ;$9D TestGSCRegs_ID ds.b 1 ;$9E PGESelfTest_ID ds.b 1 ;$9F TestCSCRegs_ID ds.b 1 ;$A0

MaxSubtest_ID equ *-1 ;maximum subtest number ENDR ; ; The following structure describes one item in the table of machines for which there ; exists a cpu specific test table. If a CPU does not have an element in this table, ; there is a default table which contains the tests which previously ran at startup ; on all machines. By convention, this default table takes up the last position in ; the table. ; ; The macro defines one item in the table. ; CPUList STRUCTURE 0 DSF.W cpuBoxFlag ;CPU Box flag DSF.L CPUTestListPtr ;Pointer to CPU specific test table ENDSTRUCT MACRO CPUListItem &items STRUCTITEM CPUList, &items ENDM ; ; The following structure describes each element in the cpu specific test table. ; ; The macro defines one item in the table. ; ; NOTE: The ID entries for the tests and subtests are defined as words in this table ; because it could potentially save lots of space (given all the tables that are created ; and all of the entries, this could be quite a few bytes). However, this won't be a ; problem, even though CTE defines IDs as longs. The reason is this: when tests and ; subtests are ported over to the ROM, we can assign them any ID values we like. This ; is possible because we own the headers and everything. So, we will just make sure to ; keep their IDs within 16 bits. It seems unlikely that we'll use up more than 65,000 ; ID values in the ROM. ; ; NOTE: This structure was modified to support the inclusion of a standard ; test params "modifier" field, which can be unique for any number of a given ; test. To use the modifier, a separate entry must exist in the machine test ; lists for each "modified" DTM. These entries will differ only in their modifier. CPUTestList STRUCTURE 0 DSF.W TLTest_ID ;test list Test ID (note that this is a word) DSF.W TLSubTest_ID ;test list SubTest ID (note: this is a word) DSF.W TLrunflags ;Flags indicating when to run this test DSF.L TLModifier ; the testParams structure modifier ENDSTRUCT MACRO CPUTestListItem &items STRUCTITEM CPUTestList, &items ENDM ;------------------------------ to next below ; ; The following Macro defines the calling convention for the 'copy ram to pram' ; routine. ; ; In order to execute this routine, the following registers must be set up: ; ; a0 - decoder info pointer ; a1 - product info pointer ; a2 - via1 base address ; ; NOTE: These two macros had to be changed to account for long branches to ; the Copy... routines. They use a3 but preserve it across the calls. MACRO _CopyRAMToPRAM &RAMAddr, &PRAMDest, &NumBytes ;macro to call the Copy To PRAM subroutine move.l a3,-(sp) ; preserve a3 across this call pea &RAMAddr ;push the source RAM address move.w &PRAMDest,-(sp) ;push the PRAM destination value move.w &NumBytes,-(sp) ;push the number of bytes lea @CR2P,a3 move.l a3,-(sp) BigLea CopyRAMToPRAM,a3 jmp (a3) @CR2P lea 8(sp),sp ;and clean up the stack movea.l (sp)+,a3 ; restore a3 ENDM ; ; The following Macro defines the calling convention for the 'copy pram to ram' ; routine. ; ; In order to execute this routine, the following registers must be set up: ; ; a0 - decoder info pointer ; a1 - product info pointer ; a2 - via1 base address ; ; NOTE: These two macros had to be changed to account for long branches to ; the Copy... routines. They use a3 but preserve it across the calls. MACRO _CopyPRAMToRAM &PRAMSource, &RAMDest, &NumBytes ;macro to call the Copy To PRAM subroutine move.l a3,-(sp) ; preserve a3 across this call move.w &PRAMSource,-(sp) ;push the PRAM source address value pea &RAMDest ;push the destination RAM address move.w &NumBytes,-(sp) ;push the number of bytes lea @CP2R,a3 move.l a3,-(sp) BigLea CopyPRAMToRAM,a3 jmp (a3) @CP2R lea 8(sp),sp ;and clean up the stack movea.l (sp)+,a3 ; restore a3 ENDM ;------------------------------ to next above ENDIF