sys7.1-doc-wip/Internal/Asm/UniversalEqu.a
2019-07-27 22:37:48 +08:00

803 lines
36 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;
; File: UniversalEqu.a
;
; Contains: low-level equates for accessing the Universal ROM information
;
; Written by: Gary G. Davidian 17-Apr-89
;
; Copyright: © 1989-1993 by Apple Computer, Inc. All rights reserved.
;
; Change History (most recent first):
;
; <SM33> 12/13/93 PN Roll in KAOs and Horror changes to support Malcom and AJ
; machines
; <SM32> 11/10/93 fau Update from SuperMunggio <SMG4>.
; <SMG4> 9/8/93 chp Rearranged two BasesValid flags that weren't really in the
; correct order.
; <SMG3> 8/27/93 fau Changed the name of the Hammer Head controller in the decoder
; table to HHead.
; <SMG2> 8/25/93 chp Added some information for Grand Central, the TNT DMA
; controller.
; <SM31> 10/10/93 SAM Roll in <MC2> from mc900ftjesus.
; <MC2> 10/10/93 SAM Added external features hasNewMemMgr and hasEnhancedLTalk.
; <SM30> 08-03-93 jmp Added a new field to the VideoInfo record (imported from the
; HORROR sources).
; <SM29> 7/14/93 RC Added BARTExists to exist list and added the BARTAddress to
; address list
; <SM28> 6/14/93 kc Roll in Ludwig.
; <LW7> 4/29/93 fau Bug #1081636: Update from Reality: The sound bits definition
; in external features changed.
; <LW6> 4/14/93 fau Moved Civic and Sebastian to a unique position in the table of
; Base Addresses.
; <SM27> 5/19/93 GMR Added ICONInfoPtr to the ProductInfo record.
; <SM26> 4/11/93 chp Removed Time Manager ProductInfo bits. Added SerialDMA and
; serial HAL binding info to ProductInfo.
; <SM25> 4/5/93 jb Added AwacsExists & AwacsAddr for PDM.
; <SM24> 3/31/93 chp Clean up ProductInfo conflicts and make some masks easier to
; read and maintain. Change has68kEmulator from 0 to 32 so it
; doesn't conflict with PGC flag and so it works with TestFor.
; <SM23> 3/2/93 CSS Move SupportsROMDisk to be in the same bit position as in Horror
; (was 31 now 28).
; <LW2> 2/26/93 fau Removed support for Cyclone EVT3 (MMC).
; <SM22> 2/5/93 SAM <CCH> Fixed the testFor macro to do the right thing when testing
; ExternalFeatures with bits numbers greater 32.
; <SM21> 2/5/93 SAM Cleaned up some things in this file. Added has68kEmulator to
; External Features.
; <SM20> 2/2/93 GMR Added SWIM3Exists flag and SWIM3Addr entry.
; <SM19> 12/4/92 fau Backed out <SM16> and fix it in the files that used DAFBExists
; to check for SCSI stuff.
; <SM18> 12/1/92 EH Adding PrattExists flag, PrattAddr entry, PrattDecoder entry.
; <SM17> 12/1/92 SWC Added IntHandlerPtr, a pointer to the interrupt handler setup
; table, to ProductInfo.
; <SM16> 11/23/92 mal Split CIVICAddr and DAFBAddr so TestFor CIVICExists and
; DAFBExists are unique tests.
; <SM15> 11/23/92 dwc Added a AMICExists to the features flag for PDM.
; <SM14> 11/20/92 fau Added a MuniExists to the features flag.
; <SM13> 11/19/92 SWC Added PowerManagerPtr, a pointer to the Power Manager primitives
; table, to ProductInfo.
; <SM12> 11/6/92 rab Roll in Horror changes. Comments follow:
; <H26> 10/16/92 JC Add ROM external feature bit and set on for Vail and WLCD to
; indicate that machine has Hard Power off so it can be used by a
; disk based gestalt patch so that we do not need to add
; additional items to the table in the disk patch.
; <H25> 8/11/92 NJV Added equates for 25 and 33 MHz vail CPU Id registers.
; <H24> 6/12/92 GA Add CUDA external features flags and move SupportsBtnInt and
; SupportsROMDisk bits up to make room for CUDA because Cube-E needs
; the CUDA/Egret bits defined in bits 24,25, and 26 (if they are not
; in these bit positions Cube-E no longer works with Cyclone).
; <H23> 6/12/92 HY Define SupportsROMDisk external feature flag.
; <SM11> 11/01/92 HY Defined bit 31 in the ExtValid flags. This bit defines whether
; or not a machine supports ROM disks.
; <SM10> 10/22/92 fau Released Universal bits 21 and 31 that were previously used by
; the Cyclone MMC and YMCA decoders.
; <SM9> 10/18/92 CCH Added equates for HMC decoder and Singer.
; <SM8> 10/6/92 SES Added bit mask definitions for different Time Mgr
; implementations in external features flag.
; <SM7> 9/30/92 fau Added the new Cyclone EVT4 decoder (YMCA) to decoder kinds.
; Used bit 21 of the universal bits for the YMCA (it was unused).
; This should be moved to MMC once we stop supporting the MMC.
; <SM6> 8/17/92 CCH Extended universal support to 96 bits and addition extFeatures
; longwords. Also added the BitVector32 macro, and updated the
; TestInRam macro.
; <SM5> 6/4/92 KW (RM,H21) Roll in Cuda/Egret firmware in external hardware
; features so that the bit positions are frozen as Cuda support is
; rolled into Horror (Slice & Hook Projects).
; (BG,H20) Adding some bits for Hook/Slice in ExtValid features.
; (NJV,H19) Due to popular demand, we changed the SoundNoPlaywRec
; equate mask to SoundPlayAndRecord - machines that can Play and
; Record simultaneously will have this bit set in their
; ProductInfo Table.
; (NJV,H18) Added SoundNoPlaywRec equate mask for machines that
; cannot Play and Record simultaneously.
; KW DID NOT roll in SupportsBtnInt equ 24 or the changes to Egret
; masks (went from 24,25,26-->25,26,27)
; <SM4> 5/26/92 RB Fixed the DecoderInfo record after I messed up. VDACAddr shares
; the same addr as Sebastian, and DAFB shares its address with
; Civic. Way to go Ricardo...1 full day lost.
; <SM3> 5/21/92 RB Making changes for Cyclone. Pandora comments follow: Some
; comments may be repeated due to the Pandora/Horror history.
; <P12> 5/13/92 KW (HV,H17) Add equate for RAMBankInfo record size.
; (jmp,H16) Updated some comments.
; (BG,H15) Added djMEMCDecoder to DecoderTable. Added -djMEMCChipBit-
; to ExtValid flags definitions since there is no more space to add
; entries in the BaseAddrs table.
; <P11> 5/11/92 KW Bumped Egret equates from 22,23,24 to 24,25,26
; <P10> 4/24/92 KW (NJV,H14) Adding equates needed to support Patch ROMs
; (SWC,H13) Added ADB/DebugUtil primitives vector entry to ProductInfo record.
; <P9> 3/3/92 chp (SWC,H12) Added SoundStereoMixing to ExtValid so the system disk (Cube-E)
; can determine if that feature is available on new machines that it doesn't
; know about.
; <P8> 2/28/92 chp Changed “DMAExists” to more specific “PSCExists.”
; <P7> 02/19/92 jmp (HJR,H11) Added NiagraExistsBit to ProductInfo's external
; features, since Niagra is just a minor variant of Jaws. (Note:
; Because of this change, moved the Egret Firmware bits to 22, 23,
; and 24 from 21, 22, and 23).
; <P6> 2/11/92 chp (jmp) The Egret Firmware bits (added in P4) were off by one bit.
; <P5> 1/18/92 RMP Aliased a couple of equates to meet Cyclones needs. Added debug
; Macros for Cyclone.
; <P4> 1/16/92 GS Updated the ProductInfo Record ExtValid bits to include
; information about the Firmware version used in the Egret chip
; (MC68HC05E1). The Current versions of firmware are Egret8 used
; in Elsie and Erickson, Caboose used in Eclipse, and Cuda used in
; Cyclone.
; <P3> 1/15/92 RP Added Cyclone specific equates.
; <P2> 01/13/92 jmp (jmp,H10) Added two new fields to the VideoInfo record in an
; effort to eliminate the BoxFlag dependencies for machines having
; built-in video.
; (SWC,H9) Added a new bit to the NubusInfo structure to mark
; slots that are used for docking purposes (i.e., a portable into
; a desktop docking unit).
; <SM2> 5/17/92 kc Roll in Horror changes. Original comments follow.
; <H14> 4/20/92 NJV Adding equates needed to support Patch ROMs
; <H13> 4/3/92 SWC Added ADB/DebugUtil primitives vector entry to ProductInfo
; record.
; <H12> 2/25/92 SWC Added SoundStereoMixing to ExtValid so the system disk (Cube-E)
; can determine if that feature is available on new machines that
; it doesn't know about.
; <H11> 2/13/92 HJR Added NiagraExistsBit to ProductInfo's external features, since
; Niagra is just a minor variant of Jaws.
; <H10> 01/11/92 jmp Added two new fields to the VideoInfo record in an effort to
; eliminate the BoxFlag dependencies for machines having built-in
; video.
; <H9> 1/9/92 SWC Added a new bit to the NubusInfo structure to mark slots that
; are used for docking purposes (i.e., a portable into a desktop
; docking unit).
; <H8> 12/16/91 HJR Added Niagra decoded to decoder table.
; <H7> 12/4/91 CCH Moved CPUID-value global from DecoderInfo to ProductInfo record.
; <H6> 11/26/91 jmp Just added a comment to the VDACAddr definition.
; <H5> 10/24/91 SWC Moved MSCChipBit to bit 20 since it was colliding with one of
; the keyswitch bits.
; <H4> 10/22/91 SWC Removed MSCAddr and MSCExists from DecoderInfo and added
; MSCChipBit to ProductInfo's external features, since MSC is just
; a variant of the RBV (so we free up a decoder slot).
; <H3> 10/15/91 SWC Added clock/PRAM primitives vector entry to ProductInfo record.
; <H2> 8/21/91 rww Added Sonora-related equates.
; <T13> 6/25/91 BG Added Keyswitch values within the ExtValid (UnivROMFlags)
; description. This universalizes the keyswitch feature for
; Macintosh. Hopefully this will not ever actually be needed ...
; <T12> 6/21/91 BG Swapped the order of the OrwellDecoder and VISADecoder in the
; DecoderKinds table, since VISA=LC, and LC shipped before this
; ROM, but the decoders would be in a different order than the
; previous ROMs, and that's not good.
; <T9> 5/22/91 BG Adding in RomPhysAddr as part of the decoder table addresses for
; Apollo, high-volume style machines (for Gus).
; <T8> 5/10/91 djw Add sound attribute flag SoundStereoOut, moved SupportsIdle to
; bit 16.
; <T7> 5/1/91 HJR SWC - Adding in equates for DB-Lite.
; <T6> 1/24/91 HJR Add version number to product info and extended product info to
; include new sound low level routine vector.
; <T5> 1/15/91 DAF Added DAFB-related features to Universal structure templates
; <T4> 12/11/90 JJ Mac LC: Changes references to VISAChipBit to V8ChipBit.
; <T3> 12/6/90 CCH (actually JMA) Added definitions for SCSI96Addr and
; SCSI96_1Exists, SCSI96_2Exists for TERROR Turbo SCSI.
; <23> 1/28/92 RB Fixed the comment in <22>
; <22> 1/22/92 RB Added two fields to DecoderInfo Record, also added definitions
; for the CPU ID register.
; <21> 1/20/92 KC Add KeyswCabooseBit equate.
; <20> 10/28/91 SAM/KSM Rolled in Regatta file.
;
; Regatta Change History:
;
; <2> 8/8/91 SAM (BG) Updated the defines in this file to agree with TERROR F1.
; <1> 8/8/91 SAM Split off from 7.0 GM sources.
;
; 7.0 Change History:
;
; <19> 8/26/91 JSM Cleanup header.
; <18> 6/11/91 gbm Take out conditional for Regatta
; <17> 4/8/91 KIP djw, forRegattaCPUs: Fix conditional in universal info record to
; work only on Regatta.
; <16> 3/28/91 SAM Added entries in DecoderInfo for SCSIC96 & DAFB (used three
; previously unused entries.)
; <15> 1/30/91 gbm sab, #38: Change the already including this file variable to
; all uppercase (for security reasons)
; <14> 10/22/90 JJ Rex V8: Change VISAChipBit to V8ChipBit.
; <13> 8/14/90 BG Added a definition for -SonicExists- for the on-board Ethernet
; in use on Eclipse.
; <11> 4/4/90 MSH Waimea equates to build Universal.
; <9> 3/29/90 MSH Add SupportsIdel run time flag.
; <8> 3/26/90 CCH Adding sound input flags to ExtValid flags.
; <7> 3/21/90 MSH Added new clock decode type.
; <6> 2/13/90 JJ Added VISA Chip indicator to External Features word to
; distinguish VISA from RBV/MDU.
; <5> 1/25/90 GMR Renamed the ADB/Clock types so they don't conflict with assembly
; conditionals (like iopADB).
; <4> 1/18/90 JJ Added VISADecoder to to DecoderKinds list.
; <3> 1/15/90 GMR Added ADB and Clock/Pram bits to External Features longword, to
; help support Erickson/Elsie which use the Egret chip.
; <2> 1/2/90 BG Added *OrwellDecoder* to *DecoderKinds* and *OrwellExists* to
; *DecoderInfo* for Eclipse.
; <1.6> 11/15/89 GMR NEEDED FOR ZONE-5: Added RPUAddr to DecoderInfo table, and
; RPUExists.
; <1.5> 7/16/89 GGD Added PGCInstalled bit name to the ProductInfo record.
; <1.4> 6/30/89 GGD Added DefaultRSRCs field to ProductInfo record. Added
; information about NuBus slot configurations.
; <1.3> 6/12/89 djw Added slot zero pram addr to video table
; <1.2> 6/11/89 GGD Added new definitions for Ram Bank and Video tables.
; <1.1> 6/10/89 GGD Moved box flag constants into Private.a
; <1.0> 4/30/89 GGD Adding to EASE for the first time. Equates to support Universal
; ROMs.
;
IF &TYPE('__INCLUDINGUNIVERSALEQU__') = 'UNDEFINED' THEN
__INCLUDINGUNIVERSALEQU__ SET 1
; This record is used in MMUTables.a and in SizeMem.a
DecoderKinds record 0,increment
UnknownDecoder ds.b 1
MacPALDecoder ds.b 1
BBUDecoder ds.b 1
NormandyDecoder ds.b 1
GLUEDecoder ds.b 1
MDUDecoder ds.b 1
OSSFMCDecoder ds.b 1
VISADecoder ds.b 1
OrwellDecoder ds.b 1
JAWSDecoder ds.b 1
MSCDecoder ds.b 1
SonoraDecoder ds.b 1
NiagraDecoder ds.b 1
YMCADecoder ds.b 1 ; <SM7> fau
djMEMCDecoder ds.b 1
HMCDecoder ds.b 1 ; <SM9> cch
PrattDecoder ds.b 1 ; <SM18>
HHeadDecoder ds.b 1
endr
;--------------------------------------------------------------------------------------------
; 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.
;
;--------------------------------------------------------------------------------------------
DecoderInfoVersion equ 1 ; Version of the DecoderInfo record <SM6>
DecoderInfo record {FirstBaseAddr},increment ; data structure describing address decoder
DefaultBases ds.l 1 ; default valid flags for base addresses 0-31
DefaultBases1 ds.l 1 ; default valid flags for base addresses 32-63 <SM6>
DefaultBases2 ds.l 1 ; default valid flags for base addresses 64-95 <SM6>
DefExtFeatures ds.l 1 ; default valid flags for external features 0-31
DefExtFeatures1 ds.l 1 ; default valid flags for external features 32-63 <SM6>
DefExtFeatures2 ds.l 1 ; default valid flags for external features 64-95 <SM6>
AvoidVIA1A ds.b 1 ; mask for VIA1 Port A bits to avoid changing
AvoidVIA1B ds.b 1 ; mask for VIA1 Port B bits to avoid changing
AvoidVIA2A ds.b 1 ; mask for VIA2 Port A bits to avoid changing
AvoidVIA2B ds.b 1 ; mask for VIA2 Port B bits to avoid changing
CheckForProc ds.l 1 ; offset to routine to check for this decoder
AddrMap ds.b 1 ; Decoder Kind
DecoderInfoVers ds.b 1 ; DecoderInfo version <SM6>
ds.b 2 ; filler
DecoderAddr ds.l 1 ; base of address of memory decoder, if any <SM6>
FirstBaseAddr ds.l 0 ; record origin, and offset of first base address field
ROMAddr ds.l 1 ; Base of ROM
DiagROMAddr ds.l 1 ; Base of DIagnostic ROM
VIA1Addr ds.l 1 ; Base of VIA1
SCCRdAddr ds.l 1 ; Base of SCC for reading
SCCWrAddr ds.l 1 ; Base of SCC for writing
IWMAddr ds.l 1 ; Base of IWM/SWIM
PWMAddr ds.l 1 ; Base of PWM DIsk speed buffer
SoundAddr ds.l 1 ; Base of RAM based Sound buffer
SCSIAddr ds.l 1 ; Base of SCSI Chip (normal accesses)
SCSIDackAddr ds.l 1 ; Base of SCSI Chip, asserting Dack
SCSIHskAddr ds.l 1 ; Base of SCSI Chip, waiting for Dreq, asserting Dack
VIA2Addr ds.l 1 ; Base of VIA2
ASCAddr ds.l 1 ; Base of Apple Sound Chip
RBVAddr ds.l 1 ; Base of RBV
VDACAddr ds.l 1 ; Base of Video D/A converter *and/or* CLUT <SM4> rb
SCSIDMAAddr ds.l 1 ; Base of SCSI DMA Chip
SWIMIOPAddr ds.l 1 ; Base of SWIM IOP
SCCIOPAddr ds.l 1 ; Base of SCC IOP
OSSAddr ds.l 1 ; Base of OSS
FMCAddr ds.l 1 ; Base of Fitch Memory Controller
RPUAddr ds.l 1 ; Base of RAM Parity Unit <1.6>
OrwellAddr ds.l 1 ; Base of Orwell Memory Controller <2><SM12>
JAWSAddr ds.l 1 ; Base of JAWS Memory Controller <10>
SonicAddr ds.l 1 ; Base of Sonic Ethernet Chip <13>
SCSI96Addr1 ds.l 1 ; Base of 1st SCSI96 Chip (normal accesses) <T3>
SCSI96Addr2 ds.l 1 ; Base of 2nd SCSI96 Chip (normal accesses) <T3>
DAFBAddr ds.l 1 ; Base of DAFB frame buffer controller <T5><SM4> rb <SM16>
PSCAddr ds.l 1 ; Base of PSC DMA controller <P3><SM3> rb
ROMPhysAddr ds.l 1 ; Base of ROM physical address <T9><SM3> rb
PatchROMAddr ds.l 1 ; Base of Patch ROM <H14><SM3> rb
NewAgeAddr ds.l 1 ; Base of NewAge floppy disk controller <P3><SM3> rb
Unused31Addr ds.l 1 ;
SingerAddr ds.l 1 ; Base of Singer Sound Chip <SM9>
DSPAddr ds.l 1 ; Base of DSP chip <SM10>
MACEAddr ds.l 1 ; Base of MACE chip <SM10>
MUNIAddr ds.l 1 ; Base of MUNI NuBus bus controller <SM14>
AMICAddr ds.l 1 ; Base of AMIC DMA controller (PDM) <SM15> dwc
PrattAddr ds.l 1 ; Base of the Pratt Memory Controller <SM18>
SWIM3Addr ds.l 1 ; Base of the SWIM3 chip <SM20>
AwacsAddr ds.l 1 ; Base of Awacs Sound Chip
CivicAddr ds.l 1 ; Base of Civic buffer controller <P3><SM3> rb <SM16>
SebastianAddr ds.l 1 ; Base of Cyclone Video Clut DAC <P3><SM3> rb <SM7>
BARTAddr ds.l 1 ; Base of Cold Fusion Nubus Controller
GrandCentralAddr ds.l 1 ; Base of TNT Grand Central I/O Controller
Unused44Addr ds.l 1
Unused45Addr ds.l 1
Unused46Addr ds.l 1
Unused47Addr ds.l 1
Unused48Addr ds.l 1
Unused49Addr ds.l 1
Unused50Addr ds.l 1
Unused51Addr ds.l 1
Unused52Addr ds.l 1
Unused53Addr ds.l 1
Unused54Addr ds.l 1
Unused55Addr ds.l 1
Unused56Addr ds.l 1
Unused57Addr ds.l 1
Unused58Addr ds.l 1
Unused59Addr ds.l 1
Unused60Addr ds.l 1
Unused61Addr ds.l 1
FooAddr ds.l 1
Unused63Addr ds.l 1
Unused64Addr ds.l 1
BarAddr ds.l 1
Unused66Addr ds.l 1
Unused67Addr ds.l 1
Unused68Addr ds.l 1
Unused69Addr ds.l 1
Unused70Addr ds.l 1
Unused71Addr ds.l 1
Unused72Addr ds.l 1
Unused73Addr ds.l 1
Unused74Addr ds.l 1
Unused75Addr ds.l 1
Unused76Addr ds.l 1
Unused77Addr ds.l 1
Unused78Addr ds.l 1
Unused79Addr ds.l 1
Unused80Addr ds.l 1
Unused81Addr ds.l 1
Unused82Addr ds.l 1
Unused83Addr ds.l 1
Unused84Addr ds.l 1
Unused85Addr ds.l 1
Unused86Addr ds.l 1
Unused87Addr ds.l 1
Unused88Addr ds.l 1
Unused89Addr ds.l 1
Unused90Addr ds.l 1
Unused91Addr ds.l 1
Unused92Addr ds.l 1
Unused93Addr ds.l 1
Unused94Addr ds.l 1
Unused95Addr ds.l 1
Size equ *-DecoderInfo
; Bit numbers of BasesValid flags, the lowmem AddrMapFlags contains these bits.
ROMExists equ (ROMAddr-FirstBaseAddr)/4
DiagROMExists equ (DiagROMAddr-FirstBaseAddr)/4
VIA1Exists equ (VIA1Addr-FirstBaseAddr)/4
SCCRdExists equ (SCCRdAddr-FirstBaseAddr)/4
SCCWrExists equ (SCCWrAddr-FirstBaseAddr)/4
IWMExists equ (IWMAddr-FirstBaseAddr)/4
PWMExists equ (PWMAddr-FirstBaseAddr)/4
SoundExists equ (SoundAddr-FirstBaseAddr)/4
SCSIExists equ (SCSIAddr-FirstBaseAddr)/4
SCSIDackExists equ (SCSIDackAddr-FirstBaseAddr)/4
SCSIHskExists equ (SCSIHskAddr-FirstBaseAddr)/4
VIA2Exists equ (VIA2Addr-FirstBaseAddr)/4
ASCExists equ (ASCAddr-FirstBaseAddr)/4
RBVExists equ (RBVAddr-FirstBaseAddr)/4
VDACExists equ (VDACAddr-FirstBaseAddr)/4
SCSIDMAExists equ (SCSIDMAAddr-FirstBaseAddr)/4
SWIMIOPExists equ (SWIMIOPAddr-FirstBaseAddr)/4
SCCIOPExists equ (SCCIOPAddr-FirstBaseAddr)/4
OSSExists equ (OSSAddr-FirstBaseAddr)/4
FMCExists equ (FMCAddr-FirstBaseAddr)/4
RPUExists equ (RPUAddr-FirstBaseAddr)/4 ; <1.6>
OrwellExists equ (OrwellAddr-FirstBaseAddr)/4 ; <2><SM12>
JAWSExists equ (JAWSAddr-FirstBaseAddr)/4 ; <10>
SonicExists equ (SonicAddr-FirstBaseAddr)/4 ; <13>
SCSI96_1Exists equ (SCSI96Addr1-FirstBaseAddr)/4 ; <T3>
SCSI96_2Exists equ (SCSI96Addr2-FirstBaseAddr)/4 ; <T3>
DAFBExists equ (DAFBAddr-FirstBaseAddr)/4 ; <5>
PSCExists equ (PSCAddr-FirstBaseAddr)/4 ; <P3><SM3> rb
ROMPhysAddrExists equ (ROMPhysAddr-FirstBaseAddr)/4 ; <T9><SM3> rb
PatchROMExists equ (PatchROMAddr-FirstBaseAddr)/4 ; <H14><SM3> rb
NewAgeExists equ (NewAgeAddr-FirstBaseAddr)/4 ; <P3><SM3> rb
SingerExists equ (SingerAddr-FirstBaseAddr)/4 ; <SM9>
DSPExists equ (DSPAddr-FirstBaseAddr)/4 ; <SM10>
MACEExists equ (MACEAddr-FirstBaseAddr)/4 ; <SM10>
MUNIExists equ (MUNIAddr-FirstBaseAddr)/4 ; <SM14>
AMICExists equ (AMICAddr-FirstBaseAddr)/4 ; <SM15> dwc
PrattExists equ (PrattAddr-FirstBaseAddr)/4 ; <SM18>
SWIM3Exists equ (SWIM3Addr-FirstBaseAddr)/4 ; <SM20>
AwacsExists equ (AwacsAddr-FirstBaseAddr)/4
CivicExists equ (CivicAddr-FirstBaseAddr)/4 ; <P3><SM3> rb
SebastianExists equ (SebastianAddr-FirstBaseAddr)/4 ; <P3><SM3> rb <SM7> fau
BARTExists equ (BARTAddr-FirstBaseAddr)/4
GrandCentralExists equ (GrandCentralAddr-FirstBaseAddr)/4
endr
;--------------------------------------------------------------------------------------------
; RAM Bank info data structure for use by memory sizing code
RamBankInfo record 0,increment ; data structure describing RAM Bank features
MinBankSize ds.l 1 ; minimum size possible in any bank
HighBankStart ds.l 1 ; starting physical address of highest bank
HighBankEnd ds.l 1 ; ending physical address of highest bank
; the following fields repeat for each additional bank. Start addr $FFFFFFFF is end of table
NextBankStart ds.l 1 ; starting physical address of next bank (-1 if end of table)
NextBankEnd ds.l 1 ; ending physical address of next bank
RAMInfoSize equ *-RamBankInfo ; size of a RAM info record for two banks <H17><SM3> rb
endr
;--------------------------------------------------------------------------------------------
; Video info data structure for describing built in video.
VideoInfo record 0,increment ; data structure describing built in video features
if hasSlotMgr then ; Describe RBV Slot Zero video
VRAMPhysAddr ds.l 1 ; Physical base address of screen
VRAMLogAddr32 ds.l 1 ; Logical 32 bit base address of screen
VRAMLogAddr24 ds.l 1 ; Logical 24 bit base address of screen
SlotNumberAlias ds.b 1 ; Slot number to use for PRAM storage
SlotPramAddr ds.b 1 ; PRAM address for RBV slot zero <1.3>
SuperSRsrcDirID ds.b 1 ; ID of sRsrc directory directory <H10>
BoardSRsrcID ds.b 1 ; ID of board sRsrc (or 0 to just use boxFlag) <H10>
DrvrHwID ds.w 1 ; DrHwID for controller (maintained by DTS).
VIBuiltInSize EQU *-VideoInfo ; size of record with slot manager info
else ; Describe classic built in video
VRAMAddr ds.l 1 ; Base address of screen
ScreenByteSize ds.l 1 ; size of screen, in bytes
ScreenTop ds.w 1 ; screen bounds, top
ScreenLeft ds.w 1 ; screen bounds, left
ScreenBottom ds.w 1 ; screen bounds, bottom
ScreenRight ds.w 1 ; screen bounds, right
RowByteSize ds.w 1 ; size of scan line, in bytes
RetraceRate ds.w 1 ; vertical retrace rate, in Hz
HorizDPI ds.w 1 ; dots per inch, horizontally
VertDPI ds.w 1 ; dots per inch, vertically
VIClassicSize EQU *-VideoInfo ; size of record with Classic info
endif
endr
;--------------------------------------------------------------------------------------------
; NuBus info data structure for describing NuBus slots
NuBusInfo record 0,increment ; data structure describing NuBus Slot features
; Bit numbers of flags for each slot
hasPRAM equ 0 ; Parameter RAM is allocated for this slot
canInterrupt equ 1 ; Interrupt line can exist for this slot
hasConnector equ 2 ; NuBus connector exists in the box for this slot
slotDisabled equ 3 ; Cannot be used, address space used for something else
directSlot equ 4 ; Direct slot has support for this NuBus slot
slotReserved equ 5 ; set if slot addr space is reserved from VM use
dockingSlot equ 6 ; set if this slot is used for docking (a portable) <H9>
Slot0 ds.b 1 ; info for Slot 0
Slot1 ds.b 1 ; info for Slot 1
Slot2 ds.b 1 ; info for Slot 2
Slot3 ds.b 1 ; info for Slot 3
Slot4 ds.b 1 ; info for Slot 4
Slot5 ds.b 1 ; info for Slot 5
Slot6 ds.b 1 ; info for Slot 6
Slot7 ds.b 1 ; info for Slot 7
Slot8 ds.b 1 ; info for Slot 8
Slot9 ds.b 1 ; info for Slot 9
SlotA ds.b 1 ; info for Slot A
SlotB ds.b 1 ; info for Slot B
SlotC ds.b 1 ; info for Slot C
SlotD ds.b 1 ; info for Slot D
SlotE ds.b 1 ; info for Slot E
SlotF ds.b 1 ; info for Slot F
endr
;--------------------------------------------------------------------------------------------
; 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.
;
;--------------------------------------------------------------------------------------------
ProductInfoVersion equ 1 ; Version of the ProductInfo record
ProductInfo record 0,increment ; data structure describing product dependent features
DecoderInfoPtr ds.l 1 ; offset to address decoder info
RamInfoPtr ds.l 1 ; offset to RAM bank base/size info
VideoInfoPtr ds.l 1 ; offset to Built in Video info
NuBusInfoPtr ds.l 1 ; offset to NuBus Slot info
HwCfgWord ds.w 1 ; value to load into lowmem hwCfgFlags
ProductKind ds.b 1 ; unique id of this product (boxFlag value)
DecoderKind ds.b 1 ; unique id of associated address decoder
Rom85Word ds.w 1 ; value to load into lowmem ROM85
DefaultRSRCs ds.b 1 ; default ROM Resource configuration <1.4>
ProductInfoVers ds.b 1 ; version number of productinfo record <6> HJR
BasesValid ds.l 1 ; valid flags for base addresses 0-31
BasesValid1 ds.l 1 ; valid flags for base addresses 32-63 <SM6>
BasesValid2 ds.l 1 ; valid flags for base addresses 64-95 <SM6>
ExtValid ds.l 1 ; valid flags for external features 0-31
ExtValid1 ds.l 1 ; valid flags for external features 32-63
ExtValid2 ds.l 1 ; valid flags for external features 64-95
VIAIdMask ds.l 1 ; mask for VIA1/2 Port A/B inputs
VIAIdMatch
YMCAIdMatch
MMCIdMatch ds.l 1 ; value to match to identify this product <SM3> rb <P5>
VIA1InitPtr ds.l 1 ; offset to VIA1 initialization info
VIA2InitPtr ds.l 1 ; offset to VIA2 initialization info
SndControlPtr ds.l 1 ; offset to low level sound vector table <6> HJR
ClockPRAMPtr ds.l 1 ; offset to low level clock/PRAM vector table <H3>
ADBDebugUtilPtr ds.l 1 ; offset to low level ADB and DebugUtil vector table <H13>
PowerManagerPtr ds.l 1 ; offset to low level Power Manager vector table <SM13>
IntHandlerPtr ds.l 1 ; offset to low level interrupt handler setup table <SM17>
ImmgPrimPtr ds.l 1 ; offset to primitives table for the internal modem manager <H29><H31>
lastPrimitive EQU * ; <H13>
CPUIDValue ds.w 1 ; expected contents of CPU ID register <H7>
ds.w 1 ; [padding for now]
IconInfoPtr ds.l 1 ; offset to Icon info table <SM27>
SIze equ *-ProductInfo
;-------------------------------------------------------------------------------------------- <SM21>
; ExtValid/UnivROMFlags Flags (DefExtFeatures)
;
; Bit numbers of ExtValid flags, the lowmem UnivROMFlags contains these bits
; which describe some external hardware features, that don't have base addresses;
; A total of 96 bits are available.
;
; If you need to encode features, create a mask for the number of bits needed and
; enumerate the entries for that mask.
;--------------------------------------------------------------------------------------------
; ••• Miscellaneous Features bits 0-31 (DefExtFeatures) •••
PGCInstalled equ 0 ; the optional PGC chip is installed
; ADB Mask uses bits 1-3
ADBMask equ %111 << 1 ; Mask for this feature
ADBXcvr equ %000 << 1 ; GI transceiver based ADB
ADBPwrMgr equ %001 << 1 ; Power Manager based ADB
ADBIop equ %010 << 1 ; IOP based ADB
ADBEgret equ %011 << 1 ; Egret based ADB
ADBspare4 equ %100 << 1
ADBspare5 equ %101 << 1
ADBspare6 equ %110 << 1
ADBspare7 equ %111 << 1
; Clock Mask uses bits 4-6
ClockMask equ %111 << 4 ; Mask for this feature
ClockRTC equ %000 << 4 ; Real-Time-Clock chip based Clock/PRAM
ClockPwrMgr equ %001 << 4 ; Power Manager based Clock/PRAM
ClockEgret equ %010 << 4 ; Egret based Clock/PRAM
ClockNoPram equ %011 << 4 ; PRAM is not in the clock chip
Clockspare4 equ %100 << 4
Clockspare5 equ %101 << 4
Clockspare6 equ %110 << 4
Clockspare7 equ %111 << 4
V8ChipBit equ 7 ; 1 in bit 7 means V8 variant of RBV/MDU
; Sound Mask uses bits 8-15 <LW7>
SoundHasSoundIn equ 1 << 8 ; has sound input hardware <LW7>
Sound16Bit equ 1 << 9 ; has 16-bit hardware <LW7>
SoundStereoIn equ 1 << 10 ; has stereo input <LW7>
SoundStereoOut equ 1 << 11 ; stereo output flag
SoundStereoMixing equ 1 << 12 ; stereo mixing to built-in speaker flag
SoundPlayAndRecord equ 1 << 13 ; machine can play and record simultaneously flag
SoundHasDFAC2 equ 1 << 14 ; machine has DFAC II chip flag
SoundLineLevel equ 15 ; machine requires line level input (instead of mike level) <LW7>
SupportsIdle equ 16
PMgrNewIntf equ 17 ; 1=serial PMgr interface & new protocol
KeyswCabooseBit equ 18 ; an Egret/Caboose-flavored keyswitch
ksBit1 equ 19 ; note: bits 18 and 19 are defined below in KeyswMask
MSCChipBit equ 20 ; 1=MSC variant of RBV/MDU
NiagraExistsBit equ 21 ; 1=Niagra variant of Jaws
SonoraExistsBit equ 22 ; 1=Sonora
djMEMCChipBit equ 23 ; 1=djMEMC
; EgretFWMask uses bits 24-26. See below.
SupportsBtnInt equ 27 ; 1=has button interrupt register (for Slice)
SupportsROMDisk equ 28 ; 1=supports ROM Disk <SM23>
hasHardPowerOff equ 29 ; 1=has hard power off switch. Used by Gestalt (only valid on Horror or newer)
SoftVBL equ 30 ; VBL emulated by Time Mgr task
hasNewMemMgr equ 31 ; ROM has support for Figment (new heap/memory manager) <MC2>
; ••• Miscellaneous Features bits 32-63 (DefExtFeatures1) •••
has68kEmulator equ 32 ; ROM supports 68k emulation
; SerialDMA flags and HAL binding info occupies bits 33-36.
SerialDMA equ 33 ; serial hardware requires SerialDMA driver and HAL
SHALMask equ %111 << (34//32) ; mask for products HAL resource ID
SHALReserved equ %000 << (34//32) ; (0) reserved
SHALPSC equ %001 << (34//32) ; (1) PSC HAL
SHALAMIC equ %010 << (34//32) ; (2) AMIC HAL
SHALSpare3 equ %011 << (34//32)
SHALSpare4 equ %100 << (34//32)
SHALSpare5 equ %101 << (34//32)
SHALSpare6 equ %110 << (34//32)
SHALSpare7 equ %111 << (34//32)
hasEnhancedLTalk equ 37 ; Enhanced Curio LocalTalk <MC2>
; ••• Miscellaneous Features bits 64-95 (DefExtFeatures2) •••
endr
; NOTE - the following are defined outside of the ProductInfo record because EQUs
; defined within a RECORD are limited to 16-bit signed values, whereas EQUs
; defined OUTSIDE of a RECORD can be 32-bit values. Thanks, MPW.
; Support for current and possible future keyswitch implementations
; Keyswitch Mask uses bits 18 and 19 of DefExtFeatures.
;
KeyswMask equ %11 << 18 ; mask for keyswitch existence
KeyswNone equ %00 << 18 ; NO keyswitch (default case)
KeyswCaboose equ %01 << 18 ; an Egret/Caboose-flavored keyswitch
KeyswSpare2 equ %10 << 18
KeyswSpare3 equ %11 << 18
; Support for current and possible future Egret Firmware implementations
; Egret Type Mask uses bits 24, 25, and 26 of DefExtFeatures.
EgretFWMask equ %111 << 24 ; mask for Egret FW Types (MC68HC05E1)
EgretNone equ %000 << 24 ; No Egret Chip (MC68HC05E1)
Egret8 equ %001 << 24 ; an Egret8 flavored firmware
Caboose equ %010 << 24 ; a Caboose flavored firmware
Cuda equ %011 << 24 ; a Cuda flavored firmware
EgretFWSpare4 equ %100 << 24
EgretFWSpare5 equ %101 << 24
EgretFWSpare6 equ %110 << 24
EgretFWSpare7 equ %111 << 24
;--------------------------------------------------------------------------------------------
; End of ExtValid/UnivROMFlags Flags
;
;--------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
; Encapsulate the hwCfgFlags bit numbers in a record for use with the TestFor macro
hwCfgInfo record 0,increment ; bit numbers of the lowmem hwCfgFlags
hwCbSCSI equ hwCbSCSI ; SCSI port present
hwCbClock equ hwCbClock ; New clock chip present
hwCbExPRAM equ hwCbExPRAM ; Extra Parameter Ram valid.
hwCbFPU equ hwCbFPU ; FPU chip present.
hwCbMMU equ hwCbMMU ; Some kind of MMU present (see MMUType for what kind).
hwCbADB equ hwCbADB ; Apple Desktop Bus present.
hwCbAUX equ hwCbAUX ; Running A/UX
hwCbPwrMgr equ hwCbPwrMgr ; Power Manager present
endr
;--------------------------------------------------------------------------------------------
; Equates describing the CPU ID register <7> HJR
CPUIDReg EQU $5FFFFFFC
cpuIDSig EQU $A55A ; bits 31-16: signature
cpuIDHiVol EQU 0<<12 ; 15-12: design center
cpuIDPortable EQU 1<<12
cpuIDHiEnd EQU 2<<12
cpuIDRISC EQU 3<<12
cpuIDinReg EQU 0<<11 ; 11: complete ID appears in this register
cpuIDinVIA EQU 1<<11 ; supplemental ID appears in VIA
cpuIDinMMC EQU 1<<11 ; or in MMC on Cyclone (jeez). <P5><SM3> rb
cpuIDinBoard EQU 1<<11 ; or in Mother/Daughter board ID registers.
cpuIDFieldMask EQU $07FF ; mask to and value with to get CPU ID Field of CPU ID Register
Vail25IDField EQU 1 ; Vail 25 MHz CPU ID <H25><SM12>
Vail33IDField EQU 3 ; Vail 33 MHz CPU ID <H25><SM12>
;--------------------------------------------------------------------------------------------
; TestFor macro. (RAM version)
;
; The macro TestFor allows for easy testing of features by just knowing the feature name,
; and not needing to remember where it is.
macro
TestFor &Feature
lcla &a
lcla &b
&a: seta 0
if (&type(&concat('DecoderKinds.',&Feature)) <> 'UNDEFINED') then
cmp.b #DecoderKinds.&Feature,([UnivInfoPtr],ProductInfo.DecoderKind)
eori #4,ccr ; return ccr.z=0 if equal
else
if (&type(&concat('DecoderInfo.',&Feature)) <> 'UNDEFINED') then
&b: seta &eval(&concat('DecoderInfo.',&Feature))
if (&b < 32) then ; if in first 32 bits, use AddrMapFlags
&a: seta AddrMapFlags+3 ; bit numbering assumes longword
elseif (&b < 64) then ; if in second 32 bits, use AddrMapFlags1
&a: seta AddrMapFlags1+3
elseif (&b < 96) then ; if in third 32 bits, use AddrMapFlags2
&a: seta AddrMapFlags2+3
endif
elseif (&type(&concat('ProductInfo.',&Feature)) <> 'UNDEFINED') then
&b: seta &eval(&concat('ProductInfo.',&Feature))
if (&b < 32) then ; if in first 32 bits, use UnivROMFlags <SM22>
&a: seta UnivROMFlags+3 ; bit numbering assumes longword
elseif (&b < 64) then ; if in second 32 bits, use UnivROMFlags1
&a: seta UnivROMFlags1+3
elseif (&b < 96) then ; if in third 32 bits, use UnivROMFlags2
&a: seta UnivROMFlags2+3
endif
elseif (&type(&concat('hwCfgInfo.',&Feature)) <> 'UNDEFINED') then
&a: seta hwCfgFlags+1 ; bit numbering assumes word
&b: seta &eval(&concat('hwCfgInfo.',&Feature))
endif
if &a=0 then
aerror 'Unknown feature name'
else
btst.b #(&b//8),&a-((&b//32)/8)
endif
endif
endm
;--------------------------------------------------------------------------------------------
; BitVector32 macro.
;
; The BitVector macro creates a 32-bit bitvector made up of the bits specified in
; the parameter field modulo 32.
;
macro
BitVector32
lcla &index
lcla &count
lcla &vector
&count: seta &nbr(&syslist)
if &count > 32 then
aerror 'too many parameters; up to 32 allowed'
endif
&index: seta 1
&vector: seta 0
while &index <= &count do
&vector: seta &vector + (1 << (&eval( &syslist[&index]) // 32 ))
&index: seta &index + 1
endwhile
dc.l &vector
endm
ENDIF ; ...already included