/*
	File:		NubEqu.h

	Contains:	xxx put contents here xxx

	Written by:	xxx put writers here xxx

	Copyright:	© 1993 by Apple Computer, Inc., all rights reserved.

	Change History (most recent first):

		 <1>	 11/5/93	fau		first checked in
		 <1>	10/27/93	fau		first checked in
		 <1>	10/19/93	fau		first checked in

*/


/*
	NubEqu.h
				Hurricane hardware addresses when accessed from a Nub card with
				the 0xE8C mapping PROM.
				
				Note that these addresses are lacking in the upper-nybble department!
				You need to OR in the superslot base address of whatever slot your
				Nub is plugged into.
				
				Anyplace you see an 's' refers to the slot number that your Nub board
				is plugged into.
				
				This is not a hack.
				
				
	History
	-------
				JFB			4-6-92			New today.
				JFB			4-15-92			Started Hurricane utility routine
											 define/typedef/prototype sections.
				gdw			4-21-92			Moved FlatlineBaseAddress for new Nub
				MRN			4-27-92			Added interrupt indexes to interrupt mask section
				
 */
 
 
/* ----------------------------------------------------------------------------------------------
 	Super Slot Base Addresses 
 */
  
#define		kSuper9					0x90000000
#define		kSuperA					0xA0000000
#define		kSuperB					0xB0000000
#define		kSuperC					0xC0000000
#define		kSuperD					0xD0000000
#define		kSuperE					0xE0000000

/* ----------------------------------------------------------------------------------------------
	Normal Slot Base Addresses
 */
 
#define	 	kSlot9					0x09000000
#define	 	kSlotA					0x0A000000
#define	 	kSlotB					0x0B000000
#define	 	kSlotC					0x0C000000
#define	 	kSlotD					0x0D000000
#define	 	kSlotE					0x0E000000
	
/* ----------------------------------------------------------------------------------------------
	Nub Soft Switches - * Note that these are in Normal Slot Space! *
 */
 
#define	 	kNMRQEnable				0xF0B00000		/* enable generation of Nubus NMRQ* from */
#define	 	kNMRQDisable			0xF0900000		/*   88110 INT* line					 */
 	
#define	 	kEXTRA_LOW				0xF0A80000		/* pull EXTRA_L low */
#define	 	kEXTRA_TRI				0xF0880000		/* tristate EXTRA_L */

/* ----------------------------------------------------------------------------------------------
	Base addresses for memory & peripherals on Hurricane.
	
	RAM is available from 0xs0000000 to 0xs9000000 when using the 0xE8C mapping PROM.
	
	Remember that you have to OR in the Super Slot base address to get the actual
	base address.
 */
 
#define	 	kRAMBase				0x00000000		/* Hurricane DRAM */
#define	 	kSashaBase				0x0A000000		/* Sasha & Swatch base address */
#define	 	kMazdaBase				0x0B000000		/* Mazda base address */
#define		kMazdaEEPROMBase		0x0C000000		/* Mazda EEPROM base addresss */
#define		kMazdaLowSpeedBase		0x0D000000		/* Mazda Low-Speed bus base address */
#define	 	kFlatlineBase			0x09000000		/* Flatline base address for 0x8C devices */
#define		kFlatlinePixNIntBase	0x0F000000		/* Flatline base address for 0x8F devices */
 	
/* ----------------------------------------------------------------------------------------------
	Register offsets.
	
	OR these offsets with the actual base address (which you built by OR'ing the Super Slot
	base address with the peripheral chip's base address) to get at a specific register
	in a specific peripheral chip.
 */
 
/* ----------------------------------------------------------------------------------------------
	Register offsets for Sasha & Swatch.
	
	OK, Sasha & Swatch are a little weird.  Unlike Mazda & Flatline, you don't just
	have a bunch of registers that you can write to directly.
	
	You access all of the registers in Sasha & Swatch via one register, namely the
	base register (kyourSuperSlot | kSashaBase).
	
	To actually get to a register inside Sasha & Swatch, you write a REGISTER SELECT
	number into the high byte of a 32-bit word.  Up to 24 bits of data can be written
	via the low 7 bytes.  For a write, you write the Register Select and the data
	to (kyourSuperSlot | kSashaBase).  For a read, first write the Register Select into 
	the LOW BYTE of the 24-bit data field (with Register Select = 0x00), then read
	back the data (i.e., writing 0x000000C0 & then reading would give you the contents
	of register 0xC0).
	
	It looks like this:
	
									0 x r r d d d d d d 
										\_/ \_________/
										 |       |
								   Register		Data
								   Select
								   
	The #define's below are Register Selects, that you can them OR into your own long!
 */

#define		kReadAddress			0x00000000		/* For reads, write the Register Select of the */
													/*  register you want in the low byte */
#define		kParityEnable			0x01000001		/* 0 = Parity OFF, 1 = Parity ON (default OFF) */
#define		kParityDisable			0x01000000		

#define		kDitherTruncate			0x02000000		/* 0 = Truncate, 1 = 2x2 Dither, 2 = 4x4 dither */
#define		kDither2x2				0x02000001		/*  no default */
#define		kDither4x4				0x02000002		
													
#define		kForceParityErr			0x03000000		/* 16 bits, a '1' in loc 'n' forces err in byte 'n' */
													/*  default = 0 */
#define		kParityErrReg			0x04000000		/* 16 bits, a '1' in loc 'n' records err in byte 'n' */
													/*  default = 0 */
#define		kNoParityErr			0x00000000

#define		kHVidTiming				0x80000000		/* Pulse length of Horizontal Front Porch */
#define		kHSyncPulse				0x81000000		/* Pulse length of Horizontal Sync Pulse */
#define		kHBreezeWay				0x82000000		/* Pulse length of Horizontal BreezeWay */
#define		kHBurstRst				0x83000000		/* Pulse length of Horizontal Burst */
#define		kHBackPorch				0x84000000		/* Pulse length of Horizontal Back Porch */
#define		kHActivePixel			0x85000000		/* Number of active Horizontal pixels in a scan line */
#define		kHHalfLine				0x86000000		/* Position of Half Line */
#define		kHPixels				0x87000000		/* Total number of Horizontal pixels */
#define		kVFrontPorch			0x88000000		/* Pulse length of Vertical Front Porch */
#define		kVFrontPorchEQ			0x89000000		/* Pulse length of Vertical Front Porch with EQ */
#define		kVSyncPulse				0x8A000000		/* Pulse length of Vertical Sync Pulse */
#define		kVBackPorchEQ			0x8B000000		/* Pulse length of Vertical Back Porch with EQ */
#define		kVBackPorch				0x8C000000		/* Pulse length of Vertical Back Porch */
#define		kVActiveLines			0x8D000000		/* Number of active Vertical scan lines */
#define		kVHalfLines				0x8E000000		/* Number of active half Vertical scan lines */
#define		kSerrationPulse			0x8F000000
#define		kEqualizePulse			0x90000000		/* For interlaced screens only */
#define		kSepHorizontal			0x91000000
#define		kSepVerticalSync		0x92000000
#define		kCounterTest			0x93000000		/* Value to load counters for testing purposes */

#define		kStatus					0x97000000		/* Swatch Status - 13 bits: */
#define		kRevMask				0x00001E00
#define		kOddFieldStateMask		0x00000100		
#define		kHFrontPorchMask		0x00000080
#define		kHSyncMask				0x00000040
#define		kHBackPorchMask			0x00000020
#define		kActivePixelMask		0x00000010
#define		kVFrontPorchMask		0x00000008
#define		kVSyncMask				0x00000004
#define		kVBackPorchMask			0x00000002
#define		kActiveLineMask			0x00000001
												
#define		kVCNT					0xA0000000		/* Vertical Half Line Counter */
#define		kVLineIntMask			0xA1000000		/* Vertical line interrupt mask */
#define		kVLine0Int				0xA2000000		/* These are the vertical lines to cause an int on */
#define		kVLine1Int				0xA3000000
#define		kVLine2Int				0xA4000000
#define		kVLine3Int				0xA5000000
#define		kVLine4Int				0xA6000000
#define		kVLine5Int				0xA7000000
#define		kVLine6Int				0xA8000000
#define		kVLine7Int				0xA9000000

#define		kSwatchCtl1				0xB0000000		/* Swatch Ctl Reg 1 - 10 bits: */
#define		kHSYNCActiveHi			0x00000200
#define		kHSYNCActiveLo			0x00000000
#define		kVSYNCActiveHi			0x00000100
#define		kVSYNCActiveLo			0x00000000
#define		kLdHSepCNTTST			0x00000080		/* for testing ONLY */
#define		kHaltHSepCounter		0x00000040
#define		kLdVSepCNTTST			0x00000020		/* for testing ONLY */
#define		kHaltVSepCounter		0x00000010
#define		kLdHCNTTST				0x00000008		/* for testing ONLY */
#define		kHaltHCounter			0x00000004
#define		kLdVCNTTST				0x00000002		/* for testing ONLY */
#define		xHaltVCounter			0x00000001
												
#define		kSwatchCtl2				0xB1000000		/* Swatch Ctl Reg2 - 10 bits: */
#define		kInterlaceEnable		0x00000200
#define		kGENLOCKEnable			0x00000100
#define		kVIDCLKSync				0x00000080
												/* [6:4] - Horiz pipeline delay (match Swatch to video pipe) */
												/* [3:2] - Vertical line delay */
#define		kHalfLineAdjFld2		0x00000002
#define		kHalfLineAdjFld1		0x00000001
#define		kBillsPipeNLineNumber	0x00000024		/* this is from the old diagnostic setup code */

#define		kOutputCtl				0xB2000000		/* Output Control Reg - 5 bits, default 0x00: */
#define		kPixelDataOutEn			0x00000010
#define		kAcDcCSYNCEnable		0x00000008
#define		kAcDcCSYNCDisable		0x00000000
#define		kAcDcCBLANKEnable		0x00000004
#define		kAcDcCBLANKDisable		0x00000000
#define		kAcDcSYNCEnable			0x00000002
#define		kAcDcSYNCDisable		0x00000000
#define		kAcDcLoadClkEnable		0x00000001
#define		kAcDcLoadClkDisable		0x00000000

#define		kElmerCtl				0xB3000000		/* Elmer Control Reg - 9 bits: */
#define		kRAMInterfaceEnable		0x00000100		/* RAM Interface enable */
#define		kRAMInterfaceDisable	0x00000000		/* RAM Interface disable - video pipe black */
#define		kCrsrAntiAliasEnable	0x00000080
#define		kCrsrAntiAliasDisable	0x00000000
#define		kCrsrXOREnable			0x00000040
#define		kCrsrXORDisable			0x00000000
#define		kCrsrEnable				0x00000020
#define		kCrsrDisable			0x00000000
#define		kGreyScaleEnable		0x00000010		/* 8bpp only! */
#define		kGreyScaleDisable		0x00000000
#define		kNative16bppEnable		0x00000008
#define		kNative16bppDisable		0x00000000
#define		kLdSigAcDcVIDCLK		0x00000004		/* Load signal select for AC/DC */
#define		kLdSigAcDcLdClk			0x00000000
#define		k24bitIFtoAcDc			0x00000002		/* gotta be a better name for this */
#define		k2x16bitIFtoAcDc		0x00000000		/* ditto */
#define		kDithered16bppEnable	0x00000001
#define		kDithered16bppDisable	0x00000000

#define		kVideoPipeClockCtl		0xB4000000		/* Video Pipe Clock Control Reg - 3 bits, default 0x00: */
#define		kVidClkUsesVidClk		0x00000004
#define		kVidClkUsesSysClk		0x00000000
#define		kClockDivideEnable		0x00000002		/* half clock */
#define		kClockDivideDisable		0x00000000		/* full clock */
#define		kECLClock				0x00000001
#define		kTTLClock				0x00000000

#define		kCrsrXPos				0xB5000000
#define		kCrsrYPos				0xB6000000
#define		kCrsrHeight				0xB7000000
#define		kCrsrWidth				0xB8000000

#define		kRAMTestReg				0xBC000000

#define		kSenseLines				0xC0000000
#define		kSenseLinesReg			0x000000C0

#define		kSwatchSoftReset		0xD0000000
#define		kVidPipeReset			0xD1000000
#define		kReset					0x00000000		/* these work for both reset regs */
#define		kNormal					0x00000001

#define		kBurstlm				0xE0000000
#define		kBurstThreshold1		0xE1000000
#define		kBurstThreshold2		0xE2000000
#define		kStopThreshold			0xE3000000
#define		kCrsrXCnt				0xE4000000
#define		kScrnXCnt				0xE5000000
#define		kFIFOUnderflow			0xE6000000



/* ----------------------------------------------------------------------------------------------
	Register offsets for Mazda.
 */

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Channel Program control registers.
	
	CPP:		Channel Program Pointer
	CPCont:		Channel Program Continue
	CPAbort:	Channel Program Abort
	
	These are all in kMazdaBase space.
 */
 
#define		kCPPStillVidCh1			0x00000000
#define		kCPContStillVidCh1		0x00000008
#define		kCPAbortStillVidCh1		0x00000010

#define		kCPPStillVidCh2			0x00000020
#define		kCPContStillVidCh2		0x00000028
#define		kCPAbortStillVidCh2		0x00000030

#define		kCPPFloppy1				0x00000040
#define		kCPContFloppy1			0x00000048
#define		kCPAbortFloppy1			0x00000050

#define		kCPPFloppy2				0x00000060	
#define		kCPContFloppy2			0x00000068
#define		kCPAbortFloppy2			0x00000070

#define		kCPPEtherRcv			0x00000080
#define		kCPContEtherRcv			0x00000088
#define		kCPAbortEtherRcv		0x00000090

#define		kCPPEtherXmit			0x000000A0
#define		kCPContEtherXmit		0x000000A8
#define		kCPAbortEtherXmit		0x000000B0

#define		kCPPAudioLeftIn			0x000000C0
#define		kCPContAudioLeftIn		0x000000C8
#define		kCPAbortAudioLeftIn		0x000000D0

#define		kCPPAudioLeftOut		0x000000E0
#define		kCPContAudioLeftOut		0x000000E8
#define		kCPAbortAudioLeftOut	0x000000F0

#define		kCPPAudioRightIn		0x00000100
#define		kCPContAudioRightIn		0x00000108
#define		kCPAbortAudioRightIn	0x00000110
 
#define		kCPPAudioRightOut		0x00000120
#define		kCPContAudioRightOut	0x00000128
#define		kCPAbortAudioRightOut	0x00000130

#define		kCPPPhoneIn				0x00000140
#define		kCPContPhoneIn			0x00000148
#define		kCPAbortPhoneIn			0x00000150

#define		kCPPPhoneOut			0x00000160
#define		kCPContPhoneOut			0x00000168
#define		kCPAbortPhoneOut		0x00000170

#define		kCPPAudioLineIn			0x00000180
#define		kCPContAudioLineIn		0x00000188
#define		kCPAbortAudioLineIn		0x00000190

#define		kCPPAudioLineOut		0x000001A0
#define		kCPContAudioLineOut		0x000001A8
#define		kCPAbortAudioLineOut	0x000001B0

#define		kCPPISDNXmitD			0x000001C0
#define		kCPContISDNXmitD		0x000001C8
#define		kCPAbortISDNXmitD		0x000001D0

#define		kCPPISDNRcvD			0x000001E0
#define		kCPContISDNRcvD			0x000001E8
#define		kCPAbortISDNRcvD		0x000001F0

#define		kCPPSCC1OutA			0x00000200
#define		kCPContSCC1OutA			0x00000208
#define		kCPAbortSCC1OutA		0x00000210

#define		kCPPSCC1InA				0x00000220
#define		kCPContSCC1InA			0x00000228
#define		kCPAbortSCC1InA			0x00000230

#define		kCPPSCC1OutB			0x00000240
#define		kCPContSCC1OutB			0x00000248
#define		kCPAbortSCC1OutB		0x00000250

#define		kCPPSCC1InB				0x00000260
#define		kCPContSCC1InB			0x00000268
#define		kCPAbortSCC1InB			0x00000270

#define		kCPPISDNXmitBD			0x00000280
#define		kCPContISDNXmitBD		0x00000288
#define		kCPAbortISDNXmitBD		0x00000290

#define		kCPPISDNRcvBD			0x000002A0
#define		kCPContISDNRcvBD		0x000002A8
#define		kCPAbortISDNRcvBD		0x000002B0

#define		kCPPISDNXmitBE			0x000002C0
#define		kCPContISDNXmitBE		0x000002C8
#define		kCPAbortISDNXmitBE		0x000002D0

#define		kCPPISDNRcvBE			0x000002E0
#define		kCPContISDNRcvBE		0x000002E8
#define		kCPAbortISDNRcvBE		0x000002F0

#define		kCPPCudaXmitSyncRcv		0x00000300		/* Cuda Transmit & Synchronous Rcv */
#define		kCPContCudaXmitSyncRcv	0x00000308		/* Can anyone think of a better name for this? */
#define		kCPAbortCudaXmitSyncRcv 0x00000310

#define		kCPPCudaAsyncRcv		0x00000320
#define		kCPContCudaAsyncRcv		0x00000328
#define		kCPAbortCudaAsyncRcv	0x00000330

#define		kCPPDMAChanTask0		0x00000340
#define		kCPContDMAChanTask0		0x00000348
#define		kCPAbortDMAChanTask0	0x00000350

#define		kCPPAsyncEvents			0x00000360
#define		kCPContAsyncEvents		0x00000368
#define		kCPAbortAsyncEvents		0x00000370

#define		kCPPRateConvertIn		0x00000380		/* NOT IN THIS MAZDA!! */
#define		kCPContRateConvertIn	0x00000388
#define		kCPAbortRateConvertIn	0x00000390

#define		kCPPRateConvertOut		0x000003A0		/* NOT IN THIS MAZDA!! */
#define		kCPContRateConvertOut	0x000003A8
#define		kCPAbortRateConvertOut	0x000003B0

#define		kCPPSCSIDev0			0x000003C0	
#define		kCPContSCSIDev0			0x000003C8
#define		kCPAbortSCSIDev0		0x000003D0

#define		kCPPSCSIDev1			0x000003E0	
#define		kCPContSCSIDev1			0x000003E8
#define		kCPAbortSCSIDev1		0x000003F0

#define		kCPPSCSIDev2			0x00000400	
#define		kCPContSCSIDev2			0x00000408
#define		kCPAbortSCSIDev2		0x00000410

#define		kCPPSCSIDev3			0x00000420	
#define		kCPContSCSIDev3			0x00000428
#define		kCPAbortSCSIDev3		0x00000430

#define		kCPPSCSIDev4			0x00000440	
#define		kCPContSCSIDev4			0x00000448
#define		kCPAbortSCSIDev4		0x00000450

#define		kCPPSCSIDev5			0x00000460	
#define		kCPContSCSIDev5			0x00000468
#define		kCPAbortSCSIDev5		0x00000470

#define		kCPPSCSIDev6			0x00000480	
#define		kCPContSCSIDev6			0x00000488
#define		kCPAbortSCSIDev6		0x00000490

#define		kCPPSCSIDev7			0x000004A0	
#define		kCPContSCSIDev7			0x000004A8
#define		kCPAbortSCSIDev7		0x000004B0

#define		kCPPSCSIDev8			0x000004C0	
#define		kCPContSCSIDev8			0x000004C8
#define		kCPAbortSCSIDev8		0x000004D0

#define		kCPPSCSIDev9			0x000004E0	
#define		kCPContSCSIDev9			0x000004E8
#define		kCPAbortSCSIDev9		0x000004F0

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Channel Program Flags.
 */
 
#define		kCCReady				0x80
#define		kCCChain				0x40
#define		kCCUpdate				0x20
#define		kCCInterrupt			0x10
#define		kCCAbort				0x04
 
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Channel Command Commands.
 */

#define		kReadDMA				0x00
#define		kWriteDMA				0x01
#define		kReadReg				0xF0
#define		kWriteReg				0xF1

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Channel Program IOM IDs.
 */

#define		kAudioLeftIn			0x1800			/* 0x0006 << 10 to get bits in right pos */
#define		kAudioLeftOut			0x1C00			/* 0x0007 << 10 to get bits in right pos */
#define		kAudioRightIn			0x2000			/* 0x0008 << 10 to get bits in right pos */
#define		kAudioRightOut			0x2400			/* 0x0009 << 10 to get bits in right pos */

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Mazda Interrupt control/status registers.
	
	Interrupt register bit assignments:
			
	These are all in kMazdaBase space.
 */
 
#define		kMazdaIRQUpMask0		0x00001000		/* Enable/Disable flags for the 64 interrupt */
#define		kMazdaIRQLoMask0		0x00001008		/* 	sources  */
#define		kMazdaIRQUpNew0			0x00001020		/* Clear interrupt flags for the 64 interrupt */
#define		kMazdaIRQLoNew0			0x00001028		/*	sources  */

#define		kAllIntsDisabled		0x00000000
#define		kAllIntsEnabled			0xFFFFFFFF
													/* Bit xy = Interrupt Source 					*/
													/* -------------------------					*/
#define		kWilsonIntMask			0x02000000		/* Bit 57 = Wilson								*/
													/* ... 											*/
#define		kVideoLineIntMask		0x00800000		/* Bit 55 = Video Line							*/
													/* ... 											*/
#define		kSystemTimerIntMask		0x00080000		/* Bit 51 = System Timer						*/
													/* ... 											*/
#define		kSCSI9IntMask			0x00000080		/* Bit 39 = SCSI 9 								*/
#define		kSCSI8IntMask			0x00000040		/* Bit 38 = SCSI 8 								*/
#define		kSCSI7IntMask			0x00000020		/* Bit 37 = SCSI 7 								*/
#define		kSCSI6IntMask			0x00000010		/* Bit 36 = SCSI 6 								*/
#define		kSCSI5IntMask			0x00000008		/* Bit 35 = SCSI 5 								*/
#define		kSCSI4IntMask			0x00000004		/* Bit 34 = SCSI 4 								*/
#define		kSCSI3IntMask			0x00000002		/* Bit 33 = SCSI 3 								*/
#define		kSCSI2IntMask			0x00000001		/* Bit 32 = SCSI 2 								*/
#define		kSCSI1IntMask			0x80000000		/* Bit 31 = SCSI 1 								*/
#define		kSCSI0IntMask			0x40000000		/* Bit 30 = SCSI 0 								*/
													/* ... 											*/
#define		kAsyncEventIntMask		0x08000000		/* Bit 27 = Asynchronous Event					*/
#define		kTask0DMAIntMask		0x04000000		/* Bit 26 = Wankel Task 0 DMA 					*/
#define		kCudaAsyncRcvIntMask	0x02000000		/* Bit 25 = Cuda Asynchronous Receive 			*/
#define		kCudaXmitSyncRcvIntMask	0x01000000		/* Bit 24 = Cuda Transmit/Synchronous Receive	*/
#define		kISDNRcvBEIntMask		0x00800000		/* Bit 23 = ISDN BE channel Receive 			*/
#define		kISDNXmitBEIntMask		0x00400000		/* Bit 22 = ISDN BE channel Transmit 			*/
#define		kISDNRcvBDIntMask		0x00200000		/* Bit 21 = ISDN BE channel Receive 			*/
#define		kISDNXmitBDIntMask		0x00100000		/* Bit 20 = ISDN BE channel Transmit 			*/
#define		kSCCBInputIntMask		0x00080000		/* Bit 19 = SCC Channel B input 				*/
#define		kSCCBOutputIntMask		0x00040000		/* Bit 18 = SCC Channel B output 				*/
#define		kSCCAInputIntMask		0x00020000		/* Bit 17 = SCC Channel A input 				*/
#define		kSCCAOutputIntMask		0x00010000		/* Bit 16 = SCC Channel A output 				*/
#define		kISDNRcvDIntMask		0x00008000		/* Bit 15 = ISDN D channel Receive 				*/
#define		kISDNXmitDIntMask		0x00004000		/* Bit 14 = ISDN D channel Transmit 			*/
#define		kAudioLineOutIntMask	0x00002000		/* Bit 13 = Audio Line Out 						*/
#define		kAudioLineInIntMask		0x00001000		/* Bit 12 = Audio Line In 						*/
#define		kPhoneCodecOutIntMask	0x00000800		/* Bit 11 = Analog Phone Codec Out 				*/
#define		kPhoneCodecInIntMask	0x00000400		/* Bit 10 = Analog Phone Codec In 				*/
#define		kAudioRightOutIntMask	0x00000200		/* Bit  9 = Audio Right Out 					*/
#define		kAudioRightInIntMask	0x00000100		/* Bit  8 = Audio Right In 						*/
#define		kAudioLeftOutIntMask	0x00000080		/* Bit  7 = Audio Left Out 						*/
#define		kAudioLeftInIntMask		0x00000040		/* Bit  6 = Audio Left In 						*/
#define		kEtherXmitIntMask		0x00000020		/* Bit  5 = Ethernet Transmit					*/
#define		kEtherRcvIntMask		0x00000010		/* Bit  4 = Ethernet Receive					*/
#define		kFloppy2IntMask			0x00000008		/* Bit  3 = Floppy channel #2					*/
#define		kFloppy1IntMask			0x00000004		/* Bit  2 = Floppy channel #1					*/

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

	Interrupt register bit indexes:

 */

#define		kWilsonInt				57				/* Wilson								*/

#define		kVideoLineInt			55				/* Video Line							*/

#define		kSystemTimerInt			51				/* System Timer							*/

#define		kSCSI9Int				39				/* SCSI 9 								*/
#define		kSCSI8Int				38				/* SCSI 8 								*/
#define		kSCSI7Int				37				/* SCSI 7 								*/
#define		kSCSI6Int				36				/* SCSI 6 								*/
#define		kSCSI5Int				35				/* SCSI 5 								*/
#define		kSCSI4Int				34				/* SCSI 4 								*/
#define		kSCSI3Int				33				/* SCSI 3 								*/
#define		kSCSI2Int				32				/* SCSI 2 								*/
#define		kSCSI1Int				31				/* SCSI 1 								*/
#define		kSCSI0Int				30				/* SCSI 0 								*/

#define		kAsyncEventInt			27				/* Asynchronous Event					*/
#define		kTask0DMAInt			26				/* Wankel Task 0 DMA 					*/
#define		kCudaAsyncRcvInt		25				/* Cuda Asynchronous Receive 			*/
#define		kCudaXmitSyncRcvInt		24				/* Cuda Transmit/Synchronous Receive	*/
#define		kISDNRcvBEInt			23				/* ISDN BE channel Receive 				*/
#define		kISDNXmitBEInt			22				/* ISDN BE channel Transmit 			*/
#define		kISDNRcvBDInt			21				/* ISDN BE channel Receive 				*/
#define		kISDNXmitBDInt			20				/* ISDN BE channel Transmit 			*/
#define		kSCCBInputInt			19				/* SCC Channel B input 					*/
#define		kSCCBOutputInt			18				/* SCC Channel B output 				*/
#define		kSCCAInputInt			17				/* SCC Channel A input 					*/
#define		kSCCAOutputInt			16				/* SCC Channel A output 				*/
#define		kISDNRcvDInt			15				/* ISDN D channel Receive 				*/
#define		kISDNXmitDInt			14				/* ISDN D channel Transmit 				*/
#define		kAudioLineOutInt		13				/* Audio Line Out 						*/
#define		kAudioLineInInt			12				/* Audio Line In 						*/
#define		kPhoneCodecOutInt		11				/* Analog Phone Codec Out 				*/
#define		kPhoneCodecInInt		10				/* Analog Phone Codec In 				*/
#define		kAudioRightOutInt		9				/* Audio Right Out 						*/
#define		kAudioRightInInt		8				/* Audio Right In 						*/
#define		kAudioLeftOutInt		7				/* Audio Left Out 						*/
#define		kAudioLeftInInt			6				/* Audio Left In 						*/
#define		kEtherXmitInt			5				/* Ethernet Transmit					*/
#define		kEtherRcvInt			4				/* Ethernet Receive						*/
#define		kFloppy2Int				3				/* Floppy channel #2					*/
#define		kFloppy1Int				2				/* Floppy channel #1					*/

#define		kIRQIn					0x00001040		/* External interrupt line status (there are */
													/*	32 external interrupt sources available, */
													/*	and their interrupt lines' states are */
													/* 	reflected in this register, regardless of */
													/* 	the Mask bit settings.  Note that there is */
													/* 	no similar "upstream view" of the 32 */
													/*	INTERNAL interrupt sources */

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	System Timer registers.
	
	The System Timer is a free-running 40-bit counter that runs at 1/4 of the system clock
	speed.  It is initialized to 0 at reset.
	
	Mazda generates a System Timer interrupt when the value of the counter = the value of the
	comparison register (and System Timer interrupts are enabled).

	These are all in kMazdaBase space.
 */

#define		kSysTimerUpr			0x00001058		/* Upper 8 bits of System Timer */
#define		kSysTimerLwr			0x00001060		/* Lower 32 bits of System Timer */
#define		kSysTimerCntUpr			0x00001068		/* Upper 8 bits of comparison value */
#define		kSysTimerCntLwr			0x00001070		/* Lower 32 bits of comparison value */
 
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Miscellaneous Mazda registers.

	These are all in kMazdaBase space.
 */
 
#define		kMemReady				0x00001048		/* 1-bit flag that indicates that XJS memory */
													/* 	is ready & has been sized & initialized */
													
/* ==============================================================================================
	Low-speed Bus devices.

	All accesses to devices on the Low-speed Bus must be 32- or 64-bit accesses, and they
	must be on EVEN 32-bit word addresses (e.g., [A2:A0] = 000).

	Bits 4-3 of an access address indicate how many wait states should be inserted for each 
	access to the Low-speed device:
	
							[A4:A3]		Low Speed Bus Cycle
							------- 	-------------------
							   0		120ns (6 20ns clocks)
				   			   1		160ns (8 20ns clocks)
				   			   2		200ns (10 20ns clocks)
				   			   3		240ns (12 20ns clocks)
					
	Bits 23-21 of an access address select which one of the 8 Low-speed devices to access.
	
	Note that these special bit groups in the address CHANGE POSITION in Mazda II.
	
 */
 
/* ..............................................................................................
	System EEPROM.
	
	See above for special characteristics of Low-speed Bus device accesses.
		
	This device begins at kMazdaEEPROMBase.
 */

#define		kMazdaROMBase			kMazdaEEPROMBase
#define		kMazdaROMTop			kMazdaEEPROMBase + 0x00FFFFFF
 
/* ..............................................................................................
	Device 1 - Endeavor.
 */
 
#define		kEndeavorMReg			0x00200018
#define		kEndeavorNReg			0x00200038

#define		kEndeavorClkSelect		0x00200058
#define		kCLKA					0x00000000
#define		kCLKB					0x00000080

/* ..............................................................................................
	Alternate Device 1 - NS8531.
 */

#define		kNS8531NHCnt0			0x00200018		/* Are we actually going to use this part? */
#define		kNS8531NHCnt1			0x00200038		/* 	If so, maybe some better names for these */
#define		kNS8531NHCnt2			0x00200058		/*  registers could be thought up. */
#define		kNS8531NHCnt3			0x00200078

#define		kNS8531RCnt0			0x00200098
#define		kNS8531RCnt1			0x002000B8
#define		kNS8531RCnt2			0x002000D8

#define		kNS8531SCnt				0x002000F8

#define		kNS8531LCnt				0x00200118

#define		kNS8531PCnt				0x00200138

#define		kNS8531ClkLPFSel		0x00200158

#define		kNS8531NHSEnables		0x00200178

#define		kNS8531VCOIRING			0x00200198

#define		kNS8531LRClkEnables		0x002001B8

#define		kNS8531SDLY				0x002001D8

#define		kNS8531GDLY				0x002001F8

/* ..............................................................................................
	Device 2 - AC/DC.
	
	There are known bugs in accessing AC/DC.  Dummy reads must be done after writing to PBCR0
	and PBCR1.
 */
 
#define		kAcDcWriteAddr			0x00400018
#define		kAcDcWriteRGBCLUT		0x00400038
#define		kAcDcWritePixelCtl		0x00400058
#define		kAcDcWriteRGBTest		0x00400078

#define		kAcDcReadAddr			0x00400018
#define		kAcDcReadRGBCLUT		0x00400038
#define		kAcDcReadPixelCtl		0x00400058
#define		kAcDcReadRGBTest		0x00400078

#define		kPBCR0					0x00000000
#define		kPBCR1					0x00000001

/* ..............................................................................................
	Device 3 - Genlock.
 */
 
		/* NOT IN THIS MAZDA!! */

/* ..............................................................................................
	Device 4 - Ethernet ROM.
 */
 
#define		kEtherROM0				0x00800018		/* Address byte 0 (LSB) */
#define		kEtherROM1				0x00800038		/* Address byte 1 */
#define		kEtherROM2				0x00800058		/* Address byte 2 */
#define		kEtherROM3				0x00800078		/* Address byte 3 */
#define		kEtherROM4				0x00800098		/* Address byte 4 */
#define		kEtherROM5				0x008000B8		/* Address byte 5 (MSB) */
 
/* ..............................................................................................
	Device 5 - Unused.
 */

#define		kLowSpeedDev5			0x00A00000
 
/* ..............................................................................................
	Device 6 - Unused.
 */

#define		kLowSpeedDev6			0x00C00000

/* ..............................................................................................
	Device 7 - Unused.
 */

#define		kLowSpeedDev7			0x00E00000
 

/* ----------------------------------------------------------------------------------------------
	Register offsets for Flatline.
 */
 
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	RRSR Control Registers.
 */
 
/* ..............................................................................................
	Channel 0.
 */

#define		kSAP0					0x00000000		/* [31:12]	Source Address Page 	*/ 
#define		kSA0					0x00000008		/* [11:0]	Source Address 			*/
#define		kSPriorNStride0			0x00000010		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth0			0x00000018		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength0				0x00000020		/* [23:0]	Length 					*/
#define		kSWidthCount0			0x00000028		/* [13:0]	WidthCount 				*/
#define		kSCtlBits0				0x00000030		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive0				0x00000038		/* [31]		Channel Active			*/
#define		kSourceBitAddr0			0x00000040		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort0		0x00000048		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate0					0x00000050		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount0			0x00000058		/* [15:0]	Rate Count				*/

/* ..............................................................................................
	Channel 1.
 */
 
#define		kSAP1					0x00000080		/* [31:12]	Source Address Page 	*/ 
#define		kSA1					0x00000088		/* [11:0]	Source Address 			*/
#define		kSPriorNStride1			0x00000090		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth1			0x00000098		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength1				0x000000A0		/* [23:0]	Length 					*/
#define		kSWidthCount1			0x000000A8		/* [13:0]	WidthCount 				*/
#define		kSCtlBits1				0x000000B0		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive1				0x000000B8		/* [31]		Channel Active			*/
#define		kSourceBitAddr1			0x000000C0		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort1		0x000000C8		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate1					0x000000D0		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount1			0x000000D8		/* [15:0]	Rate Count				*/

/* ..............................................................................................
	Channel 2.
 */
 
#define		kSAP2					0x00000100		/* [31:12]	Source Address Page 	*/ 
#define		kSA2					0x00000108		/* [11:0]	Source Address 			*/
#define		kSPriorNStride2			0x00000110		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth2			0x00000118		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength2				0x00000120		/* [23:0]	Length 					*/
#define		kSWidthCount2			0x00000128		/* [13:0]	WidthCount 				*/
#define		kSCtlBits2				0x00000130		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive2				0x00000138		/* [31]		Channel Active			*/
#define		kSourceBitAddr2			0x00000140		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort2		0x00000148		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate2					0x00000150		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount2			0x00000158		/* [15:0]	Rate Count				*/

/* ..............................................................................................
	Channel 3.
 */
 
#define		kSAP3					0x00000180		/* [31:12]	Source Address Page 	*/ 
#define		kSA3					0x00000188		/* [11:0]	Source Address 			*/
#define		kSPriorNStride3			0x00000190		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth3			0x00000198		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength3				0x000001A0		/* [23:0]	Length 					*/
#define		kSWidthCount3			0x000001A8		/* [13:0]	WidthCount 				*/
#define		kSCtlBits3				0x000001B0		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive3				0x000001B8		/* [31]		Channel Active			*/
#define		kSourceBitAddr3			0x000001C0		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort3		0x000001C8		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate3					0x000001D0		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount3			0x000001D8		/* [15:0]	Rate Count				*/

/* ..............................................................................................
	Channel 4.
 */
 
#define		kSAP4					0x00000200		/* [31:12]	Source Address Page 	*/ 
#define		kSA4					0x00000208		/* [11:0]	Source Address 			*/
#define		kSPriorNStride4			0x00000210		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth4			0x00000218		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength4				0x00000220		/* [23:0]	Length 					*/
#define		kSWidthCount4			0x00000228		/* [13:0]	WidthCount 				*/
#define		kSCtlBits4				0x00000230		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive4				0x00000238		/* [31]		Channel Active			*/
#define		kSourceBitAddr4			0x00000240		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort4		0x00000248		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate4					0x00000250		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount4			0x00000258		/* [15:0]	Rate Count				*/

/* ..............................................................................................
	Channel 5.
 */
 
#define		kSAP5					0x00000280		/* [31:12]	Source Address Page 	*/ 
#define		kSA5					0x00000288		/* [11:0]	Source Address 			*/
#define		kSPriorNStride5			0x00000290		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth5			0x00000298		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength5				0x000002A0		/* [23:0]	Length 					*/
#define		kSWidthCount5			0x000002A8		/* [13:0]	WidthCount 				*/
#define		kSCtlBits5				0x000002B0		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive5				0x000002B8		/* [31]		Channel Active			*/
#define		kSourceBitAddr5			0x000002C0		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort5		0x000002C8		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate5					0x000002D0		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount5			0x000002D8		/* [15:0]	Rate Count				*/

/* ..............................................................................................
	Channel 6.
 */
 
#define		kSAP6					0x00000300		/* [31:12]	Source Address Page 	*/ 
#define		kSA6					0x00000308		/* [11:0]	Source Address 			*/
#define		kSPriorNStride6			0x00000310		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth6			0x00000318		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength6				0x00000320		/* [23:0]	Length 					*/
#define		kSWidthCount6			0x00000328		/* [13:0]	WidthCount 				*/
#define		kSCtlBits6				0x00000330		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive6				0x00000338		/* [31]		Channel Active			*/
#define		kSourceBitAddr6			0x00000340		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort6		0x00000348		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate6					0x00000350		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount6			0x00000358		/* [15:0]	Rate Count				*/

/* ..............................................................................................
	Channel 7.
 */
 
#define		kSAP7					0x00000380		/* [31:12]	Source Address Page 	*/ 
#define		kSA7					0x00000388		/* [11:0]	Source Address 			*/
#define		kSPriorNStride7			0x00000390		/* [17:14]	Write Priority 			*/
													/* [13:0]	Stride 					*/
#define		kSRPriorNWidth7			0x00000398		/* [17:14]	Read Priority			*/
													/* [13:0]	Width 					*/
#define		kSLength7				0x000003A0		/* [23:0]	Length 					*/
#define		kSWidthCount7			0x000003A8		/* [13:0]	WidthCount 				*/
#define		kSCtlBits7				0x000003B0		/* [4:3] 	Pixel Size 				*/
													/* [2]		Global					*/
													/* [1]		IntPage					*/
													/* [0]		IntLength				*/
#define		kSActive7				0x000003B8		/* [31]		Channel Active			*/
#define		kSourceBitAddr7			0x000003C0		/* [2:0]	Select a bit from a 	*/
													/*			 byte when in 1bpp mode */
#define		kSIVectNDestPort7		0x000003C8		/* [15:12]	Interrupt Vector		*/
													/* [11:0]	Destination Port		*/
#define		kSRate7					0x000003D0		/* [15:0]	Transfer Rate 			*/
#define		kSRateCount7			0x000003D8		/* [15:0]	Rate Count				*/

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	RRDR Control Registers.
 */
 
/* ..............................................................................................
	Channel 0.
 */

#define		kDAP0					0x00001000		/* [31:12]	Destination Addr Page	*/
#define		kDA0					0x00001008		/* [11:0]	Destination Address		*/
#define		kDPriorNStride0			0x00001010		/* [17:14]	Priority				*/
													/* [3:0]	Stride					*/
#define		kDPixTypeNWidth0		0x00001018		/* [17:16]	Receive Pixel Type		*/
													/* [15:14]	Output Pixel Type		*/
													/* [13:0]	Width					*/
#define		kDLength0				0x00001020		/* [23:0]	Length					*/
#define		kDDithTogNWidthCnt0		0x00001028		/* [14]		Dither Toggle			*/
													/* [13:0]	Width Count				*/
#define		kDCtlBits0				0x00001030		/* [11]		Toggle at line end		*/
													/* [10]		Toggle status			*/
													/* [9:6]	Interrupt vector		*/
													/* [5]		Clip alpha = 0 pixels	*/
													/* [4]		Store Intensity			*/
													/* [3]		Store Alpha				*/
													/* [2]		Global XJS transactions	*/
													/* [1]		Int on page crossing	*/
													/* [0]		Int on Length = 0		*/	
#define		kDActiveNFlush0			0x00001038		/* [31]		Channel Active			*/
													/* [30]		Flush channel buffers	*/
 
/* ..............................................................................................
	Channel 1.
 */
 
#define		kDAP1					0x00001080		/* [31:12]	Destination Addr Page	*/
#define		kDA1					0x00001088		/* [11:0]	Destination Address		*/
#define		kDPriorNStride1			0x00001090		/* [17:14]	Priority				*/
													/* [3:0]	Stride					*/
#define		kDPixTypeNWidth1		0x00001098		/* [17:16]	Receive Pixel Type		*/
													/* [15:14]	Output Pixel Type		*/
													/* [13:0]	Width					*/
#define		kDLength1				0x000010A0		/* [23:0]	Length					*/
#define		kDDithTogNWidthCnt1		0x000010A8		/* [14]		Dither Toggle			*/
													/* [13:0]	Width Count				*/
#define		kDCtlBits1				0x000010B0		/* [11]		Toggle at line end		*/
													/* [10]		Toggle status			*/
													/* [9:6]	Interrupt vector		*/
													/* [5]		Clip alpha = 0 pixels	*/
													/* [4]		Store Intensity			*/
													/* [3]		Store Alpha				*/
													/* [2]		Global XJS transactions	*/
													/* [1]		Int on page crossing	*/
													/* [0]		Int on Length = 0		*/	
#define		kDActiveNFlush1			0x000010B8		/* [31]		Channel Active			*/
													/* [30]		Flush channel buffers	*/
 
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Mu Ports.
 */
 
/* ..............................................................................................
	Splicer Control Registers.
 */

#define		kSpliceDestPort			0x00002000		/*	[11:0]	Destination port		*/
#define		kSpliceCtlRegs			0x00002008		/*	[11:8]	Priority				*/
													/*	[7]		Double					*/
													/*	[6]		Stream #1 only			*/
													/*	[5:3]	Stream #2 format		*/
													/*	[2:0]	Stream #1 format		*/
#define		kSpliceFlush			0x00002010		/*	[3]		Flush Stream #2, Ch 1	*/
													/*	[2]		Flush Stream #1, Ch 1	*/
													/*	[1]		Flush Stream #2, Ch 0	*/
													/*	[0]		Flush Stream #1, Ch 0	*/
#define		kSpliceClutEntries		0x00002800		/*	[23:0]	Clut Entries			*/

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Flatline Interrupt Control Registers.
	
	The 4-bit interrupt vector value in the RRSR/RRDR IVECT registers selects which of
	the 16 interrupts that device sources.
	
	RRSR Read Error interrupts are hard-coded to interrupt bit 0.
	
	A write to the range 0x8fffff0x - 0x8ffffffx will generate an interrupt.  The interrupt
	bit used is selected by the high nybble of the low byte of the address.
 */
 
#define		kFlatIRQMask			0x00005000		/* [15:0]	Interrupt Mask			*/
#define		kFlatIRQUpstream		0x00005010		/* [15:0]	Raw interrupt bits		*/
#define		kFlatIRQPend			0x00005020		/* [15:0]	Masked Interrupt bits	*/

#define		kFlatWriteInt0			0x00FFFF00		/* Write to generate interrupt 0	*/
#define		kFlatWriteInt1			0x00FFFF10		/* Write to generate interrupt 1	*/
#define		kFlatWriteInt2			0x00FFFF20		/* Write to generate interrupt 2	*/
#define		kFlatWriteInt3			0x00FFFF30		/* Write to generate interrupt 3	*/
#define		kFlatWriteInt4			0x00FFFF40		/* Write to generate interrupt 4	*/
#define		kFlatWriteInt5			0x00FFFF50		/* Write to generate interrupt 5	*/
#define		kFlatWriteInt6			0x00FFFF60		/* Write to generate interrupt 6	*/
#define		kFlatWriteInt7			0x00FFFF70		/* Write to generate interrupt 7	*/
#define		kFlatWriteInt8			0x00FFFF80		/* Write to generate interrupt 8	*/
#define		kFlatWriteInt9			0x00FFFF90		/* Write to generate interrupt 9	*/
#define		kFlatWriteInt10			0x00FFFFA0		/* Write to generate interrupt 10	*/
#define		kFlatWriteInt11			0x00FFFFB0		/* Write to generate interrupt 11	*/
#define		kFlatWriteInt12			0x00FFFFC0		/* Write to generate interrupt 12	*/
#define		kFlatWriteInt13			0x00FFFFD0		/* Write to generate interrupt 13	*/
#define		kFlatWriteInt14			0x00FFFFE0		/* Write to generate interrupt 14	*/
#define		kFlatWriteInt15			0x00FFFFF0		/* Write to generate interrupt 15	*/

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	XJS Control Registers.
 */

#define		kXJSCtl					0x00007000		/* [3]		Deadlock Enable 		*/
													/* [2:0]	XJS Priority			*/

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Debug Control Registers.
 */

#define		kDebugCtlRegs			0x00008000		/* [15]		Soft Reset RRSR			*/
													/* [14]		Soft Reset RRDR			*/
													/* [13]		Soft Reset Splicer		*/
													/* [12]		Soft Reset BLT 			*/
													/* [8]		Debug Mode				*/
													/* [7:5]	Debug Unit Select		*/
													/* [4:0]	Debug Signal Select		*/

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	System Control Registers.
 */
 
#define		kScrnAddr				0x00009000		/* [22:0]	Screen base address		*/
#define		kCrsrAddr				0x00009008		/* [25:0]	Cursor address reg		*/
#define		kScrnRowBytes			0x00009010		/* [12:0]	Screen RowBytes			*/
#define		kCrsrRowBytes			0x00009018		/* [12:0]	Cursor RowBytes			*/
#define		kDRAMCtlRegs			0x00009020		/* [13]		Video Xfer Size			*/
													/* [12:10]	DRAM Max Refresh Reg	*/
													/* [9:0]	DRAM Refresh Count		*/

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Pixel Ports.
 */
 
#define		kRRDR01Base				0x00FFE000		/* RRDR Ports 0-1					*/
#define		kSplicerPort03Base		0x00FFE100		/* Mu Ports 0-3 (Splicer)			*/


/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	Hurricane Utility Space.
	
	Put #defines, typedefs, and prototypes for your utility routines here!
	
	History
	-------
			JFB			4-15-92			Added Memory Management utils info.
 */	
 		
/* ----------------------------------------------------------------------------------------------
	Defines used by the Hurricane memory management routines.
 */

#define		kAddrUnreachable		0xFFFFFFFF		/* used by Native2Nub to indicate that */
													/*  the specified address does not map */
													/*  to a Nub-reachable address.		   */

#define		kNumMasters				100				/* Number of Master Pointers initially */
													/*  allocated to this Heap Zone */
										
#define		kUpperLimit				0xE0400000		/* Highest address in this Heap Zone (4 Megs)	*/
													/*  (jed's pseudo-ROM starts here 				*/
													/*  (we can move this up after we see how much 	*/
													/*   room he really needs) 						*/
													
#define		kStartAddr				0xE0200100		/* Start of this Heap Zone (this ensures 		*/
													/*  that there is enuf room for a 24 bpp 		*/
													/*  goldfish (832x624) starting @ 0) 			*/

#define		kValidHeaps				0xE0200000		/* Signature to signal that memory Manager has been inited 		*/
#define		kNextHeap				0xE0200004		/* Pointer to allocate the next heap zone 		*/
#define		kHeapLock				0xE0200008		/* Locking semaphore to make Memory Manager re-entrant 		*/

#define		kValidInts				0xE020000C		/* Signature to signal that interrupt Manager has been inited 		*/
#define		kIntTable				0xE0200010		/* Pointer to the interrupt vector table 		*/
#define		kIntSlotQueue			0xE0200014		/* Pointer to the interrupt slot queue element 		*/

/* ----------------------------------------------------------------------------------------------
	Hurricane Data Types.
 */

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Channel Command Data Structures.
 */
 
typedef Ptr CCPtr;									/* Pointer to a Channel Command buffer */

typedef struct dmaCC {
					char	command;
					char	flags;
					int		count;
					long	address;
					} dmaCC, *dmaCCPtr;
					
typedef struct regCC {
					char	command;
					char	flags;
					int		reg;
					long	data;
					} regCC, *regCCPtr;

/* ----------------------------------------------------------------------------------------------
	Utility routine prototypes.
 */

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Routines to initialize & use Hurricane memory via a Mac-style heap.
 */
 
//void InitHurricaneMemMgr( void );
 										
//THz InitHurricaneHeap(unsigned short numMasters, unsigned long heapSize);	/* Set up a heap that the Mac Mem Mgr can use */

//CCPtr NewCCPtr(unsigned short numCCsDesired);		/* Get a pointer to a 64-bit aligned hunk of mem */

//void DisposCCPtr(CCPtr theBuf);						/* Free a pointer to a 64-bit aligned hunk of mem */

//unsigned long Nub2Native(unsigned long NubAddr);		/* Translate a Nub address to a Hurricane address */

//unsigned long Native2Nub(unsigned long NativeAddr);		/* Translate a Hurricane address to a Nub address */

/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
	Routines to write/read an IOM register via a single Mazda Channel Command.
 */
 										
void IOMWriteReg(unsigned short IOMID, char Flags, unsigned short RegAddr, 
											unsigned short ByteCount, long Data, long *theCCP);
 
long IOMReadReg(unsigned short IOMID, char Flags, unsigned short RegAddr, 
											unsigned short ByteCount, long *theCCP);

/* ----------------------------------------------------------------------------------------------
	Miscellaneous addresses that you may want to change.
 */
 
#define		kScrnBase				0x00200000
#define		kRowBytes8				0x00000280
#define		kRowBytes16				0x00000500
#define		kRowBytes24				0x00000A00

#define		k8bpp					0
#define		k16bpp					1
#define		k24bpp					2
 	


	
	
	
 	