mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-22 04:31:30 +00:00
803 lines
36 KiB
Plaintext
803 lines
36 KiB
Plaintext
;
|
||
; 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 product’s 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
|