mirror of
https://github.com/elliotnunn/boot3.git
synced 2024-12-29 11:31:20 +00:00
320 lines
8.3 KiB
C
320 lines
8.3 KiB
C
|
/*
|
|||
|
File: UniversalEqu.h
|
|||
|
|
|||
|
Contains: low-level equates for accessing the Universal ROM information
|
|||
|
|
|||
|
Written by: Craig Prouse
|
|||
|
|
|||
|
Copyright: <EFBFBD> 1993 by Apple Computer, Inc., all rights reserved.
|
|||
|
|
|||
|
Change History (most recent first):
|
|||
|
|
|||
|
<1> 11/10/93 fau first checked in
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
#ifndef __UNIVERSALEQU__
|
|||
|
#define __UNIVERSALEQU__
|
|||
|
|
|||
|
|
|||
|
/* private low-memory globals for Universal info */
|
|||
|
|
|||
|
enum {
|
|||
|
AddrMapFlags = 0x0DD0, // RAM copy of the machine<6E>s BasesValid flags
|
|||
|
AddrMapFlags1 = 0x2400,
|
|||
|
AddrMapFlags2 = 0x2404,
|
|||
|
UnivROMFlags = 0x0DD4, // RAM copy of the machine<6E>s ExtValid flags
|
|||
|
UnivROMFlags1 = 0x2408,
|
|||
|
UnivROMFlags2 = 0x240C,
|
|||
|
UnivInfoPtr = 0x0DD8 // points to the machine<6E>s ProductInfo record
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// --------------------------------------------------------------------------------------------
|
|||
|
// DecoderInfo Record
|
|||
|
//
|
|||
|
// This record contains information pertaining to the memory decoder
|
|||
|
// of a particular machine.
|
|||
|
//
|
|||
|
// If you change the DecoderInfo record, bump the version up by 1.
|
|||
|
//--------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
#define DecoderInfoVersion 1
|
|||
|
|
|||
|
|
|||
|
// This record actually precedes the DecoderInfo record below. Normally accessed only
|
|||
|
// from assembly language using negative offsets, a pointer to this information can
|
|||
|
// also be generated by subtracting the size of this record from the address of the
|
|||
|
// DecoderInfo record.
|
|||
|
|
|||
|
struct DecoderInfoPrivate {
|
|||
|
unsigned long defaultBases;
|
|||
|
unsigned long defaultBases1;
|
|||
|
unsigned long defaultBases2;
|
|||
|
unsigned long defExtFeatures;
|
|||
|
unsigned long defExtFeatures1;
|
|||
|
unsigned long defExtFeatures2;
|
|||
|
unsigned char avoidVIA1A;
|
|||
|
unsigned char avoidVIA1B;
|
|||
|
unsigned char avoidVIA2A;
|
|||
|
unsigned char avoidVIA2B;
|
|||
|
long checkForProc;
|
|||
|
unsigned char addrMap;
|
|||
|
unsigned char decoderInfoVers;
|
|||
|
unsigned char filler [2];
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct DecoderInfo {
|
|||
|
|
|||
|
void * ROMAddr;
|
|||
|
void * DiagROMAddr;
|
|||
|
void * VIA1Addr;
|
|||
|
void * SCCRdAddr;
|
|||
|
void * SCCWrAddr;
|
|||
|
void * IWMAddr;
|
|||
|
void * PWMAddr;
|
|||
|
void * SoundAddr;
|
|||
|
void * SCSIAddr;
|
|||
|
void * SCSIDackAddr;
|
|||
|
void * SCSIHskAddr;
|
|||
|
void * VIA2Addr;
|
|||
|
void * ASCAddr;
|
|||
|
void * RBVAddr;
|
|||
|
void * VDACAddr;
|
|||
|
void * SCSIDMAAddr;
|
|||
|
void * SWIMIOPAddr;
|
|||
|
void * SCCIOPAddr;
|
|||
|
void * OSSAddr;
|
|||
|
void * FMCAddr;
|
|||
|
void * RPUAddr;
|
|||
|
void * OrwellAddr;
|
|||
|
void * JAWSAddr;
|
|||
|
void * SonicAddr;
|
|||
|
void * SCSI96Addr1;
|
|||
|
void * SCSI96Addr2;
|
|||
|
void * DAFBAddr;
|
|||
|
void * PSCAddr;
|
|||
|
void * ROMPhysAddr;
|
|||
|
void * PatchROMAddr;
|
|||
|
void * NewAgeAddr;
|
|||
|
void * Unused31Addr;
|
|||
|
|
|||
|
void * SingerAddr;
|
|||
|
void * DSPAddr;
|
|||
|
void * MACEAddr;
|
|||
|
void * MUNIAddr;
|
|||
|
void * AMICAddr;
|
|||
|
void * PrattAddr;
|
|||
|
void * SWIM3Addr;
|
|||
|
void * AwacsAddr;
|
|||
|
void * CivicAddr;
|
|||
|
void * SebastianAddr;
|
|||
|
void * BARTAddr;
|
|||
|
void * GrandCentralAddr;
|
|||
|
void * Unused44Addr;
|
|||
|
void * Unused45Addr;
|
|||
|
void * Unused46Addr;
|
|||
|
void * Unused47Addr;
|
|||
|
void * Unused48Addr;
|
|||
|
void * Unused49Addr;
|
|||
|
void * Unused50Addr;
|
|||
|
void * Unused51Addr;
|
|||
|
void * Unused52Addr;
|
|||
|
void * Unused53Addr;
|
|||
|
void * Unused54Addr;
|
|||
|
void * Unused55Addr;
|
|||
|
void * Unused56Addr;
|
|||
|
void * Unused57Addr;
|
|||
|
void * Unused58Addr;
|
|||
|
void * Unused59Addr;
|
|||
|
void * Unused60Addr;
|
|||
|
void * Unused61Addr;
|
|||
|
void * FooAddr;
|
|||
|
void * Unused63Addr;
|
|||
|
|
|||
|
void * Unused64Addr;
|
|||
|
void * BarAddr;
|
|||
|
void * Unused66Addr;
|
|||
|
void * Unused67Addr;
|
|||
|
void * Unused68Addr;
|
|||
|
void * Unused69Addr;
|
|||
|
void * Unused70Addr;
|
|||
|
void * Unused71Addr;
|
|||
|
void * Unused72Addr;
|
|||
|
void * Unused73Addr;
|
|||
|
void * Unused74Addr;
|
|||
|
void * Unused75Addr;
|
|||
|
void * Unused76Addr;
|
|||
|
void * Unused77Addr;
|
|||
|
void * Unused78Addr;
|
|||
|
void * Unused79Addr;
|
|||
|
void * Unused80Addr;
|
|||
|
void * Unused81Addr;
|
|||
|
void * Unused82Addr;
|
|||
|
void * Unused83Addr;
|
|||
|
void * Unused84Addr;
|
|||
|
void * Unused85Addr;
|
|||
|
void * Unused86Addr;
|
|||
|
void * Unused87Addr;
|
|||
|
void * Unused88Addr;
|
|||
|
void * Unused89Addr;
|
|||
|
void * Unused90Addr;
|
|||
|
void * Unused91Addr;
|
|||
|
void * Unused92Addr;
|
|||
|
void * Unused93Addr;
|
|||
|
void * Unused94Addr;
|
|||
|
void * Unused95Addr;
|
|||
|
};
|
|||
|
typedef struct DecoderInfo DecoderInfo;
|
|||
|
|
|||
|
|
|||
|
enum DecoderKinds {
|
|||
|
UnknownDecoder,
|
|||
|
MacPALDecoder,
|
|||
|
BBUDecoder,
|
|||
|
NormandyDecoder,
|
|||
|
GLUEDecoder,
|
|||
|
MDUDecoder,
|
|||
|
OSSFMCDecoder,
|
|||
|
VISADecoder,
|
|||
|
OrwellDecoder,
|
|||
|
JAWSDecoder,
|
|||
|
MSCDecoder,
|
|||
|
SonoraDecoder,
|
|||
|
NiagraDecoder,
|
|||
|
YMCADecoder,
|
|||
|
djMEMCDecoder,
|
|||
|
HMCDecoder,
|
|||
|
PrattDecoder,
|
|||
|
HHeadDecoder
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
enum BasesValidFlags {
|
|||
|
ROMExists,
|
|||
|
DiagROMExists,
|
|||
|
VIA1Exists,
|
|||
|
SCCRdExists,
|
|||
|
SCCWrExists,
|
|||
|
IWMExists,
|
|||
|
PWMExists,
|
|||
|
SoundExists,
|
|||
|
SCSIExists,
|
|||
|
SCSIDackExists,
|
|||
|
SCSIHskExists,
|
|||
|
VIA2Exists,
|
|||
|
ASCExists,
|
|||
|
RBVExists,
|
|||
|
VDACExists,
|
|||
|
SCSIDMAExists,
|
|||
|
SWIMIOPExists,
|
|||
|
SCCIOPExists,
|
|||
|
OSSExists,
|
|||
|
FMCExists,
|
|||
|
RPUExists,
|
|||
|
OrwellExists,
|
|||
|
JAWSExists,
|
|||
|
SonicExists,
|
|||
|
SCSI96_1Exists,
|
|||
|
SCSI96_2Exists,
|
|||
|
DAFBExists,
|
|||
|
PSCExists,
|
|||
|
ROMPhysAddrExists,
|
|||
|
PatchROMExists,
|
|||
|
NewAgeExists,
|
|||
|
|
|||
|
SingerExists = 32,
|
|||
|
DSPExists,
|
|||
|
MACEExists,
|
|||
|
MUNIExists,
|
|||
|
AMICExists,
|
|||
|
PrattExists,
|
|||
|
SWIM3Exists,
|
|||
|
AwacsExists,
|
|||
|
CivicExists,
|
|||
|
SebastianExists,
|
|||
|
BARTExists,
|
|||
|
GrandCentralExists
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
// This macro is equivalent in part to the assembly language TestFor macro,
|
|||
|
// although it only works for features listed in DecoderInfo. It requires a
|
|||
|
// BasesValidFlag (enumerated above) and returns a boolean value. Example:
|
|||
|
// if (TestForBaseAddr(GrandCentralExists)) { }
|
|||
|
|
|||
|
#define TestForBaseAddr(bvFlag) \
|
|||
|
((1 << ((bvFlag) & 0x1F) & \
|
|||
|
((bvFlag) < 32 ? *(unsigned long *) AddrMapFlags : \
|
|||
|
((bvFlag) < 64 ? *(unsigned long *) AddrMapFlags1 : \
|
|||
|
((bvFlag) < 96 ? *(unsigned long *) AddrMapFlags2 : \
|
|||
|
0)))) != 0)
|
|||
|
|
|||
|
|
|||
|
// This macro is used to conveniently recover a base address from the DecoderInfo
|
|||
|
// table in one easy-to-read operation. Assuming that the corresponding BasesValid
|
|||
|
// flag is true, the base address can be recovered directly by its field name in
|
|||
|
// the DecoderInfo record. The macro handles all the arcane offsets, casts, and
|
|||
|
// dereferences. Example:
|
|||
|
// void *gcBase = GetUnivInfoBaseAddr(GrandCentralAddr);
|
|||
|
|
|||
|
#define GetUnivInfoBaseAddr(fieldName) \
|
|||
|
(((DecoderInfo *) (*(unsigned long *) UnivInfoPtr \
|
|||
|
+ (**(ProductInfo **) UnivInfoPtr).decoderInfoPtr)) \
|
|||
|
->##fieldName)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//--------------------------------------------------------------------------------------------
|
|||
|
// ProductInfo Record
|
|||
|
//
|
|||
|
// This record contains information specific to a particular machine.
|
|||
|
// The lowmem UnivInfoPtr is a pointer to this data structure.
|
|||
|
//
|
|||
|
// If you change the ProductInfo record, bump the version up by 1.
|
|||
|
//--------------------------------------------------------------------------------------------
|
|||
|
|
|||
|
#define ProductInfoVersion 1
|
|||
|
|
|||
|
|
|||
|
struct ProductInfo {
|
|||
|
|
|||
|
long decoderInfoPtr; // offset to address decoder info
|
|||
|
long ramInfoPtr; // offset to RAM bank base/size info
|
|||
|
long videoInfoPtr; // offset to built-in video info
|
|||
|
long nubusInfoPtr; // offset to NuBus slot info
|
|||
|
unsigned short hwCfgWord; // value to load into hwCfgFlags
|
|||
|
unsigned char productKind; // unique ID of this product (boxFlag value)
|
|||
|
unsigned char decoderKind; // unique ID of associated address decoder
|
|||
|
unsigned short rom85Word; // value to load into ROM85
|
|||
|
unsigned char defaultRSRCs; // default ROM resource configuration
|
|||
|
unsigned char productInfoVers; // version number of ProductInfo record
|
|||
|
|
|||
|
unsigned long basesValid; // valid flags for base addresses 0-31
|
|||
|
unsigned long basesValid1; // valid flags for base addresses 32-63
|
|||
|
unsigned long basesValid2; // valid flags for base addresses 64-95
|
|||
|
unsigned long extValid; // valid flags for external features 0-31
|
|||
|
unsigned long extValid1; // valid flags for external features 32-63
|
|||
|
unsigned long extValid2; // valid flags for external features 64-95
|
|||
|
unsigned long viaIDMask; // mask for VIA1/2 port A/B inputs
|
|||
|
unsigned long viaIDMatch; // value to match to identify this product
|
|||
|
long via1InitPtr; // offset to VIA1 initialization info
|
|||
|
long via2InitPtr; // offset to VIA2 initialization info
|
|||
|
|
|||
|
long sndControlPtr; // offset to low level sound vector table
|
|||
|
long clockPRAMPtr; // offset to low level clock/PRAM vector table
|
|||
|
long adbDebugUtilPtr; // offset to low level ADB/DebugUtil vector table
|
|||
|
long powerManagerPtr; // offset to low level Power Manager vector table
|
|||
|
long intHandlerPtr; // offset to low level interrupt handler setup table
|
|||
|
|
|||
|
unsigned short cpuIDValue; // expected contents of CPU ID register
|
|||
|
unsigned short filler;
|
|||
|
long iconInfoPtr; // offset to icon info table
|
|||
|
};
|
|||
|
typedef struct ProductInfo ProductInfo;
|
|||
|
|
|||
|
|
|||
|
#endif __UNIVERSALEQU__
|