mirror of
https://github.com/elliotnunn/mac-rom.git
synced 2024-12-22 23:29:27 +00:00
4325cdcc78
Resource forks are included only for .rsrc files. These are DeRezzed into their data fork. 'ckid' resources, from the Projector VCS, are not included. The Tools directory, containing mostly junk, is also excluded.
390 lines
14 KiB
Plaintext
390 lines
14 KiB
Plaintext
;---------------------------------------------------------------------------
|
|
; 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):
|
|
;
|
|
; <SM3> 12/13/93 PN Roll in KAOs and Horror changes to support Malcom and AJ
|
|
; machines.
|
|
; <SM2> 5/2/92 kc Roll in Horror. Comments follow:
|
|
; <H2> 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<<StartupBit ;$0001
|
|
Restart equ 1<<RestartBit ;$0002
|
|
STM equ 1<<STMBit ;$0004
|
|
ATrap equ 1<<ATrapBit ;$0008
|
|
RBI equ 1<<RBIBit ;$0010
|
|
|
|
ENDR
|
|
|
|
;
|
|
; USTtest - the structure which defines the data for a single test.
|
|
; There is one test in the ROM which knows about all the subtests there. This test
|
|
; has one entry in a test table which has the following structure:
|
|
;
|
|
|
|
USTTest STRUCTURE 0
|
|
DSF.L TTest_ID ;ID for this test <T4>
|
|
DSF.L TEntryPtr ;Pointer to the entry point <T4>
|
|
DSF.L TNamePtr ;Pointer to the name of this test (or NULL) <T4>
|
|
DSF.L TCodeSize ;Size of the code (in bytes, can be NULL) <T4>
|
|
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 <T4>
|
|
DSF.L STEntryPtr ;Pointer to the entry point <T4>
|
|
DSF.L STNamePtr ;Pointer to the name of this subtest (or NULL)<T4>
|
|
DSF.L STCodeSize ;Size of the code (in bytes, can be NULL)<T4>
|
|
DSF.L STParamSize ;Size of the parameter block <T4>
|
|
DSF.L STResultSize ;Size of the results block <T4>
|
|
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 ; <T4>
|
|
|
|
USTMainTest_ID ds.b 1 ;#1 - Test to handle all non-CTE tests in ROM <T4>
|
|
SONIC_Test_ID ds.b 1 ;#2 - Test for the SONIC chip in eclipse/spike <T4>
|
|
|
|
MaxTest_ID equ *-1 ;max test number <T4>
|
|
|
|
ENDR ; <T4>
|
|
;
|
|
; 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 <T4>
|
|
TimeSoundInts ds.b 1 ;$99 - only in Apollo ROM <T4>
|
|
TestC96_ID ds.b 1 ;$9A <T4>
|
|
SONIC_BitMarch_ID ds.b 1 ;$9B <T4>
|
|
SONIC_CAMDMA_ID ds.b 1 ;$9C <T4>
|
|
SONIC_Loopback_ID ds.b 1 ;$9D <T4>
|
|
TestGSCRegs_ID ds.b 1 ;$9E
|
|
PGESelfTest_ID ds.b 1 ;$9F
|
|
TestCSCRegs_ID ds.b 1 ;$A0 <H3>
|
|
|
|
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) <T4>
|
|
DSF.W TLSubTest_ID ;test list SubTest ID (note: this is a word) <T4>
|
|
DSF.W TLrunflags ;Flags indicating when to run this test <T4>
|
|
|
|
DSF.L TLModifier ; the testParams structure modifier
|
|
ENDSTRUCT
|
|
|
|
MACRO
|
|
CPUTestListItem &items
|
|
STRUCTITEM CPUTestList, &items
|
|
ENDM
|
|
|
|
;------------------------------ to next <T3> 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 <T3> above
|
|
|
|
ENDIF
|