//__________________________________________________________________________________________________ // // File: HardwarePrivateEqu.r (generated from HardwarePrivateEqu.a) // // Contains: Macintosh assembly equates THAT ARE NOT TO BE RELEASED TO THE WORLD. // // Copyright: © 1990-1993 by Apple Computer, Inc., all rights reserved. // // Change History (most recent first): // // 8/4/93 JDR private sound defines are in SoundPrivate.a // 6/9/93 kc Roll in Ludwig. // 2/24/93 chp Added equates for the PSC wait/request multiplexer control bits // in VIA1. // 8/17/92 CCH Bumped HeapStart to $2800. // 8/7/92 JDB Changed Singer control register to have 0 for the output // attenuation and 5 for the input gain. // 07-14-92 jmp (ag,H24) Change the name of a bit from PontiSndExtMic to // PontiSndIntMic // (jmp,H23) Added some additional DAFB equates for the WombatDAFB // code. // (BG,H22) Added one more djMEMC-related symbolic definition // (dj_MaxBanks). // 6/21/92 ejb Adding bit field definitions for dspOverrun register in PSC. // 6/21/92 RB Adding runtime support for EVT1 and EVT2 Cyclones. Defined // temporary equates for the EVT1 Cyclone units. // 6/18/92 KW (BG,H21) Added djMEMC memory controller equates for Wombat and // WLCD. // (jmp,H20) Wombat has a different dot-clock chip than // Spike/Eclipse/Zydeco, so I added an equate to reflect this. // 6/18/92 RB Added equates for the new EVT2 (final offsets) of the VIA2 on // Cyclone. The old values are still supported under the // conditional forEVT1. These should be deleted once everyone moves // to EVT2 boards. Did the same with MUNIBase as well. // 6/4/92 KW (fau,P18) Added and equate for Civic_VidInDble to support Civic // II. // 5/25/92 RB Removed a forCyclone conditional. This should be the last one // left. Renamed MSCBank1Enable to MSCBank8M. // 5/21/92 RB Making changes for Cyclone. Some comments may be duplicated due // to the Pandora/Terror history. 5/13/92 KW (ag,H18) Added // Ponti Definitions. (BG,H17) Added symbol v2MicCtl to the VIA2 // bit definitions. This is a microphone control bit that is // defined for Wombat. Also updated some comments from Eclipse and // Zydeco to the appropriate Quadra names. 4/16/92 KW (SWC, // H16) Set bufWorldSize to 8K so Macsbug won't load into the // middle of DBLite's sound buffer and get trashed when a sound is // played. 03/24/92 jmp Renamed one of the MMC registers to // something more appropriate (i.e., MMC_Interlace to // MMC_ClockSelect). 03/22/92 jmp Put back . // 3/19/92 FU Rolled back changes in . 3/18/92 FU // (SWC,H15) Added SCSI DiskMode bit definitions for Niagra to the // VIA 1 list. 03/04/92 jmp Updated the comments and changed // the names of some of the Civic-related equates. 02/28/92 // jmp (ejb) Turned off the DSP frame-interrupt enable bit so that // DSP driver doesn’t suffer frame overrun when it trys to boot the // DSP. 02/20/92 jmp (JC,H14) Define PatchFlags in unused by // of ROM header ($0014). Define PatchBits based on available // features in BBSStartup. Include support for Horror based and // Pandora (Cyclone) based ROMs. 2/19/92 chp (jmp,H13) Put a // “hasSonora1” conditional around the Sonora video control // register base address to reflect impending hardware changes to // Sonora. 02/07/92 jmp (HJR,H12) Added new Niagra Equates. // (SWC,H11) One more go-round on MSC configuration: RAM bank 1 // needs to be disabled since there's only 2MB on DBLite LC. // (SWC,H10) Fixed the MSC configuration value: it needs to be // setup for a minimum amount of RAM so that the sound FIFO will // always exist in real RAM for BootBeep. (SWC,H9) Added an equate // for the default MSC configuration register value. Also, added // Civic and Civic-related equates for Cyclone. 2/5/92 RMP // Added MUNI equates. 1/21/92 mal Added PSC VIA2 equates // 1/18/92 RMP Added PSC sound equates. 1/15/92 RP Fixed // header (sorry). 1/15/92 RP Added new VIA definition bits // and MMC equates. // 5/17/92 kc Roll in Horror Changes. Comments follow: // 4/8/92 SWC Set bufWorldSize to 8K so Macsbug won't load into the middle of // DBLite's sound buffer and get trashed when a sound is played. // 3/3/92 SWC Added SCSI DiskMode bit definitions for Niagra to the VIA 1 // list. // 2/19/92 JC Define PatchFlags in unused by of ROM header ($0014). Define // PatchBits based on available features in BBSStartup. Include // support for Horror based and Pandora (Cyclone) based ROMs. // 1/23/92 SWC One more go-round on MSC configuration: RAM bank 1 needs to be // disabled since there's only 2MB on DBLite LC. // 1/22/92 SWC Fixed the MSC configuration value: it needs to be setup for a // minimum amount of RAM so that the sound FIFO will always exist // in real RAM for BootBeep. // 1/22/92 SWC Added an equate for the default MSC configuration register // value. // 12/20/91 JC Create common Via2/RBV offset equates and temporary redefinition // on Sonora Specific builds to only use RBV offsets //
12/03/91 jmp Added various (but not yet complete) SonoraAddr and // Sonora-VDACAddr equates. Sorry to have cancelled your check-out // swc, but we had pressing needs. //
11/26/91 jmp Added equates for the GSC. //

11/25/91 SAM Added Sonora specific equate for RAMSize reg. //

8/5/91 SWC Added MSCPowerCycle, the offset to the power cycle register from // the base of the MSC. // 7/8/91 HJR Rename JAWSAuxWaitS to JAWSEconoMode register to reflect its new // pupose in life. // 5/24/91 jmp Added another VIA2, port A, bit-7 equate for Spike & Eclipse: // v2SyncOnGreen. This bit allows us to enable & disable the // sync-on-green signal in ACDC. // 5/10/91 djw Add sound input select bits for Eclipse in VIA2 // 5/1/91 HJR Added in register definitions for the MSC memory controller // (DB-Lite). // 4/1/91 BG Modified the v2Keyswitch bit definition to agree with what it // will be on DVT Eclipse. // 3/3/91 BG Added bit definition for Eclipse Keyswitch bit in VIA2. // 2/16/91 BG Added Orwell constants to deal with 33MHz. // 1/18/91 CCH Added equates for Spike's VIA2. // 11/7/90 BG Made changes for new rev. of Orwell (2) permanent. // 4/22/92 RB Moved the start of the System heap in order to get some space // for vector tables. This movement of the heap from $2000 to $2100 // is for experimentation and will need to be changed at a later // date. // <35> 12/31/91 RB Renamed JAWSAuxWaitS to JAWSEconoMode to reflect its real // purpose. // <34> 12/29/91 RB Updated some of the Terror constants. // <33> 10/28/91 SAM/KSM Rolled in Regatta file. // // // <2> 8/8/91 SAM (pdw, ag) Added some equates from HardwarePrivateEqu in // TERROR. // <1> 8/8/91 SAM Split off from 7.0 GM sources. // // // <32> 10/1/91 JSM Don’t use eclipseDebug. // <31> 8/30/91 DTY Complicate matters so onMac32 stuff doesn’t get defined for // onMac, onMacPP, or onMacHc. (Since these aren’t defined in // BBSStartup anymore, this is necessary.) // <30> 8/22/91 JSM Clean up header. // <29> 7/24/91 MH Added conditional wrapper(s) to prevent duplication of public // interface declarations: TimeSCSIDB // <28> 1/30/91 gbm sab, #38: Change the ‘already including this file’ variable to // all uppercase (for security reasons) // <27> 11/26/90 gbm (and bbm) On 7.0 (and other places eventually) HiIntMask will be // $0700 instead of $0300 all the time, not just when on a // non-Plus. // <26> 10/22/90 JJ Rex V8: Added equates for V8 registers // <25> 9/24/90 BG Added symbolic names for the Data and Instruction Cache enable // bits for the CACRs of various machines. // <24> 9/13/90 MSH A couple of VIA2 assignments have changed for TIM. // <23> 9/1/90 BG Updated and added various constants to agree with the EVT1 // version of the Eclipse board. // <22> 7/11/90 gbm Take out some things that are in SysEqu.a // <21> 7/6/90 CCH Changed default ROM wait states and RAM refresh rate for // Eclipse. // <20> 6/27/90 CCH Took out the conditionals around TestInRam! // <19> 6/27/90 CCH TestInRAM macro gets compiled when eclipseDebug is set. // <18> 5/24/90 HJR Update Machine equate to 7 instead of 6 for newer machines. // <16> 4/4/90 HJR Clean up some build problems. // <15> 4/4/90 MSH forrom removal. // <14> 4/4/90 MSH Merged HardwareEqu.a back into HardwarePrivateEqu.a and // restructured/rewrote the resultant file. This action obsoletes // HardwareEqu.a. All future equate additions should be done to // HardwarePrivateEqu.a only. // <13> 3/29/90 MSH Add VIA2 labels for Waimea. // <12> 3/22/90 JJ Force definition of onElsie=0 if onElsie is undefined. // <11> 2/14/90 DAF Added VISA register names. Since Elsie isn't fully integrated, // it doesn't have real feature conditional yet. // <10> 2/9/90 BG Modified ORWELL_INIT value to reflect the parts being used on // the Eclipse prototype. // <9> 2/9/90 JJ Added RvExp, offset of RBV Expansion Register in Elsie. // <8> 2/9/90 BG Moved EQUs for the Eclipse VIA2 out of the -ELSEIF onEclipse-, // as those definitions will be used even if the -onEclipse- // conditional stuff is not used. // <7> 2/2/90 BG Missed one re-definition in previous change. // <6> 2/2/90 BG Modified some bits in the Eclipse VIA2 buffer A description to // have relevant mnemonic names. // <5> 1/31/90 BG Added Orwell-specific register bit definitions, address offsets // and configuration register initial values. // <4> 1/30/90 BG Added Eclipse-specific hardware constant definitions. // <3> 1/18/90 SWC Updating FMCInit and FMCRPUInit with the final values. // <2> 1/12/90 CCH Added missing ENDIF. // <1> 1/11/90 CCH Moved in private equates from “HardwareEqu.a”. // // NOTE: // // For change history versions not mentioned in the above -Change History-, refer // to :Interfaces:AIncludes:HardwareEqu.a. // #ifndef __INCLUDINGHARDWAREPRIVATEEQU__ #define __INCLUDINGHARDWAREPRIVATEEQU__ 1 //__________________________________________________________________________________________ // // Welcome to the New Hardware Equates File. By following some simple procedures this file // can keep its youthful appearance for years to come. This file is a recombination of // HardwareEqu.a and HardwarePrivateEqu.a. Everyone should be using this file only. Please // change any of your files that use either of the hardware equate files to use only this one. // HardwareEqu.a will be left as an historical artifact for future generations. // // To help you navigate through this file use the "Mark" menu item, and please help to keep // it current. When you add a new section, add a handy mark to find it again. Equates are // grouped in a semi-logical way in the follwing order: // // Chip Offsets - Register offsets for the 'standard' Mac peripheral chips. // Chip Offsets 2 - Register offsets for the 'non-standard' Mac peripheral chips. // VIA1 - Register offsets and pin descriptions. // VIA2 - Register offsets and pin descriptions. // RBV - Register offsets and pin descriptions. // VISA - Register offsets and pin descriptions. // Memory Controllers - Register definitions and miscellaneous equates. // Interrupts - Auto vector names and mask definitions. // Miscellaneous - The "Smorgasboard" of equates. // Old 16 Bit Equates - Machine dependent equates for Mac, MacPP, HcMac, and Mac16. // // //__________________________________________________________________________________________ //__________________________________________________________________________________________ // // // Chip Offsets - Register offsets for "standard" Mac chips. This includes the following: // IWM, SWIM, SCC, SCSI (with and without DMA), ASC. // // //__________________________________________________________________________________________ //--------------------------------------------------- // IWM Offsets //--------------------------------------------------- #define ph0L 0 // disk address offsets from base #define ph0H $200 #define ph1L $400 #define ph1H $600 #define ph2L $800 #define ph2H $A00 #define ph3L $C00 #define ph3H $E00 #define mtrOff $1000 #define mtrOn $1200 #define intDrive $1400 // enable internal drive address #define extDrive $1600 // enable external drive address #define q6L $1800 #define q6H $1A00 #define q7L $1C00 #define q7H $1E00 #define IWMInitMode $17 // initial IWM mode setting <3.5> //--------------------------------------------------- // SWIM offsets //--------------------------------------------------- #define wData $0000 //Write a data byte #define wMark $0200 //Write a mark byte #define wCRC $0400 //Write a 2-byte CRC (1 access does both) #define wIWMConfig (wCRC) //Set IWM configuration #define wParams $0600 //Set the 16 parameter registers #define wPhase $0800 //Set phase lines states and directions #define wSetup $0A00 //Set the current configuration #define wZeroes $0C00 //Mode reg: 1's clr bits, 0's=don't care #define wOnes $0E00 //Mode reg: 1's set bits, 0's=don't care #define rData $1000 //Read a data byte #define rCorrection (rData) //Read the correction factor #define rMark $1200 //Read a mark byte #define rError $1400 //Error register #define rParams $1600 //Parameters (16 bytes deep at this addr) #define rPhase $1800 //Phase lines states and directions #define rSetup $1A00 //Read the current configuration #define rStatus $1C00 //Status (returns current mode reg value) #define rHandshake $1E00 //Handshake register //--------------------------------------------------- // 8530 SCC Offsets //--------------------------------------------------- #define aData 6 // offset for A channel data #define aCtl 2 // offset for A channel control #define bData 4 // offset for B channel data #define bCtl 0 // offset for B channel control #define sccData 4 // general offset for data from control #define rxBF 0 // SCC receive buffer full #define txBE 2 // SCC transmit buffer empty #define RxCA 0 // Receive Character Available //--------------------------------------------------- // 53C80 SCSI Register Defs, Offsets //--------------------------------------------------- #define sCDR $00 // Current SCSI Read Data #define sODR $00 // Output data register #define sICR $10 // Initiator Command Register - READ/WRITE #define iRST $80 // *RST asserted #define iAIP $40 // arbitration in progress (read) #define bAIP 6 // bit test for arbitration in progress #define aTMD $40 // assert Test Mode (write) #define iLA $20 // Lost arbitration (read) #define bLA 5 // bit test for Lost Arbitration #define aDIFF $20 // assert Differential enable (write) #define iACK $10 // *ACK is asserted #define iBSY $08 // *BSY is asserted #define iSEL $04 // *SEL is asserted #define iATN $02 // *ATN is asserted #define iDB $01 // Data bus is asserted #define sMR $20 // Mode Register - READ/WRITE #define iBDMA $80 // Block Mode DMA #define iTGT $40 // Target Mode #define iPTY $20 // Enable Parity Checking #define iIPTY $10 // Enable Parity interrupt #define iIEOP $08 // Enable EOP interrupt #define iMBSY $04 // Monitor BSY #define iDMA $02 // DMA Mode #define iARB $01 // Arbitration #define sTCR $30 // Target Command Register - READ/WRITE #define iREQ $08 // Assert *REQ #define iMSG $04 // Assert *MSG #define iCD $02 // Assert C/*D #define iIO $01 // Assert I/*O #define sCSR $40 // Current SCSI Bus Status (READ) #define aRST $80 // *RST #define aBSY $40 // *BSY #define bBSY 6 // bit test for *BSY #define aREQ $20 // *REQ #define bREQ 5 // bit test for *REQ #define aMSG $10 // *MSG #define bMSG 4 // bit test for *MSG #define aCD $08 // C/*D #define bCD 3 // bit test for C/*D #define aIO $04 // I/*O #define bIO 2 // bit test for I/*O #define aSEL $02 // *SEL #define bSEL 1 // bit test for *SEL #define aDBP $01 // *DBP #define sSER $40 // Select Enable Register (WRITE) #define sBSR $50 // Bus & Status Register (READ) #define iEDMA $80 // End of DMA #define bEDMA 7 // bit test for end of DMA #define iDMAR $40 // DMA Request #define bDMAR 6 // bit test for DMA Req #define iPERR $20 // Parity Error #define iIREQ $10 // Interrupt Request #define bIREQ 4 // bit test for interrupt #define iPM $08 // Phase Match #define bPM 3 // bit test for Phase Match #define iBERR $04 // Bus Error #define ATN $02 // *ATN #define ACK $01 // *ACK #define bACK 0 // bit test for ACK #define sDMAtx $50 // DMA Transmit Start (WRITE) #define sIDR $60 // Data input register (READ) #define sTDMArx $60 // Start Target DMA receive (WRITE) #define sRESET $70 // Reset Parity/Interrupt (READ) #define sIDMArx $70 // Start Initiator DMA receive (WRITE) //--------------------------------------------------- // SCSI DMA chip register offsets //--------------------------------------------------- // Note that the 53C80 registers are provided on the SCSI DMA chip. The registers // described here are in addition to the 53C80 registers. #define sDCTRL $80 #define bDMAEN 0 // bit to enable SCSI DMA #define iDMAEN $0001 // mask to enable SCSI DMA #define bINTREN 1 // bit to enable SCSI DMA interrupts #define iINTREN $0002 // mask to enable SCSI DMA interrupts #define bTIMEEN 2 // bit to enable watchdog timer intr's #define iTIMEEN $0004 // mask to enable watchdog timer intr's #define bHSKEN 3 // bit to enable hardware-handshaking (write) #define iHSKEN $0008 // mask to enable hardware-handshaking (write) #define bRESET 4 // bit to reset SCSI DMA chip (write) #define iRESET $0010 // mask to reset SCSI DMA chip (write) #define bFIFO 4 // bit indicating bytes left in FIFO (read) #define iFIFO $0010 // mask indicating bytes left in FIFO (read) #define bTEST 5 // bit to enable SCSI Test Mode (write) #define iTEST $0020 // mask to enable SCSI Test Mode (write) #define bSCSIP 6 // bit indicating SCSI intr pending (read) #define iSCSIP $0040 // mask indicating SCSI intr pending (read) #define bTIMEP 7 // bit indicating timer intr pending (read) #define iTIMEP $0080 // mask indicating timer intr pending (read) #define bDMABERR 8 // bit indicating DMA bus error (read) #define iDMABERR $0100 // mask indicating DMA bus error (read) #define iARBID $0E00 // mask to get target ID for arbitration #define bARBIDEN 12 // bit to enable hardware arbitration #define iARBIDEN $1000 // mask to enable hardware arbitration #define bWONARB 13 // bit indicating successful arbitration #define iWONARB $2000 // mask indicating successful arbitration #define iINFIFO $C000 // mask to get bytes left in FIFO (read) #define sDCNT $C0 #define sDADDR $100 #define sDTIME $140 #define sTEST $180 //__________________________________________________________________________________________ // // // Chip Offsets - Register offsets for "non standard" Mac chips. This includes the following: // OSS and IOP. // // //__________________________________________________________________________________________ //--------------------------------------------------- // OSS (Operating System Support) Chip Address & Offsets //--------------------------------------------------- #define OSSMskFirst $000 //offset to first interrupt mask register #define OSSMskSlot9 (OSSMskFirst) //offset to slot 9 interrupt mask register #define OSSMskSlotA $001 //offset to slot A interrupt mask register #define OSSMskSlotB $002 //offset to slot B interrupt mask register #define OSSMskSlotC $003 //offset to slot C interrupt mask register #define OSSMskSlotD $004 //offset to slot D interrupt mask register #define OSSMskSlotE $005 //offset to slot E interrupt mask register #define OSSMskPSwm $006 //offset to SWIM PIC interrupt mask register #define OSSMskPScc $007 //offset to SCC PIC interrupt mask register #define OSSMskSnd $008 //offset to Sound interrupt mask register #define OSSMskScsi $009 //offset to SCSI interrupt mask register #define OSSMsk60Hz $00A //offset to 60 Hz interrupt mask register #define OSSMskVia1 $00B //offset to VIA1 interrupt mask register #define OSSMskRTC $00C //offset to RTC interrupt mask register #define OSSMskADB $00D //offset to ADB interrupt mask register (not used) <5.1> #define OSSMskRPU $00E //offset to RPU interrupt mask register <4.8> #define OSSMskLast (OSSMskRPU) //offset to last interrupt mask register #define rpuReset $010 // RPU write offset to reset serial ptr <4.9> #define OSSIntStat $202 //offset to interrupt status register. Bits are: <3.7> // 15: interrupt 15 (spare) pending // 14: interrupt 14 (RPU) pending <4.8> // 13: interrupt 13 (spare) pending <5.1> // 12: interrupt 12 (RTC) pending // 11: interrupt 11 (VIA1) pending // 10: interrupt 10 (60 Hz) pending // 9: interrupt 9 (SCSI) pending // 8: interrupt 8 (sound) pending // 7: interrupt 7 (SCC PIC) pending // 6: interrupt 6 (SWIM PIC) pending // 5: interrupt 5 (slot E) pending // 4: interrupt 4 (slot D) pending // 3: interrupt 3 (slot C) pending // 2: interrupt 2 (slot B) pending // 1: interrupt 1 (slot A) pending // 0: interrupt 0 (slot 9) pending //••••• NOTE: In the new OSS, the interrupt status register is a long word starting at $200. <3.7> //••••• Since only the low-order word is currently used, making a single change here <3.7> //••••• has less impact on the ROM sources. When we permanently switch over to the <3.7> //••••• new OSS hardware, then it may make sense to fix this equate and change all its <3.7> //••••• uses from MOVE.Ws to MOVE.Ls. <3.7> #define OSSRomCntl $204 //offset to ROM control register. Bits are: // <2.0> #define OSSPwrOff (OSSRomCntl) //power off is now a bit in the ROM control register <5.1> #define OSSPwrOffBit 7 // 7: write a 1 here to power off the machine <2.1><3.7> #define OSSCntrCntl $205 //offset to counter control register. Bits are // 7-2: unused // 1: test control. A 1 causes each 4 bit // counter segment to count in parallel // 0: counter hold. A 1 holds current value // so all 64 bits can be read. Hold doesn't // affect counting, though! #define OSSInpStat $206 //offset to input status register. Bits are // 7-2: not used, read as zero // 1: SCC write request. Not used if PIC present // 0: mini-phono device plugged in flag. A 1 // means a device IS plugged in. #define OSS60HzAck $207 //offset to 'Clear 60 Hz interrupt flag' register. Both <3.7> // writes and reads clear it, so might as well write it. #define OSSCounter $208 //offset to 64 bit counter register. Low order 8 //.bits are always read as zero (maybe not in future...) // Bit numbers in OSS interrupt status register #define OSSIntIOPSWIM 6 //bit # of SWIM IOP in interrupt status register #define OSSIntIOPSCC 7 //bit # of SCC IOP in interrupt status register #define OSSIntSound 8 //bit # of ASC in interrupt status register #define OSSIntSCSI 9 //bit # of SCSI in interrupt status register #define OSSIntVBL60Hz 10 //bit # of 60Hz VBL in interrupt status register #define OSSIntVia1 11 //bit # of VIA 1 in interrupt status register #define OSSIntRTC 12 //bit # of RTC in interrupt status register #define OSSIntADB 13 //bit # of ADB in interrupt status register #define OSSIntRPU 14 //bit # of RPU in interrupt status register <4.8> #define OSSIntLast 14 //bit # of last interrupt source #define OSSRomInit $D // initial value for ROM control register<3.5> //--------------------------------------------------- // IOP (Input Output Processor) Chip Offsets and bit definitions //--------------------------------------------------- #define iopRamAddrH ($0000-$20) // high byte of shared RAM address register #define iopRamAddrL ($0002-$20) // low byte of shared RAM address register #define iopRamAddr (iopRamAddrL-1) // WORD access to shared RAM address register #define iopRamData ($0008-$20) // shared RAM data register (byte, word, or long) #define iopStatCtl ($0004-$20) // IOP Status and Control register // bit numbers within the iopStatCtl register #define iopInBypassMode 0 // IOP is in BYPASS mode #define iopIncEnable 1 // enable addr pointer increment #define iopRun 2 // 0 -> reset IOP, 1 -> run IOP #define iopGenInterrupt 3 // interrupt the IOP #define iopInt0Active 4 // interrupt 0 active #define iopInt1Active 5 // interrupt 1 active #define iopBypassIntReq 6 // peripheral chip interrupt request in bypass mode #define iopSCCWrReq 7 // 0 -> SCC REQ active, 1 -> inactive // commands bytes to write to the iopStatCtl register #define setIopIncEnable ((1< //--------------------------------------------------- // VIA IFR/IER bits //--------------------------------------------------- #define ifCA2 0 // CA2 interrupt #define ifCA1 1 // CA1 interrupt #define ifSR 2 // SR shift register done #define ifCB2 3 // CB2 interrupt #define ifCB1 4 // CB1 interrupt #define ifT2 5 // T2 timer2 interrupt #define ifT1 6 // T1 timer1 interrupt #define ifIRQ 7 // any interrupt //--------------------------------------------------- // VIA1 Port A definitions //--------------------------------------------------- #define vSound $7 // sound volume bits (0..2) (output) #define vTestJ 0 // Burn In Test jumper (input) #define vCpuId0 1 // CPU Identification bit 0 (input) #define vCpuId1 2 // CPU Identification bit 1 (input) #define vSync 3 // Synchronous modem #define vOverlay 4 // overlay bit (overlay when 1) #define vCpuId2 4 // CPU Identification bit 2 #define vReqAEnable 4 // enable ReqA into vSCCWrReq (PSC only) #define vHeadSel 5 // head select line for Sony #define vCpuId3 6 // CPU Identification bit 3 #define vRev8Bd 6 // =0 for rev 8 board> #define vReqBEnable 6 // enable ReqB into vSCCWrReq (PSC only) #define vSCCWrReq 7 // SCC write/request line //--------------------------------------------------- // VIA1 Port B definitions //--------------------------------------------------- #define vEclipseLED 0 // flashable Eclipse LED (how quaint!) <23> #define vRTCData 0 // real time clock data #define vRMP0 0 // Reserved for RMP (PSC only) #define vRTCClk 1 // real time clock clock pulses #define vRMP1 1 // Reserved for RMP (PSC only) #define vRTCEnb 2 // clock enable (0 for enable) #define vRMP2 2 // Reserved for RMP (PSC only) #define vFDBInt 3 // Front Desk bus interrupt #define vXcvrsesbit 3 // Egret transceiver session bit <6> #define vSDMCable 3 // SCSI DiskMode cable sense for Dartanian #define vCudaTREQ 3 // Cuda transaction request input rb #define vSDMDiskID 4 // DiskMode HD ID (bits 4-6) for Dartanian #define vFDesk1 4 // Front Desk bus state bit 0 #define vViafullbit 4 // Egret via full bit <6> #define vCudaBYTEACK 4 // Cuda byte acknowledge output rb #define vFDesk2 5 // Front Desk bus state bit 1 #define vSyssesbit 5 // Egret system session bit <6> rb #define vCudaTIP 5 // Cuda interface transaction in progress output #define vAUXIntEnb 6 // switch to A/UX interrupt scheme (output) <23> #define vPGCEnb 6 // Parity Generator/Checker enable (0 for enable) #define vJMPDude6 6 // Reserved for JMP (PSC only) #define vPGCErr 7 // Parity Generator/Checker error (input) #define vSndEnb 7 // /sound enable (reset when 1) (output) #define vSWInt 7 // cause a software interrupt (output) <23> #define vJMPDude7 7 // Reserved for JMP (PSC only) //__________________________________________________________________________________________ // // // VIA2 or Equivalent Pin Definitions and Register Offsets - Multiple names for the same pin // are grouped together. New definitions for VIA2 pins are added such that the grouping is // maintained. // // //__________________________________________________________________________________________ //--------------------------------------------------- // VIA2 Port A definitions //--------------------------------------------------- #define v2IRQ1 0 // slot 1 interrupt #define v2EnetIRQ 0 // on-board ethernet <8><23> #define v2IRQ2 1 // slot 2 interrupt #define v2IRQ3 2 // slot 3 interrupt #define v2IRQ4 3 // slot 4 interrupt #define v2IRQ5 4 // slot 5 interrupt #define v2IRQ6 5 // slot 6 interrupt #define v2RAM0 6 // RAM size bit 0 #define v2LCDIRQ 6 // on-board LCD video #define v2VideoIRQ 6 // on-board video <8><23> #define v2RAM1 7 // RAM size bit 1 #define v2CardIn 7 // on-board video #define v2SyncOnGreen 7 // for enabling/disabling Sync-on-Green (DAFB) //--------------------------------------------------- // VIA2 Port B definitions //--------------------------------------------------- #define v2ConfigLE 0 // DFAC config latch enable #define v2CDis 0 // cache disable (when 1) <3.3> #define v2Keyswitch 0 // 900/950 ONLY - keyswitch shadow bit (1=SECURE) rb #define v2BusLk 1 // Bus lockout #define v2PMack 1 // Power manager handshake acknowledge #define v2PowerOff 2 // soft power off signal (when 0) // (also 900/950 keyswitch OFF bit) rb #define v2PMreq 2 // Power manager handshake request #define v2ConfigData 3 // DFAC config data #define v2FC3 3 // PMMU FC3 indicator #define vFC3 3 // PMMU FC3 indicator #define v2SndInSel0 3 // Eclipse only - sound input select bit 0 #define v2ConfigClk 4 // DFAC config clock #define v2TM1A 4 // bit for NUBus #define v2TM0A 5 // and another #define v2Speed 5 // 25/33 Mhz 68040 input (0=25MHz, 1=33 MHz) #define v2MicCtl 5 // microphone control on Wombats rb #define v2HMMU 5 // HMMU 24/32 <15> HJR #define v2CDis2 6 // On Tim the CDIS is on pb6 <15> HJR #define v2SndExt 6 // 1 = internal speaker, 0 = ext. audio #define v2SndInSel1 6 // Q900/950 only - sound input select bit 1 rb #define v2VBL 7 // pseudo VBL signal #define v2ModemRST 7 // Modem.Reset <15> HJR // temporary Cyclone equates rb, start, rb // rb, • TEMP EQUATES #define CycloneEVT1Reg $A55A2800 // id which identifies an EVT1 cyclone in CPURegID rb #define PSCVIA2SIntEVT1 $000 // Slot interrupt reg. offset rb #define PSCVIA2IFREVT1 $004 // VIA2 interrupt flag reg. offset rb #define PSCVIA2IEREVT1 $008 // VIA2 interrupt enable reg. offset rb #define PSCVIA2SInt $1E00 // Slot interrupt reg. offset rb #define PSCVIA2IFR $1A00 // VIA2 interrupt flag reg. offset rb #define PSCVIA2IER $1C00 // VIA2 interrupt enable reg. offset rb // PSC VIA2 Slot Interrupt Register equates #define PSCSlotC 3 // slot C int. #define PSCSlotD 4 // slot D int. #define PSCSlotE 5 // slot E int. #define PSCOVBVBL 6 // on-board video vbl int. // PSC VIA2 Interrupt Flag and Interrupt Enable Registers equates #define PSCSCSI0 0 // SCSI int., same as bit 3 #define PSCSlot 1 // any slot int. #define PSCMUNI 2 // MUNI int. #define PSCSCSI3 3 // SCSI int. #define PSCFDC 5 // floppy int. #define PSCSNDFRM 6 // sound frame int. #define PSCANY 7 // any of the above // rb, end, rb //---------- //RBV (Ram Based Video) register definitions //---------- #define RvDataB $000 // VIA2 data reg. B equivalent <2.5> #define RvExp $001 // RBV Expansion Register <3> #define RvSInt $002 // Slot interrupts reg. <2.5> #define RvIFR $003 // interrupt flag reg. <2.5> #define RvMonP $010 // monitor parameters reg. <2.5> #define RvChpT $011 // chip test reg. <2.5> #define RvSEnb $012 // Slot interrupt enable reg. <2.5> #define RvIER $013 // interrupt flag enable reg. <2.5> //---------- //Common Via 2 and RBV (Ram Based Video) register offsets //---------- #define Rv2DataB (vBufB|RvDataB) // RBV/VIA2 data reg. B equivalent #define Rv2Exp (RvExp) // RBV Expansion Register #define Rv2SInt (RvSInt) // Slot interrupts reg. #define Rv2IFR (vIFR|RvIFR) // RBV/VIA2 interrupt flag reg. #define Rv2MonP (RvMonP) // monitor parameters reg. #define Rv2ChpT (RvChpT) // chip test reg. #define Rv2SEnb (RvSEnb) // Slot interrupt enable reg. #define Rv2IER (vIER|RvIER) // iRBV/VIA2 interrupt enable reg. // ====== VIA2 BufferB Equivalent Address: $50026000 ===== #define RvCDis 0 // cache disable (when 1) <3.3> #define RvBusLk 1 // Bus lockout #define RvPowerOff 2 // soft power off signal (when 0) #define RvCFlush 3 // Flush external cache (when 0) #define RvTM1A 4 // bit for NUBus #define RvTM0A 5 // and another #define RvSndExt 6 // 1 = internal speaker, 0 = ext. audio // jack in use #define RvPGCTest 7 // 1 = generate good parity, 0 = generate errors // ====== Future Expansion Address: $50026001 ===== // ====== Slot Interrupts Address: $50026002 ===== #define RvIRQ1 0 // slot 1 interrupt #define RvIRQ2 1 // slot 2 interrupt #define RvIRQ3 2 // slot 3 interrupt #define RvIRQ4 3 // slot 4 interrupt #define RvIRQ5 4 // slot 5 interrupt #define RvIRQ6 5 // slot 6 interrupt #define RvIRQ0 6 // slot 0 interrupt or internal video // blanking interrupt //RvResr EQU 7 ; reserved // ====== Interrupt Flags Address: $50026003 ===== #define RvSCSIDRQ 0 // 1 = SCSI DRQ interrupt #define RvAnySlot 1 // 1 = any slot(0-6).IRQ int #define RvExpIRQ 2 // 1 = expansion int. (reserved) #define RvSCSIRQ 3 // 1 = SCSI IRQ interrupt #define RvSndIRQ 4 // 1 = Apple Sound Chip interrup //RvResr EQU 5 ; reserved //RvResr EQU 6 ; reserved //RvSetClr EQU 7 ; on READ, 1 = any enable interrupt // on WRITE, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's // ====== Monitor Parameters Address: $50026010 ===== #define RvColor1 0 // (lsb) R/W 000 = 1bit, 001 = 2 bit #define RvColor2 1 // R/W 010 = 4bit, 011 = 8 bit #define RvColor3 2 // (msb) Read 1xx = Reserved #define RvMonID1 3 // READ 000,011,100=reserved; x01=15" monitor #define RvMonID2 4 // 010=Mod'IIGSmonitor;110=MacII monitors #define RvMonID3 5 // 111= 9" build in monitor #define RvVIDOff 6 // 1 = Video off #define RvVID3St 7 // 1 = all video outputs tri-stated // ====== Chip Test Address: $50026011 ===== #define RvC60 0 // 1 = C60 clock run 128 x normal #define RvSpd1 1 // (lsb) 00 = normal, 01=medium #define RvSpd2 2 // (msb) 10 = fast, 11 = very fast #define RvHndShk3 3 // 1=VID.REQ & VID.RES tri-stated #define RvIOClk3 4 // 1=C16M, C8M, C3.7M tri-stated #define RvC30M 5 // 1=30.24 mHz clock for all monitors #define RvSDTClk 6 // 1 = Dot clock halted #define RvTstRes 7 // 1 = reset video counters // ====== Slot Interrupts Enable Address: $50026012 ===== #define RvIRQ1En 0 // slot 1 interrupt enabled #define RvIRQ2En 1 // slot 2 interrupt enabled #define RvIRQ3En 2 // slot 3 interrupt enabled #define RvIRQ4En 3 // slot 4 interrupt enabled #define RvIRQ5En 4 // slot 5 interrupt enabled #define RvIRQ6En 5 // slot 6 interrupt enabled #define RvIRQ0En 6 // slot 0 interrupt or internal video enabled //RvSetClr EQU 7 ; on READs, always reads 0 // on WRITEs, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's // ====== Interrupt Flags Enable Address: $50026013 ===== #define RvSCSIDRQEn 0 // 1 = SCSI DRQ interrupt enabled #define RvAnySlotEn 1 // 1 = any slot(0-6).IRQ int. enabled #define RvExpIRQEn 2 // 1 = expansion int. (reserved) enabled #define RvSCSIRQEn 3 // 1 = SCSI IRQ interrupt enabled #define RvSndIRQEn 4 // 1 = Apple Sound Chip interrupt enabled //RvResr EQU 5 ; reserved //RvResr EQU 6 ; reserved //RvSetClr EQU 7 ; on READs, always reads 1 // on WRITEs, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's //---------- // VDAC register definitions //---------- #define vDACwAddReg $0000 // offset from vDACBase for write address reg #define vDACrAddReg $000C // offset from vDACBase for read address register #define vDACwDataReg $0004 // offset from vDACBase for write data reg #define vDACPixRdMask $0008 // offset from vDACBase for pixel mask //__________________________________________________________________________________________ // // // VISA Pin Definitions and Register Offsets - Multiple names for the same pin are grouped // together. New definitions for VISA pins are added such that the grouping is maintained. // // //__________________________________________________________________________________________ //---------- // VISA register definitions - generally, these equates are a precise subset // of the RBV equates. //---------- // these registers are accessed off of VIA1 lomem #define VsData1A $1E00 // VIA1 data reg A #define VsData1B $0000 // VIA1 data reg B // these registers are accessed off of VISA lomem #define VsData2B $000 // VIA2 data reg B equivalent #define VsExp $001 // VISA Expansion Register #define VsSInt $002 // Slot Interrupt Register #define VsIFR $003 // Interrupt Flag Register #define VsMonP $010 // Monitor Parameters Register #define VsSEnb $012 // Slot Interrupt Enable Register #define VsIER $013 // Interrupt Flag Enable Register // ====== VIA2 BufferB Equivalent Address: $50026000 ===== //*VsResr EQU 0 ; reserved //*VsResr EQU 1 ; reserved //*VsResr EQU 2 ; reserved #define VsFC3 3 // select 32-bit map. 0=24 bit, 1=32 bit //*VsResr EQU 4 ; reserved //*VsResr EQU 5 ; reserved #define VsSndExt 6 // Always reads as 1 - play sounds in Mono //*VsResr EQU 7 ; reserved // ====== Future Expansion Address: $50026001 ===== #define VsA2Mode 0 // 0=512*384 mode, 1=560*384 mode #define VsVResEn 1 // 1=enable vertical counter reset for video genlock #define VsFlWrEn 2 // 1=enable writes to flash EEPROM #define Vs1BV 3 // 1=low base for 1-bit mode, 0=high base #define VsPg2 4 // 1=main video page, 0=sec video page //*VsResr EQU 5 ; reserved #define VsSiz0 6 // RAM size control bit 00=1MB, 01=1.5MB #define VsSiz1 7 // 10=3MB,11=9MB // ====== Slot Interrupts Address: $50026002 ===== //*VsResr EQU 0 ; reserved //*VsResr EQU 1 ; reserved //*VsResr EQU 2 ; reserved //*VsResr EQU 3 ; reserved //*VsResr EQU 4 ; reserved #define VsSIRQ 5 // expansion slot interrupt #define VsVBLInt 6 // slot zero (built-in) VBL interrupt //*VsResr EQU 7 ; reserved // ====== Interrupt Flags Address: $50026003 ===== #define VsSCSIDRQ 0 // 1 = SCSI DRQ interrup #define VsAnySlot 1 // 1 = any slot(0-6).IRQ int //*VsResr EQU 2 ; reserved #define VsSCSIRQ 3 // 1 = SCSI IRQ interrupt #define VsSndIRQ 4 // 1 = Apple Sound Chip interrupt //RvResr EQU 5 ; reserved //RvResr EQU 6 ; reserved #define RvSetClr 7 // on READ, 1 = any enabled interrupt // on WRITE, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's // ====== Monitor Parameters Address: $50026010 ===== //*VsResr EQU 0 ; (lsb) #define VsColor 1 // (compat w/RBV) R/W 000 = 1bit, R/W 010 = 4bit //*VsResr EQU 2 ; (msb) #define VsMonConn 3 // (lsb)1=no monitor connected //*VsResr EQU 4 ; (compat w/RBV) #define VsMonSel 5 // (msb) Monitor select 1=Jersey, 0=Rubik //*VsResr EQU 6 ; reserved //*VsResr EQU 7 ; reserved // ====== Slot Interrupts Enable Address: $50026012 ===== //*VsResr EQU 0 ; reserved //*VsResr EQU 1 ; reserved //*VsResr EQU 2 ; reserved //*VsResr EQU 3 ; reserved //*VsResr EQU 4 ; reserved #define VsExtIRQEn 5 // expansion slot interrupt enabled #define VsIntIRQEn 6 // internal video interrupt enabled #define VsSetClr 7 // on READs, always reads 0 // on WRITEs, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's // ====== Interrupt Flags Enable Address: $50026013 ===== #define VsSCSIDRQEn 0 // 1 = SCSI DRQ interrupt enabled #define VsAnySlotEn 1 // 1 = any slot(0-6).IRQ int. enabled //*VsResr EQU 2 ; reserved #define VsSCSIRQEn 3 // 1 = SCSI IRQ interrupt enabled #define VsSndIRQEn 4 // 1 = Apple Sound Chip interrupt enabled //VsResr EQU 5 ; reserved //VsResr EQU 6 ; reserved //RvSetClr EQU 7 ; on READs, always reads 1 // on WRITEs, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's //---------- // V8 register definitions - generally compatible with the VISA equates above, but a few equates // have changed names. //---------- // these registers are accessed off of the V8 lomem #define V8Exp $001 // V8 Expansion Register #define V8SInt $002 // V8 Slot Interrupt Register #define V8MonP $010 // Monitor Parameters Register #define V8SEnb $012 // Slot Interrupt Enable Register // ====== Future Expansion Address: $50F26001 ===== #define V8A2Mode 0 // 0=512*384 mode, 1=560*384 mode #define V8512Row 1 // 1=V8 rowbytes is 256, 0=rowbytes is 512 #define V8vRAMIn 2 // 1=refresh video from vRAM, 0=refresh from dRAM //*V8Resr EQU 3 ; no 1BV on V8 //*V8Resr EQU 4 ; no VP2 on V8 #define V8Siz0 5 // RAM size control bit 0 #define V8Siz1 6 // RAM size control bit 1 #define V8Siz2 7 // RAM size control bit 2 // ====== Monitor Parameters Address: $50F26010 ===== #define V8Col0 0 // Video depth control bit 0 #define V8Col1 1 // Video depth control bit 1 #define V8Col2 2 // Video depth control bit 2 #define V8MonID1 3 // Monitor sense ID bit 1 #define V8MonID2 4 // Monitor sense ID bit 2 #define V8MonID3 5 // Monitor sense ID bit 3 //*VsResr EQU 6 ; reserved //*VsResr EQU 7 ; reserved // ====== Slot Interrupts Enable Address: $50F26012 ===== //*V8Resr EQU 0 ; reserved //*V8Resr EQU 1 ; reserved //*V8Resr EQU 2 ; reserved //*V8Resr EQU 3 ; reserved //*V8Resr EQU 4 ; reserved #define V8ExtIRQEn 5 // expansion slot interrupt enabled #define V8IntIRQEn 6 // internal video interrupt enabled //*V8Resr EQU 7 ; reserved //---------- // Elsie VDAC register definitions //---------- // VISA/Bt450 registers #define VsDACwAddReg $0000 // offset from vDACBase for write address reg #define VsDACwDataReg $0001 // offset from vDACBase for write data reg // V8/Ariel registers #define V8DACrAddReg $0000 // offset for read address reg #define V8DACwAddReg $0000 // offset for write address reg #define V8DACrDataReg $0001 // offset for read data reg #define V8DACwDataReg $0001 // offset for write data reg #define V8DACrCntlReg $0002 // offset for read control reg #define V8DACwCntlReg $0002 // offset for write control reg #define V8DACrKeyReg $0003 // offset for read key color reg #define V8DACwKeyReg $0003 // offset for write key color reg #define V8vRAMBase $50F40000 // base address of V8 VRAM, if present // End of VISA changes <4> //---------- // DAFB register definitions (offsets from DAFBBase in ProductInfo) ($F980 0000) //---------- #define DAFB_BaseOffset $0 // DAFB offset from DAFBBase #define DAFB_ParmSize $5 // size of DAFB programmed subset #define DAFB_NumRegs ((16-4)) // Number of DAFB registers (Color Regs are really vRAM). #define DAFB_VidBaseHi $0 // DAFB video base address, bits 20:9 #define DAFB_VidBaseLo $4 // DAFB video base address, bits 8:5 (4:0 always zero) #define DAFB_RowWords $8 // DAFB rowlongs size #define DAFB_ClkCfg $C // DAFB clock configuration #define DAFB_Config $10 // DAFB general configuration #define DAFB_BlkWrtEn $14 // DAFB block write enable #define DAFB_PgMdEn $18 // DAFB page mode enable #define DAFB_Sense $1C // DAFB sense line #define DAFB_Reset $20 // DAFB reset control #define DAFB_SCSIch0 $24 // Turbo SCSI channel 0 control (not used) #define DAFB_SCSIch1 $28 // Turbo SCSI channel 1 control (not used) #define DAFB_Test $2C // DAFB test control #define DAFB_CRB0 $30 // vRAM Color Register, bank 0 #define DAFB_CRB1 $34 // vRAM Color Register, bank 1 #define DAFB_CRB2 $38 // vRAM Color Register, bank 2 #define DAFB_CRB3 $3C // vRAM Color Register, bank 3 //---------- // Swatch (in DAFB) register definitions (offsets from DAFBBase in ProductInfo) //---------- #define Swatch_BaseOffset $100 // Swatch offset from DAFBBase #define Swatch_BaseOffset1 $124 // parameter offset #define Swatch_ParmSize1 $12 // size of Swatch parameter list #define Swatch_NumRegs 30 // Number of Swatch registers. #define Swatch_Mode $100 // Swatch general control #define Swatch_IntMsk $104 // Swatch interrupt control #define Swatch_IntStat $108 // Swatch interrupt status #define Swatch_ClrCrsrInt $10C // Swatch clear cursor interrupt (not used in this form) #define Swatch_ClrAnimInt $110 // Swatch clear animation interrupt (not used in this form) #define Swatch_ClrVBLInt $114 // Swatch clear VBL interrupt (not used in this form) #define Swatch_CrsrLine $118 // Swatch cursor interrupt trigger line #define Swatch_AnimLine $11C // Swatch animation interrupt trigger line #define Swatch_Test $120 // Swatch counter test #define Swatch_HSyncRegs $124 // Swatch horizontal sync registers (set as a group) #define Swatch_HSerr $124 // HSerr #define Swatch_Hlfln $128 // Hlfln #define Swatch_HEq $12C // HEq #define Swatch_HSP $130 // HSP #define Swatch_HBWay $134 // HBWay #define Swatch_HBrst $138 // HBrst #define Swatch_HBP $13C // HBP #define Swatch_HAL $140 // HAL #define Swatch_HFP $144 // HFP #define Swatch_HPix $148 // HPix #define Swatch_VSyncRegs $14C // Swatch vertical sync registers (set as a group) #define Swatch_VHLine $14C // VHLine #define Swatch_VSync $150 // VSync #define Swatch_VBPEq $154 // VBPEq #define Swatch_VBP $158 // VBP #define Swatch_VAL $15C // VAL #define Swatch_VFP $160 // VFP #define Swatch_VFPEq $164 // VFPEq #define Swatch_TimeAdj $168 // Swatch miscellaneous timing adjust #define Swatch_ActLine $16C // Swatch active video line (read-only) //---------- // ACDC register definitions (offsets from DAFBBase in ProductInfo, also in vDACBase) //---------- #define ACDC_AddrReg $200 // set position in ACDC internal RAM #define ACDC_DataReg $210 // read/write data in ACDC internal RAM #define ACDC_ConfigReg $220 // ACDC offset from DAFBBase #define ACDC_ParmSize $1 // size of ACDC parameter list //---------- // National Clock Chip register definitions (offsets from DAFBBase in ProductInfo) //---------- #define Clk_BaseOffset $300 // National offset from DAFBBase #define Clk_ParmSize $10 // size of National parameter list #define Clk_ParmSize1 $0A // (Once programmed, the last six bytes are always the same.) //---------- // Misc. DAFB Parms //---------- #define Misc_ParmSize $4 // Just for consistency with other DAFB parms. //---------- // GSC register definitions (offsets from VDACAddr in ProductInfo) ($50F2 0000)
jmp //---------- #define GSCDeviceID $00 // Device revision register; read only. #define GSCPanelID $01 // “Senseline” read/write register. #define GSCPanelControl $02 // Switches r/w sense of PanelID reg. #define GSCPanelSetup $03 // Panel intialization register. #define GSCGrayScale $04 // The depth-switching register. #define GSCPolyAdj $05 // Allows for grayscale adjustment. #define GSCPanelAdj $06 // Allows for panel adjustment. #define GSCACDClk $07 // Who knows? #define GSCRefreshRate $08 // Refresh cycles per scanline. #define GSCBlankShade $09 // Shade of gray for depth switches. #define GSCPanelSkew $0A // Who knows? #define GSCDiag0 $1D // Undocumented “diagnostic” registers. #define GSCDiag1 $1E #define GSCDiag2 $1F //---------- // Sonora register definitions (offsets from SonoraAddr in ProductInfo) ($50F0 0000)

//---------- #define SonoraVIA2Base $26000 // Base address of VIA2 #define SonoraVIA2Data $00 // VIA2 Data Register #define SonoraRAMSize $01 // DRAM config #define SonoraSlotIFR $02 // Slot Interrupt Flags Register #define SonoraVIA2IFR $03 // VIA2 Interrupt Flags Register #define SonoraVRAMSize $04 // VRAM config #define SonoraSpeedReg $05 // System CPU Speed (waitstate) Register #define SonoraSlotIER $12 // Slot Interrupt Enable Register #define SonoraVIA2IER $13 // Interrupt Flag Register #define SonoraVdCtlBase $28000 // Base address of video control registers #define SonoraVdModeReg $00 // Monitor code and video blanking register #define SonoraVdColrReg $01 // Framebuffer pixel depth control register #define SonoraVdSenseRg $02 // Senseline register // Bits for Misc Sonora Regs // #define SonoraSetClr 7 // on WRITEs, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's // Bits for SonoraSlotIER // #define SonoraVBLIRQEn 6 // Enable/Disable built-in video VBL //---------- // Ariel register definitions (offsets from VDACAddr in ProductInfo) ($50F2 4000)
//---------- #define ArielAddrReg 0 // Offset to r/w address register #define ArielDataReg 1 // Offset to r/w data register #define ArielConfigReg 2 // Offset to r/w control register #define ArielKeyReg 3 // Offset to r/w key color register //---------- // MMC register definitions (offsets from MMCAddr in ProductInfo) ($50F3 0400) rb, start //---------- #define MMC_DRAMspeed0 $00 // DRAM timing register 0 [M0]. #define MMC_DRAMspeed1 $04 // DRAM timing register 1 [M1]. #define MMC_CPUspeed0 $08 // Clock speed 0 [M2]. #define MMC_CPUspeed1 $0C // Clock speed 1 [M3]. #define MMC_ROMspeed0 $10 // ROM cycle time 0 [M4]. #define MMC_ROMspeed1 $14 // ROM cycle time 1 [M5]. #define MMC_ROMspeed2 $18 // ROM cycle time 2 [M6]. #define MMC_DSPspeed $1C // DSP clock speed [M7]. #define MMC_DRAMwidth0 $20 // DRAM width 0 [M8]. #define MMC_DRAMwidth1 $24 // DRAM width 1 [M9]. #define MMC_DRAMwidth2 $28 // DRAM width 2 [M10]. #define MMC_DRAMwidth3 $2C // DRAM width 3 [M11]. #define MMC_EPROMmode $30 // EPROM mode [M12]. #define MMC_DRAMrange2 $34 // DRAM bank range 0 [M13]. #define MMC_DRAMrange1 $38 // DRAM bank range 1 [M14]. #define MMC_DRAMrange0 $3C // DRAM bank range 2 [M15]. #define MMC_CPUID0 $40 // CPU ID 0 [M16]. #define MMC_CPUID1 $44 // CPU ID 1 [M17]. #define MMC_ClockSelect $48 // Endeavor Input Clock Select (NTSC/PAL) [M18]. #define MMC_Bypass $4C // RGB or Composite bypass [M19]. //---------- // MUNI (NuBus) register definitions //---------- // rb, • TEMP for EVT1 ; rb #define MUNIBaseEVT1 $50F30800 // Base address of Muni for EVT1 rb #define MUNIBase $50F30000 // Base address of Muni. rb #define MUNI_IntCntrl $00 // Interrupt control register. #define MUNI_IntStatus $04 // Interrupt status register. #define MUNI_Control $08 // System control register. #define MUNI_BlkAttmpt $0C // Block attempt register. #define MUNI_Status $10 // Status register. #define MUNI_Test $14 // Test control register. //---------- // Civic register definitions (offsets from CivicAddr in ProductInfo) ($50F3 6000) //---------- #define Civic_VBLInt $000 // Read-only VBL flag register #define Civic_VBLEnb $110 // Enables VBL interrupt. #define Civic_VBLClr $120 // Clear VBL interrupt. #define Civic_Enable $004 // Enables Civic’s timing generator (Casio). #define Civic_Reset $10C // Resets Casio. #define Civic_VDCInt $008 // Read-only VDC flag register. #define Civic_VDCClr $00C // Clears VDC interrupt. #define Civic_VDCEnb $010 // Enables VDC interrupt. #define Civic_VDCClk $018 // Enables VDC clock. #define Civic_VidInSize $014 // Controls video-in Rows (1024 vs. 1536 bytes). #define Civic_VidInDble $208 // Controls whether Civic Doubles each Video-in Field #define Civic_ScanCtl $01C // Controls progressive vs. interlaced scans. #define Civic_GSCDivide $020 // Controls graphics clock divide count. #define Civic_VSCDivide $02C // Controls video-in clock divide count. #define Civic_VRAMSize $040 // Controls VRAM sizing (1 vs. 2 Mbytes). #define Civic_RfrshCtl $044 // Controls the refresh mode. #define Civic_BusSize $04C // Controls the bus size (32 vs. 64 bits). #define Civic_SpeedCtl $050 // Controls the timing (25 vs. 33 MHz). #define Civic_ConvEnb $054 // Enables convolution. #define Civic_ReadSense $088 // Sense-line registers. #define Civic_SenseCtl $058 // #define Civic_Sense0 $05C // #define Civic_Sense1 $060 // #define Civic_Sense2 $064 // #define Civic_SenseTst $068 // #define Civic_SyncClr $06C // Disables RGB (Sync) output. #define Civic_BaseAddr $0C0 // Base address of active video. #define Civic_RowWords $094 // Row long words of active video. #define Civic_AdjF1 $128 // Timing adjust registers. #define Civic_AdjF2 $124 // #define Civic_Piped $440 // #define Civic_HSerr $180 // Horizontal timing registers. #define Civic_HlfLn $280 // #define Civic_HEq $2C0 // #define Civic_HSP $300 // #define Civic_HBWay $340 // #define Civic_HAL $380 // #define Civic_HFP $3C0 // #define Civic_HPix $400 // #define Civic_VHLine $480 // Vertical timing registers. #define Civic_VSync $4C0 // #define Civic_VBPEqu $500 // #define Civic_VBP $540 // #define Civic_VAL $580 // #define Civic_VFP $640 // #define Civic_VFPEqu $680 // #define Civic_CurLine $6C0 // #define Civic_VInHAL $1C0 // Video-in timing registers. #define Civic_VInHFPD $200 // #define Civic_VInHFP $240 // #define Civic_VInVAL $5C0 // #define Civic_VInVFP $600 // #define Civic_HLDB $114 // Horizontal test/control registers. #define Civic_HHLTB $118 // #define Civic_HActHi $11C #define Civic_VLDB $100 // VSync test/control registers. #define Civic_VHLTB $104 // #define Civic_VActHi $108 // #define Civic_TestEnb $12C // Enables Casio test mode. #define Civic_CntTest $140 // Count test register. //---------- // Sebastian register definitions (offsets from SebastianAddr in ProductInfo) ($50F3 0000) //---------- #define SebastAddrReg $000 // CLUT/DAC Address register. #define SebastDataReg $010 // CLUT/DAC Data register. #define SebastPCBR $020 // CLUT/DAC Pixel Bus Control register. //---------- // Endeavor register definitions //---------- #define Endeavor $50F2E000 // Base address of Endeavor in Cyclone. #define EndeavorM $000 // 8-bit numerator. #define EndeavorN $010 // 8-bit denominator. #define EndeavorClk $020 // Clock select (A or B). // rb, end //---------- // MSC register definitions (offsets from MSCAddr in ProductInfo) ($50F2 6000) //---------- #define MSCSlotIFR $02 // slots interrupt flags #define MSCVIA2IFR $03 // VIA 2 interrupt flags #define MSCConfig $10 // RAM, clock configuration #define MSCSlotIER $12 // slots interrupt enables #define MSCVIA2IER $13 // VIA 2 interrupt enables #define MSCClkCntl $21 // peripherals clock control #define MSCSndCntl $22 // sound control #define MSCFlashWrEnb $23 // flash ROM write enable #define MSCPowerCycle ($50FA0000-$50F26000) // CPU power off control register

// ====== VIA2 BufferB Equivalent Address: $50F26000 ===== #define MSCExpansion 0 // 0 = enable on-board external cache (not currently used) //v2PMack EQU 1 ; Power manager handshake acknowledge //v2PMreq EQU 2 ; Power manager handshake request //reserved3 EQU 3 ; reserved //reserved4 EQU 4 ; reserved //reserved5 EQU 5 ; reserved //reserved6 EQU 6 ; reserved //reserved7 EQU 7 ; reserved // ====== Slot Interrupt Flags Address: $50F26002 ===== //reserved0 EQU 0 ; reserved //reserved1 EQU 1 ; reserved //reserved2 EQU 2 ; reserved //reserved3 EQU 3 ; reserved //reserved4 EQU 4 ; reserved //RvIRQE EQU 5 ; slot E interrupt //RvIRQLCD EQU 6 ; LCD display VBL interrupt //reserved7 EQU 7 ; reserved // ====== VIA 2 Interrupt Flags Address: $50F26003 ===== //RvSCSIDRQ EQU 0 ; 1 = SCSI DRQ interrupt //RvAnySlot EQU 1 ; 1 = any slot(0-6).IRQ int //reserved2 EQU 2 ; reserved //RvSCSIRQ EQU 3 ; 1 = SCSI IRQ interrupt //RvSndIRQ EQU 4 ; 1 = Apple Sound Chip interrup //reserved5 EQU 5 ; reserved //reserved6 EQU 6 ; reserved //RvSetClr EQU 7 ; on READ, 1 = any enable interrupt // ====== MSC Configuration Address: $50F26010 ===== #define MSC25MHz 0 // 1 = 25MHz system, 0 = 33MHz system #define MSCEconoBit 1 // 1 = econo-mode enabled (switches to 16MHz) #define MSCFastROM 2 // 1 = 100ns ROMs installed, 0 = 120ns ROMs installed //reserved3 EQU 3 ; reserved #define MSCBank8M 4 // 1 = banks 4-7 are 8MB, 0=banks 4-7 are 2MB #define MSCSize0 5 // RAM size bit #define MSCSize1 6 // RAM size bit #define MSCSize2 7 // RAM size bit // ====== Slot Interrupt Enables Address: $50F26012 ===== //reserved0 EQU 0 ; reserved //reserved1 EQU 1 ; reserved //reserved2 EQU 2 ; reserved //reserved3 EQU 3 ; reserved //reserved4 EQU 4 ; reserved //RvIRQEEn EQU 5 ; slot E interrupt enabled //RvIRQLCDEn EQU 6 ; LCD display VBL interrupt enabled //RvSetClr EQU 7 ; on READs, always reads 0 // ====== VIA 2 Interrupt Enables Address: $50F26013 ===== //RvSCSIDRQEn EQU 0 ; 1 = SCSI DRQ interrupt enabled //RvAnySlotEn EQU 1 ; 1 = any slot(0-6).IRQ int. enabled //reserved2 EQU 2 ; reserved //RvSCSIRQEn EQU 3 ; 1 = SCSI IRQ interrupt enabled //RvSndIRQEn EQU 4 ; 1 = Apple Sound Chip interrupt enabled //reserved5 EQU 5 ; reserved //reserved6 EQU 6 ; reserved //RvSetClr EQU 7 ; on READs, always reads 0 // on WRITEs, 1 = 1-bits in bits 0-6 write 1's // 0 = 1-bits in bits 0-6 write 0's // ====== Peripherals Clock Control Address: $50F26021 ===== #define MSCIOClk 0 // 1=15.6672MHz I/O clock running, 0=stopped #define MSCSCCClk 1 // 1=3.672MHz SCC clock running, 0=stopped #define MSCSCSIReset 2 // 1=SCSI reset not asserted, 0=reset asserted (clocks stop) #define MSCLCDReset 3 // 1=LCD reset not asserted, 0=reset asserted (clocks stop) //reserved4 EQU 4 ; reserved //reserved5 EQU 5 ; reserved //reserved6 EQU 6 ; reserved //reserved7 EQU 7 ; reserved // ====== Sound Control Address: $50F26022 ===== #define MSCSndPower 0 // 1=DFAC power on, 0=DFAC power off //reserved1 EQU 1 ; reserved //reserved2 EQU 2 ; reserved //reserved3 EQU 3 ; reserved //reserved4 EQU 4 ; reserved //reserved5 EQU 5 ; reserved #define MSCSndBusy 6 // 1=access to FIFO since last access to this register #define MSCSndLatch 7 // 1=DFAC is powered up and initialized #define MSCDefConfig ((1< //__________________________________________________________________________________________ // // // Memory Controllers - Register Definitions and Misc Equates for Memory Controllers. Included // are: FMC, ORWELL, JAWS, Niagra, Ponti, djMEMC. // // //__________________________________________________________________________________________ //--------------------------------------------------- // FMC (Fitch Memory Controller) Equates //--------------------------------------------------- #define FMCConfig $0 // offset to configuration register. It is a 16 // bit wide register with a 1 bit wide data port // on d24, so do byte writes (and rotates) and // let dynamic bus sizing replicate it on d24-31. #define FMCLatch $10 // offset to 'latch config data' register (latches // on a write to here) #define FMCInit $F3EF // config reg initial value <4.5><4.6><4.9><1> #define FMCRPUInit $F3FF // config reg initial value (parity) <1> //--------------------------------------------------- // Orwell Memory Controller Equates <5> //--------------------------------------------------- // Orwell only has one input/output data bit. So to store or retrieve any configuration register // information, you must read/write a succession of long-word addresses, starting at the addresses // below, with the ONLY valid data bit being {reg}:0. Valued being read must be assembled one bit // at a time; values being written must be loaded into the config registers 1 bit at a time. The // new config. register values do not become active until a "latch" register address associated // with the config. register is written. // // The below addresses correspond to longword addresses where bit 0 of whatever data register used to // read/write the location will be stored. The Orwell configuration register is a 34-bit register, // with each bit written to/read by addressing the appropriate longword offset. // // The configuration register can be thought of like this: // // +---------------------------------------------------------------------------------------------+ // | PAR_ODD | PAR_ENB | REFRESH | ROM_SPEED | DRAM_SPEED | CLK_SPEED | BANK_D | BANK_C | BANK_B | // +---------------------------------------------------------------------------------------------+ // 28 27 26 24 23 21 20 19 18 17 12 11 6 5 0 // // // +---------------------------------------------------------------------+ // | RAS | Optional WRITE | Optional Read | Optional Read | Page | // | Precharge | wait state | 2nd wait state | 1st wait state | Mode | // +---------------------------------------------------------------------+ // 33 32 31 30 29 // *** Register Offsets *** #define OrCfgRegAddr 0 // starting offset of config reg. bits #define OrCfgRegSize 34 // number of bits in the configuration register #define OrBankFieldSize 6 // each bank config. reg. field is 6 bits wide #define OrBankBCfgAddr (OrCfgRegAddr) // starting offset of BankB(5:0) #define OrBankCCfgAddr (OrBankBCfgAddr+(4*OrBankFieldSize))// starting offset of BankC(5:0) #define OrBankDCfgAddr (OrBankCCfgAddr+(4*OrBankFieldSize))// starting offset of BankD(5:0) #define OrClkSpeedAddr (OrBankDCfgAddr+(4*OrBankFieldSize))// starting address of Clock_Speed // ... Clock_Speed is 1 bit (0=25MHz) #define OrDRAMSpeedAddr (OrClkSpeedAddr+4) // starting address of DRAM Speed(1:0) #define OrDRAMFieldSize 2 // DRAM speed config reg. field is 2 bits wide #define OrROMSpeedAddr (OrDRAMSpeedAddr+(4*OrDRAMFieldSize))// starting address of ROM Speed(2:0) #define OrROMFieldSize 3 // ROM speed config reg. field is 3 bits wide #define OrRefreshAddr (OrROMSpeedAddr+(4*OrROMFieldSize))// starting address of Refresh Rate(2:0) #define OrRefreshSize 3 // Refresh speed config reg. field is 3 bits wide #define OrParityEnbAddr (OrRefreshAddr+(4*OrRefreshSize))// starting address of parity enable/disable // ... Parity_Enable is 1 bit (0=parity OFF) #define OrParityTypAddr (OrParityEnbAddr+4) // starting address of parity type (even/odd) // ... Parity_Type is 1 bit (0=parity EVEN) #define OrPageMode (OrParityTypAddr+4) // #define OrWaitRead1 (OrPageMode+4) // #define OrWaitRead2 (OrWaitRead1+4) // #define OrWaitWrite1 (OrWaitRead2+4) // #define OrRASPrecharge (OrWaitWrite1+4) // #define OrLatchOffset $A0 // offset from start of config reg. where latches live #define OrwellLatches (OrCfgRegAddr+OrLatchOffset)// starting address of Latch Addresses #define OrLoadBanks (OrwellLatches) // Load Bank Config Reg. Latch address #define OrLoadSpeeds (OrLoadBanks+4) // Load Clock, DRAM and ROM Speeds Latch address #define OrLoadRefresh (OrLoadSpeeds+4) // Load Refresh interval Latch address #define OrLoadParity (OrLoadRefresh+4) // Load Parity enable/disable and type Latch address #define OrLoadMode (OrLoadParity+4) // Load Page Mode On/Off address #define OrLoadWaitStates (OrLoadMode+4) // Load Read/Write extra waitstates address #define OrLoadPrecharge (OrLoadWaitStates+4) // Load RAS precharge address #define OrParityStatus $100 // A0-BC = LS 8 bits, C0-DC = LM 8 bits // E0-FC = HM 8 bits, 100-11C = MS 8 bits #define OrParErrInByte0 $180 // =1 if parity error occurred in byte 0 #define OrParErrInByte1 $184 // =1 if parity error occurred in byte 1 #define OrParityError $188 // =1 if parity error occurred (period) // *** Initializing Values at Bootup Time *** #define ORINITBankB $10 // 10=Bank B at 64MB #define ORINITBankC $20 // 20=Bank C at 128MB #define ORINITBankD $30 // 30=Bank D at 192MB #define ORINITClock25 1 // 1=25MHz, 0=33MHz #define ORINITClock33 0 // #define ORINITDRAMSpeed 1 // 0=100ns, 1=80ns, 2=60ns <10> #define ORINITROMSpeed25 2 // *n* = Clock_Access-3 (0 = 3 Clock_Access) #define ORINITROMSpeed33 4 // *n* = Clock_Access-3 (0 = 3 Clock_Access) #define ORINITREFRESH25 2 // 0=25MHz 7.8µsec, 1=33MHz, 7.8µsec <21> // 2=25MHz 15.6µsec, 3=33MHz 15.6µsec <21> #define ORINITREFRESH33 3 // <21> #define ORINITParity 0 // 0=parity OFF, 1=parity ON #define ORINITParType 1 // 0=even, 1=odd // Additional (programmable) wait states for reads and writes #define ORINITPageMode 0 // 0=off, 1=on #define ORINITWaitRd1 0 // 0=off, 1=on (unless Rd2 = 1, in which case it is interpreted as off) #define ORINITWaitRd2 0 // 0=off, 1=on (unless Rd1 = 1, in which case it is interpreted as off) #define ORINITWaitWr1 0 // 0=off, 1=on #define ORINITRAS25 0 // 0=2 cycles, 1=3 cycles #define ORINITRAS33 1 // // These are 32-bit constants that hold all but 2 bits of the initial defaults we . // would want to jam into the Orwell configuration register. These are arranged . // in order the register is memory-mapped to facilitate the code that sticks them . // in the register. There are two bits that don't fit in a 32-bit constant, the . // optional -OrWaitWrite1- and the not-so-optional -OrRASPrecharge-. Those values . // are used and initialized separately. . #define ORWELL_INIT25 ((ORINITWaitRd2<<31)|\ (ORINITWaitRd1<<30)|\ (ORINITPageMode<<29)|\ (ORINITParType<<28)|\ (ORINITParity<<27)|\ (ORINITREFRESH25<<24)|\ (ORINITROMSpeed25<<21)|\ (ORINITDRAMSpeed<<19)|\ (ORINITClock25<<18)|\ (ORINITBankD<<12)|\ (ORINITBankC<<6)|\ (ORINITBankB)) #define ORWELL_INIT33 ((ORINITWaitRd2<<31)|\ (ORINITWaitRd1<<30)|\ (ORINITPageMode<<29)|\ (ORINITParType<<28)|\ (ORINITParity<<27)|\ (ORINITREFRESH33<<24)|\ (ORINITROMSpeed33<<21)|\ (ORINITDRAMSpeed<<19)|\ (ORINITClock33<<18)|\ (ORINITBankD<<12)|\ (ORINITBankC<<6)|\ (ORINITBankB)) //--------------------------------------------------- // JAWS Memory Controller Equates //--------------------------------------------------- #define JAWSRAMWaitS $00000 // RAM wait state control register offset #define JAWSEconoMode $04000 // Econo-Mode register offset <21> HJR #define JAWSROMWaitS $06000 // ROM wait state control register offset #define JAWSMemConfigA $10000 // Contiguous memory (knitting) registers #define JAWSMemConfigB $12000 // Contiguous memory (knitting) registers #define JAWSMemConfigC $14000 // Contiguous memory (knitting) registers #define JAWSPowerCycle $20000 // CPU power off control register #define JAWSSetCPUClock $22000 // Controls the CPU clock frequency #define JAWSPCBLevel $30000 // Selects between SCC and SCC/SCSI combo #define JAWSLockRAM $32000 // Puts RAM in self refresh state #define JAWSGetCPUClock $34000 // Returns the CPU clock frequency //--------------------------------------------------- // Niagra Memory Controller Equates //--------------------------------------------------- #define NiagraVidCntCtr $02000 // Video count options <21> HJR #define NiagraGUR $16000 // General Utility Registers (ponti register access) rb #define NiagraVidAcc1 $22000 // Video Accesses thru 64 #define NiagraVidAcc2 $24000 // Video Accesses thru 512 #define NiagraVidAcc3 $26000 // Video Accesses thru 2K #define NiagraFlashEnbl $30000 // Enable flash from Niagra #define NiagraFPUAcc $34000 // FPU access detected #define NiagraSpeedReg $36000 // Returns the CPU clock frequency //--------------------------------------------------- rb, start // Ponti Register Equates (NiagraGUR register space + offset //--------------------------------------------------- #define PontiSPIMdmCtl $000 #define PontiSndCtl $400 #define PontiSPISftReg $800 #define PontiLmpSftCtl $C00 // Ponti PontiSPIMdmCtl bit definitions #define PontiSPIMdmId 0 // (1 = SPI modem connected) #define PontiSPIAck 2 // (1 = ack idle) #define PontiSPIReq 3 // (1 = req idle) #define PontiSPIIrq 4 // (1 = interrupting) // Ponti PontiSoundCtl bit definitions #define PontiSndSPIIrqMsk 0 // (1 = mask int) - irq mask for PontiSPIIrq #define PontiSndIntMic 1 // (1 = using internal mic) - flag to check which mike is used #define PontiSndLatchClr 2 // (pulse high to clear) - line directly to latch #define PontiSndLatchData 3 // (1 = snd ckt used) - output value of the sound latch #define PontiSndPWMOff 4 // (1 = PWM off) - ultimate off to remove "pop" #define PontiSndPwrOn 5 // (1 = power snd ckt) - sw equal of latch output #define PontiSndMux0 6 // (1 = ???) #define PontiSndMux1 7 // (1 = modem sound {regardless of Mux0}) // Ponti PontiLmpSftCtl bit definitions #define PontiLmpOff 0 // (1 = backlight on) - turn on the backlight tube #define PontiLmpHWCtl 1 // (1 = Hardware control) - if set, hardware control loop #define PontiLmpMux0 2 // (1 = 1/2 pot) - 1/2 scale pot reduction #define PontiLmpMux1 3 // (1 = 1/4 pot) - 1/4 scale pot reduction #define PontiLmpSPIDir 4 // (1 = shift out) - direction of shift register // rb, end //------------------------------------- thru next // djMEMC memory controller equates //------------------------------------- // This hard-coded I/O address is in here because there is no more room in the // Universal tables to hold this information. #define MEMCAddr $50F0E000 // same for both Wombat + WLCD memory maps #define MEMCRegisterStart 0 #define MEMCIntleaveEnable (MEMCRegisterStart) // DRAM interleave enable reg. #define dj_OneBufferedBusBit 5 // djMEMC supports up to a maximum of 10 (TEN) DRAM banks #define dj_MaxBanks 10 // #define MEMCDRAMCfg0 (MEMCIntleaveEnable+4) // Bank 0 cfg reg #define MEMCDRAMCfg1 (MEMCDRAMCfg0+4) // Bank 1 cfg reg #define MEMCDRAMCfg2 (MEMCDRAMCfg1+4) // Bank 2 cfg reg #define MEMCDRAMCfg3 (MEMCDRAMCfg2+4) // Bank 3 cfg reg #define MEMCDRAMCfg4 (MEMCDRAMCfg3+4) // Bank 4 cfg reg #define MEMCDRAMCfg5 (MEMCDRAMCfg4+4) // Bank 5 cfg reg #define MEMCDRAMCfg6 (MEMCDRAMCfg5+4) // Bank 6 cfg reg #define MEMCDRAMCfg7 (MEMCDRAMCfg6+4) // Bank 7 cfg reg #define MEMCDRAMCfg8 (MEMCDRAMCfg7+4) // Bank 8 cfg reg #define MEMCDRAMCfg9 (MEMCDRAMCfg8+4) // Bank 9 cfg reg #define MEMCmemTop (MEMCDRAMCfg9+4) // Top of stitched RAM #define MEMCconfig (MEMCmemTop+4) // "Multiple bit DRAM/ROM configuration register" #define MEMCRefresh (MEMCconfig+4) // DRAM refresh rate register //__________________________________________________________________________________________ // // // Interrupt Vector Definitions and Masks // // //__________________________________________________________________________________________ //--------------------------------------------------- // Interrupt Masks //--------------------------------------------------- #define hiIntMask $0700 // programmer switch only #define pwrOffEnbl $2500 // mask to allow poweroff interrupts #define sccIntMask $0400 // SCC interrupt level #define sccEnblMask $FBFF // mask to enable SCC interrupts #define slotIntMask $0200 // slot's interrupt level <1.9> #define viaIntMask $0100 // VIA1 interrupt level #define loIntMask $0100 //--------------------------------------------------- // Hardware Base Addresses //--------------------------------------------------- #define WrOffs 0 // SCSI write addrs are same as read base #define MskIOP1 1 // IOP 1 (SWIM) is level 1 interrupt #define MskVIA1 1 // VIA 1 is level 1 #define MskADB 1 // ADB is level 1 #define Msk60Hz 1 // 60 Hz is level 1 #define MskSCSI 2 // SCSI is level 2 #define MskSound 2 // sound is level 2 <4.5> #define MskSlots 2 // slots are level 2 interrupts #define MskRTC 3 // RTC is level 3 #define MskIOP0 4 // IOP 0 (& SCC chip) is level 4 #define MskPwrOff 6 // Poweroff button is level 6 #define MskNMI 7 // NMI switch is level 7 // --------------------------------------------------------------------------------------------------- // Bit definitions for the Cache Control Register (CACR) on various CPUs // --------------------------------------------------------------------------------------------------- // // 020 CACR: (from MC68020 User's Manual, 3rd Ed. pg. 6-3) // +------------------------------------------------+ // | 0 .............. 0 | C | CE | F | E | // +------------------------------------------------+ // 31 4 3 2 1 0 // // C = Clear Cache // CE = Clear Entry // F = Freeze Cache // E = Enable (Inst.) Cache // // // 030 CACR: (from MC68030 User's Manual, 2nd Ed. pg 6-15) // +------------------------------------------------------------------------------------+ // | 0 ... 0 | WA | DBE | CD | CED | FD | ED | 0 | 0 | 0 | IBE | CI | CEI | FI | EI | // +------------------------------------------------------------------------------------+ // 31 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 // // WA = Write Allocate // DBE = Data Burst Allocate // CD = Clear Data Cache // CED = Clear Entry in Data Cache // FD = Freeze Data Cache // ED = Enable Data Cache // IBE = Instruction Burst Enable // CI = Clear Instruction Cache // CEI = Clear Entry in Instruction Cache // FI = Freeze Instruction Cache // EI = Enable Instruction Cache // // // 040 CACR: (from MC68040 User's Manual, 1st Ed., pg. 7-19) // +-------------------------------------+ // | DE | 0 ... 0 | IE | 0 ... 0 | // +-------------------------------------+ // 31 30 16 15 14 0 // // DE = Enable Data Cache // IE = Enable Instruction Cache // // MC68040 CACR bits of note: #define CACR_IE_040 15 // bit # of instruction cache enable/disable on 040s #define CACR_DE_040 31 // bit # of data cache enable/disable on 040s // MC68020 and MC68030 CACR bits of note: #define CACR_EI_020_030 0 // bit # of inst. cache enable/disable on 020/030s #define CACR_FI_020_030 1 // bit # of inst. cache freeze on 020/030s #define CACR_CEI_020_030 2 // bit # of inst. cache flush entry on 020/030s #define CACR_CI_020_030 3 // bit # of inst. cache flush on 020/030s #define CACR_IBE_030 4 // bit # of data cache burst enable on 030s #define CACR_ED_030 8 // bit # of data cache enable/disable on 030s #define CACR_FD_030 9 // bit # of data cache freeze on 030s #define CACR_CED_030 10 // bit # of data cache flush entry on 030s #define CACR_CD_030 11 // bit # of data cache flush on 030s #define CACR_DBE_030 12 // bit # of data cache burst enable on 030s #define CACR_WA_030 13 // bit # of write allocate enable on 030s //__________________________________________________________________________________________ // // // Miscellaneous Equates - Look Here If You Can't Find It Anywhere Else. // // //__________________________________________________________________________________________ #define Machine 7 // new Machine number for patches <18> //--------------------------------------------------- // System Software Information //--------------------------------------------------- #define numOsTrap 256 // number of os traps #define ToolTable $0E00 // start of toolbox trap table #define numTbTrap 1024 // number of toolbox traps #define numTrapMask (numTbTrap-1) // mask for number of tb traps #define JMemMgr24 $1E00 // jump vector start for 24 bit Memory Manager #define JMemMgr32 $1F00 // jump vector start for 32 bit Memory Manager #define HeapStart $2800 // Low mem is now 10k bytes #define defSysHeap $18000 // Default size of the system heap #define nDfltStackSize $6000 // Default stack size //**** maybe not so temporary to allow things to build **** <3.5> #define oneSecConst 8 // gets converted to $80000 for onesec constant<3.5> #if BlackBirdDebug #define ROMStart $40000000 #else #define ROMStart $40800000 // starting address of final ROM code <3.5> #endif #define snd2MemTop $300 // SoundLow to Memtop #define pwm2MemTop $2FF // PWMBuffer to MemTop #define bufWorldSize 8192 // total size of the BufPtr world //--------------------------------------------------- rb, start // Sound parameters //--------------------------------------------------- #define sampleSize 4 // number of bytes per sample #define bufferSize 960 // number of samples per buffer #define sampleRate (24 * 1024) // 24KHz sample rate //--------------------------------------------------- // PSC Hardware Defs //--------------------------------------------------- // === Hardware Base Addresses === #define PSCBase $50f31000 // Base address of the PSC //--------------------------------------------------- // PSC Sound Register Offsets //--------------------------------------------------- #define sndComCtl $200 // [word] sound and communications control #define singerCtl $204 // [long] singer sound CODEC control #define singerStat $208 // [long] singer sound CODEC status (read only) #define sndPhase $20c // [long] sound subsystem phase (read only) #define sndInBase $210 // [long] sound input double-buffer base address #define sndOutBase $214 // [long] sound output double buffer base address #define sndSize $218 // [word] sound input and output buffer size #define dspOverRun $21C // [byte] DSP overrun status register. //--------------------------------------------------- // PSC Sound Register Bit Definitions //--------------------------------------------------- // === sndComCtl register === #define pSubFrmInSel 0 // singer sound CODEC input subframe select #define pSubFrmInSel1 0 // singer sound CODEC input subframe select, lsbit #define pSubFrmInSel2 1 // singer sound CODEC input subframe select, msbit #define pSubFrmOutSel 2 // singer sound CODEC output subframe select #define pSubFrmOutSel1 2 // singer sound CODEC output subframe select, lsbit #define pSubFrmOutSel2 3 // singer sound CODEC output subframe select #define pSubFrmOutSel3 4 // singer sound CODEC output subframe select #define pSubFrmOutSel4 5 // singer sound CODEC output subframe select, msbit #define pFrmIntEn 6 // frame interrupt enable #define pSndInEn 7 // sound input DMA enable #define pSndOutEn 8 // sound output DMA enable #define pSndRate 9 // singer sound CODEC sampling rate control #define pSndRate1 9 // singer sound CODEC sampling rate control, lsbit #define pSndRate2 10 // singer sound CODEC sampling rate control, msbit #define pComRate 11 // communications CODEC sampling rate contrl #define pComRate1 11 // communications CODEC sampling rate contrl, lsbit #define pComRate2 12 // communications CODEC sampling rate contrl, msbit // equ 13 ; unused // equ 14 ; unused // equ 15 ; unused #define sndComCtlInit ((0< rb, end //--------------------------------------------------- // PSC DSP Register Bit Definitions ejb //--------------------------------------------------- // === dspOverrun register === #define pdspReset 0 // when set places the dsp in reset state #define pdspResetEn 1 // when cleared disables the dspReset bit #define pdspFrameOvr 2 // when set indicates cat2 frame overrun on the dsp // equ 3 ; unused // equ 4 ; unused // equ 5 ; unused // equ 6 ; unused #define pdspSet 7 // "0" clears, "1" sets for any bit field [0:6] containing a "1" //--------------------------------------------------- // ??? //--------------------------------------------------- #define seRegs $0C30 // offset to Sys Error Regs w/o Overlay //--------------------------------------------------- // Hardware configuration bits. //--------------------------------------------------- #define hwCbSCSI 15 // SCSI port present #define hwCbClock 14 // New clock chip present #define hwCbExPRAM 13 // Extra Parameter Ram valid. #define hwCbFPU 12 // FPU chip present. #define hwCbMMU 11 // Some kind of MMU present (see MMUType for what kind). #define hwCbADB 10 // Apple Desktop Bus present. #define hwCbAUX 9 // Running A/UX <2.8> #define hwCbPwrMgr 8 // Power Manager present <2.8> #define hwCmSCSI ((1 << hwCbSCSI)) #define hwCmClock ((1 << hwCbClock)) #define hwCmExPRAM ((1 << hwCbExPRAM)) #define hwCmFPU ((1 << hwCbFPU)) #define hwCmMMU ((1 << hwCbMMU)) #define hwCmADB ((1 << hwCbADB)) #define hwCmAUX ((1 << hwCbAUX)) #define hwCmPwrMgr ((1 << hwCbPwrMgr)) //--------------------------------------------------- // HcMac Clock Change Addresses //--------------------------------------------------- #define Clock16M $FE0000 // Go to sixteen megahertz clock throughput #define Clock1M $FE0002 // Go to one megahertz clock throughput (adds 64 wait states) //--------------------------------------------------- // SCC Clock Rates, Baud Rate Constants //--------------------------------------------------- #define nuMacClock 36864 #define nuMacConst 115200 #define macClock 36707 // in Hz * 100 #define macConst 114709 // in Hz/32 #define hcMacClock 36720 // SCC clock rates #define hcMacConst 114750 //--------------------------------------------------- // Deep Shit Rectangle info //--------------------------------------------------- #define dsRectTL ((64<<16)+32) // top left = 64,32 #define dsRectBR ((190<<16)+480) // bottom right = 190,480 #define dsRectHei ((DSrectBR & $FFFF0000)-(DSrectTL & $FFFF0000)>>16) #define dsRectLen ((DSrectBR & $FFFF)-(DSrectTL & $FFFF)) //--------------------------------------------------- // System Error Equates //--------------------------------------------------- #define seVars (seRegs) // start of system error data space (wrap city) #define seVSize 128 // # of bytes in space #define seD0 (seVars) // loc of saved reg D0 #define seA0 (seD0+32) // loc of saved reg A0 #define seA7 (seA0+28) // loc of saved reg A7 #define sePC (seA7+4) // loc of saved PC #define seSR (sePC+4) // loc of saved SR #define seAccess (seSR+2) // PC address during bus/address error #define seCmdSize (seAccess+4) // # of bytes of parameters passed in _debugger call #define se000BE (seCmdSize+2) // 8 bytes of bus error info for 68000 #define seLastVar (se000BE+8) // last var in System Error data space //--------------------------------------------------- // ROM based debugger nub //--------------------------------------------------- #define rdPort (seLastVar) // Number of port currently in use (0 => no link, 1 => A, 2 => B) #define rdCode (rdPort+2) // Ptr to code download buffer. #define rdAtrap (rdCode+4) // Saved Rom Atrap handler #define rdLowTrap (rdAtrap+4) // low value for trap handling #define rdHiTrap (rdLowTrap+2) // high value for trap handling #define rdResult (rdHiTrap+2) // result of executing down-loaded code, etc. (16 bytes) #define rdEnd (rdResult+16) // end of vars //--------------------------------------------------- // Microbug //--------------------------------------------------- // NOTE: Keep mbDotAddr immediately before mBlocAddr #define mbBufSize 34 #define mbBuffer (seLastVar) // buffer for input #define mbSign (mbBuffer+mbBufSize) // ST => negative sign during conversion #define mbDotAddr (mbSign+2) // saved address #define mBlocAddr (mbDotAddr+4) // saved location //--------------------------------------------------- // Alternate ROM vectors //--------------------------------------------------- #define DiagROM $F80000 // Alternate ROM - initial vector #define DiagROM1 $F80080 // Alternate ROM - memory sizing vector #define DiagROM2 $F80088 // Alternate ROM - init I/O vector //--------------------------------------------------- // Timing constants //--------------------------------------------------- #define VIAClockHz 783360 // VIA clock rate is 783360 Hz. <2.8> #define nTicks (VIAClockHz/1000) // VIA timer ticks per msec #define oneSecTicks 60 // ticks, of course #ifndef __SysEqu___ #define TimeSCSIDB $0B24 // DBRAs & SCSI access per millisecond <1.9> #endif #define ramChk 1024 // Amount of memory tested for stack. //__________________________________________________________________________________________ // // // ROM Header RECORD Definition // // //__________________________________________________________________________________________ #define ROMHeader 0 // offsets to fields in base of ROM #define ROMHeader_ResetSP 0 // $0000 SP to be loaded at reset time #define ROMHeader_CheckSum (ResetSP) // $0000 hiram stuffs checksum here #define ROMHeader_ResetPC 4 // $0004 PC to be loaded at reset time #define ROMHeader_MachineNumber 8 // $0008 Machine Number #define ROMHeader_ROMVersion 9 // $0009 ROM Version Number #define ROMHeader_ReStart 10 // $000A JMP to StartBoot routine #define ROMHeader_BadDisk 14 // $000E JMP to eject disk, and ReBoot routine #define ROMHeader_ROMRelease 18 // $0012 ROM Release in HEX, eg. $10B5 is 1.0ß5 #define ROMHeader_PatchFlags 20 // $0014 ROM overpatch basis //**Pad**: DS.B 1 // $0015 unused #define ROMHeader_ForeighOSTbl 22 // $0016 offset to foreign OS vector table #define ROMHeader_RomRsrc 26 // $001A HiRam stuffs offset to ROM rsrc header here #define ROMHeader_Eject 30 // $001E JMP to DoEject routine #define ROMHeader_DispTableOff 34 // $0022 offset to the compressed dispatch table #define ROMHeader_Critical 38 // $0026 JMP to Critical error handler #define ROMHeader_ResetEntry 42 // $002A JMP to Reset Entry Point routine. #define ROMHeader_RomLoc 46 // $002E (Bit 0: In Ram, Bit 1: In Emulator) //**Pad**: DS.B 1 // $002F unused #define ROMHeader_CheckSum0 48 // $0030 checksum 0 #define ROMHeader_CheckSum1 52 // $0034 checksum 1 #define ROMHeader_CheckSum2 56 // $0038 checksum 2 #define ROMHeader_CheckSum3 60 // $003C checksum 3 #define ROMHeader_RomSize 64 // $0040 HiRam stuffs size of ROM in bytes here // endr ROMHeader //--------------------------------------------------- // Romulator ROM location bits and TestFor Macro //--------------------------------------------------- #define locValid1 7 // this must be 1 #define locValid2 6 // this must be 0 #define inEmulatorBit 1 // running in emulator #define inRamBit 0 // running in ram #define ForAmusementOnly 0 #if ForAmusementOnly //__________________________________________________________________________________________ // // // Old 16 bit Equates for onMac, onMacPP, and onHcMac // // //__________________________________________________________________________________________ //=======================================; // Macintosh Plus Hardware Information ; //=======================================; #define hwCfgBits (hwCmSCSI|hwCmClock) #define machine 0 #define rom85Bits $7F // New ROMs, No Power Off. // === Interrupt Masks === #define hiIntMask $0700 // programmer switch only #define sccIntMask $0200 // SCC interrupt Level <1.5> #define sccEnblMask $F9FF // mask to enable SCC interrupts #define viaIntMask $0100 // mask for VIA (and VBL) interrupts #define loIntMask $0100 // === VIA1 BUFFER A === //vSound EQU $7 ; sound volume bits (0..2) #define vSndPg2 3 // select sound page 2 if 0 //vOverlay EQU 4 ; overlay bit (overlay when 1) //vHeadSel EQU 5 ; head select line for Sony #define vPage2 6 // select video page 2 if 0 //vSCCWrReq EQU 7 ; SCC write/request line #define vAOut ((vSound)|\ (1< #define sccEnblMask $F9FF // mask to enable SCC interrupts #define viaIntMask $0100 // mask for VIA (and VBL) interrupts #define loIntMask $0100 // === VIA1 BUFFER A === //vSound EQU $7 ; sound volume bits (0..2) //vSync EQU 3 ; Synchronous modem #define vDriveSel 4 // int drive select (lower drive when 1) //vHeadSel EQU 5 ; head select line for Sony #define vPage2 6 // select video page 2 if 0 //vSCCWrReq EQU 7 ; SCC write/request line #define vAOut ((vSound)|\ (1< #define machine 3 #define rom85Bits $7F // New ROMs, No Power Off. // === Interrupt Masks === #define hiIntMask $0700 // programmer switch only #define sccIntMask $0200 // SCC interrupt Level <1.5> #define sccEnblMask $F9FF // mask to enable SCC interrupts #define viaIntMask $0100 // mask for VIA (and VBL) interrupts #define loIntMask $0100 // === VIA1 BUFFER A === // 68000 <-> PowerMgr data bus #define vAIn $00 // VBufA output bits (all inputs) #define vAOut $FF // VBufA output bits (all outputs) #define vAInit $00 // VBufA initial values // === VIA1 BUFFER B === #define vPMreq 0 // Power manager handshake request #define vPMack 1 // Power manager handshake acknowledge #define vTestJ 2 // Test jumper //vSync EQU 3 ; Synchronous modem #define vDriveSel 4 // int drive select (lower drive when 1) //vHeadSel EQU 5 ; head select line for Sony #define vStereo 6 // Stereo sound enable //vSCCWrReq EQU 7 ; SCC write/request line (input) //vSndEnb EQU 7 ; /sound enable (reset when 1) (output) #define vBOut ((1< // === Video Parameters === #define ScreenLow $FA8000 // top of screen screen address #define hcVideoSize $8000 // 32k of video memory #define HcVideoStart (ScreenLow) #define HcVideoEnd (HcVideoStart+hcVideoSize) #define NTSCMaxX 512 // NTSC output is narrow #define NTSCOffset 8 // and centered #define LCDmode 0 // Normal built in screen #define Mac2mode 1 // Custom screen for Mac2 #define NTSCmode 2 // NTSC output for Topanga // === Hardware Base Addresses === #define romBSize $40000 // 256K bytes in present ROM #define ROMStart $900000 // starting address of ROM code #define DBase $F6E1FF // disk address base #define AccessBase $FC0200 // SLIM card DTACK counter load address (what a mouthful) #define SLIMinserted 3 // SLIMs inserted bit // === System Software Information === #define snd2MemTop $300 // SoundLow to Memtop #define pwm2MemTop $2FF // PWMBuffer to MemTop #define bufWorldSize (snd2MemTop) // total size of the BufPtr world #define oneSecConst 2 // gets converted to $20000 for onesec constant #define numOsTrap 256 // number of os traps #define ToolTable $0E00 // start of toolbox trap table #define numTbTrap 1024 // number of toolbox traps #define numTrapMask (numTbTrap-1) // mask for number of tb traps #define HeapStart $1E00 // Portable starting point <1.2> #define DefSysHeap $18000 // Default size of the system heap #define NDfltStackSize $2000 // Default stack size //===================================================; // Universal 16 bit Macintosh Hardware Information ; //===================================================; // === Interrupt Masks === #define hiIntMask $0700 // programmer switch only #define sccIntMask $0200 // SCC interrupt Level <1.5> #define sccEnblMask $F9FF // mask to enable SCC interrupts #define viaIntMask $0100 // mask for VIA (and VBL) interrupts #define loIntMask $0100 // === VIA1 BUFFER A === //vSound EQU $7 ; sound volume bits (0..2) #define vSndPg2 3 // select sound page 2 if 0 //vSync EQU 3 ; Synchronous modem //vOverlay EQU 4 ; overlay bit (overlay when 1) //vDriveSel EQU 4 ; int drive select (lower drive when 1) //vHeadSel EQU 5 ; head select line for Sony #define vPage2 6 // select video page 2 if 0 //vSCCWrReq EQU 7 ; SCC write/request line // === VIA1 BUFFER B === //vRTCData EQU 0 ; real time clock data //vRTCClk EQU 1 ; real time clock clock pulses //vRTCEnb EQU 2 ; clock enable (0 for enable) #define vSW 3 // mouse switch (0 when down) //vFDBInt EQU 3 ; Front Desk bus interrupt #define vX2 4 // mouse X level //vFDesk1 EQU 4 ; Front Desk bus state bit 0 #define vY2 5 // mouse Y level //vFDesk2 EQU 5 ; Front Desk bus state bit 1 #define vH4 6 // horizontal sync #define vSCSIMask 6 // SCSI IRQ mask //vSndEnb EQU 7 ; /sound enable (reset when 1) #define vPMreq 0 // Power manager handshake request #define vPMack 1 // Power manager handshake acknowledge #define vTestJ 2 // Test jumper //vSync EQU 3 ; Synchronous modem //vDriveSel EQU 4 ; int drive select (lower drive when 1) //vHeadSel EQU 5 ; head select line for Sony #define vStereo 6 // Stereo sound enable //vSCCWrReq EQU 7 ; SCC write/request line (input) // === VIA1 BUFFER A/B === //vSync EQU 3 ; Synchronous modem <3.1> #define vDriveSel 4 // int drive select (lower drive when 1) <3.1> //vHeadSel EQU 5 ; head select line for Sony <3.1> //vSCCWrReq EQU 7 ; SCC write/request line <3.1> // === Hardware Base Addresses === #define wrOffs 1 // write addrs are +1 to the read base // === System Software Information === #define numOsTrap 256 // number of os traps #define ToolTable $0E00 // start of toolbox trap table #define numTbTrap 1024 // number of toolbox traps #define numTrapMask (numTbTrap-1) // mask for number of tb traps #define HeapStart $1E00 // Laguna starting point <1.2> #define DefSysHeap $18000 // Default size of the system heap #define NDfltStackSize $2000 // Default stack size #endif // ForAmusementOnly #define HardwarePrivate 1 #endif // __INCLUDINGHARDWAREPRIVATEEQU__