sys7.1-doc-wip/DeclData/DeclVideo/ATI/ATIDrvr.h

305 lines
10 KiB
C

/*
File: ATIDrvr.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
*/
/*-------------------------------------------------------------------------
*start
*
*Name: ATIDrvr.h
*Creator: George D. Wilson Jr.
*Date: 3/17/92
*
*Purpose: Contains structures and defines for the RISC video driver.
*
*Category: Header File
*File: ATIDrvr.h
*
*Detailed:
*
*Note:
*
*History:
*
* Date Programmer Modification
* -------- ---------- -----------------------------------------
*
*stop
*-----------------------------------------------------------------------*/
#define ATI 1 // Indicate we are for ATI hardware
#define kNumPages 1 // Number of video pages
#define kOurVidPage 0 // The video page we use Always 0 on Quadra
#define kVBLInterruptEnabled 0 // VBL interrupts enabled return value
#define kVBLInterruptDisabled 1 // VBL interrupts disenabled return value
#define kDAFBHWID 0x001C // DAFB hardware device ID
#define kRowBytes138bpp 0x400 // Apple 13" rowbytes 8bpp
// #define kRowBytes1316bpp 0x500 // Apple 13" rowbytes 16bpp
// #define kRowBytes1324bpp 0xA00 // Apple 13" rowbytes 24bpp
#define kNumLines480 480 //
#define kNumCLUTEntries 256 // Number of entries in the CLUT
#define kSuper9 0x90000000
#define kSuperA 0xA0000000
#define kSuperB 0xB0000000
#define kSuperC 0xC0000000
#define kSuperD 0xD0000000
#define kSuperE 0xE0200000
#define kSlot9 0x09000000
#define kSlotA 0x0A000000
#define kSlotB 0x0B000000
#define kSlotC 0x0C000000
#define kSlotD 0x0D000000
#define kSlotE 0x0E000000
#define kMySlot kSlotE // Used to access ATI with Nub601
#ifdef ROM
#define kMySlot8 0x00 // Used to access ATI sResource structs
#else
#define kMySlot8 0x0E // Used to access ATI with Nub601
#endif
#define kMySuperSlot kSuperE // Used to access ATI with Nub601
#define kFirstVideoMode 0x80
#define kSecondVideoMode 0x81
#define kThirdVideoMode 0x82
#define kFourthVideoMode 0x83
#define kFifthVideoMode 0x84
#define kSixthVideoMode 0x85
//===============================================================================
// Below are the bit patterns to write into memory for each of the supported
// bit depths.
//===============================================================================
#define kOneBitPattern 0xAAAAAAAA
#define kTwoBitPattern 0xCCCCCCCC
#define kFourBitPattern 0xF0F0F0F0
#define kEightBitPattern 0xFF00FF00
#define kSixTeenBitPattern 0xFFFF0000
#define kThirtyTwoBitPattern 0xFFFFFFFF
#define kGrayCLUTValue 0x00808080 // Value to gray the CLUT
#define kRedLumValue 0x4CCC
#define kGreenLumValue 0x970A
#define kBlueLumValue 0x1C29
//===============================================================================
// The following definitions define the number of long word writes to
// to do to fill one line of video on the 13" monitor.
// This should be changed later to be monitor indepentent.
//===============================================================================
#define kOneBitBytes 0x14 // Number of long writes for one bpp
#define kTwoBitBytes 0x28 // Number of long writes for two bpp
#define kFourBitBytes 0x50 // Number of long writes for four bpp
#define kEightBitBytes 0xA0 // Number of long writes for eight bpp
#define kSixTeenBitBytes 0x140 // Number of long writes for sixteen bpp
#define kThirtyTwoBitBytes 0x280 // Number of long writes for thirty two bpp
#define kMonoDevice 0x01 // Monochrome device
#define kNonMonoDevice 0x00 // Non luminance mapping device
// #define kNumLines 480 // Number of lines on a 13"
//==========================================================================
// Sense line decode values
//==========================================================================
#define kSenseLineReset 0x00000007 // Drives all lines low
#define kSenseLineAMask 0x00000006 // Drives the A bit
#define kSenseLineBMask 0x00000005 // Drives the B bit
#define kSenseLineCMask 0x00000003 // Drives the C bit
#define kSenseLineMask 0x00000070 // Only the first three bits are used
#define kMonitorNotConnected 0x07 // No monitor or extended value
#define kRGB21 0x00 // 21" RGB display 1152x870 100.0 MHz
#define kFullPage 0x01 // Full page display 640x870 57.28 MHz
#define kRGB12 0x02 // 12" RGB display 512x384 15.67 MHz
#define kTwoPage 0x03 // Two page display 1152x870 100.0 MHz
#define kNTSC 0x04 // NTSC display varxvar 12.27 MHz
#define kRGB15 0x05 // 15" RGB display 640x870 57.28 MHz
#define kRGB1312 0x06 // Hi-Res 13" & 12" displays 30.24 MHz
#define k16SenseACode 0x02 // Value received from A mask
#define k16SenseBCode 0x05 // Value received from B mask
#define k16SenseCCode 0x02 // Value received from C mask
//==========================================================================
// Slot manager defines for the timing sResources
//==========================================================================
#define kATIVidParmSpId 0x7E // Resource id for the all ATI video systems
#define kNoMonitorConnected 0xFF // No Monitor connected to system
#define kRGB1312Connected 0x80 // Hi-Res sRsrc ID
#define kRGB16Connected 0x81 // 16" sRsrc ID
#define kRGB21Connected 0x82 // sRsrc ID
#define kFullPageConnected 0x83 // sRsrc ID
#define kRGB12Connected 0x84 // sRsrc ID
#define kTwoPageConnected 0x85 // sRsrc ID
#define kNTSCConnected 0x86 // sRsrc ID
#define kRGB15Connected 0x87 // sRsrc ID
#define kEndeavorParmSpId 0x80 // Resource id of Endeavor SBlock
#define kACDCParmSpId 0x81 // Resource id of ACDC SBlock
#define kSwatchParmSpId 0x82 // Resource id of Swatch SBlock
//==========================================================================
// Definition of default mode data structure
//==========================================================================
struct VDDefMode {
UInt8 csID;
};
typedef struct VDDefMode VDDefMode;
typedef VDDefMode *VDDefModePtr, **VDDefModeHandle;
#define kVDDefModeSize (sizeof(VDDefMode))
//==========================================================================
// Exported status routines
//==========================================================================
OSErr DoGetBaseAddr(VDPgInfoPtr pgPtr, DCtlPtr dce);
OSErr DoGetDefaultMode(VDDefModePtr dfPtr, DCtlPtr dce);
OSErr DoGetEntries(VDSetEntryPtr pgPtr, DCtlPtr dce);
OSErr DoGetGamma(VDGamRecPtr gPtr, DCtlPtr dce);
OSErr DoGetGray(VDGrayPtr pgPtr, DCtlPtr dce);
OSErr DoGetInterrupt(VDPgInfoPtr flgPtr, DCtlPtr dce);
OSErr DoGetMode(VDPgInfoPtr pgPtr, DCtlPtr dce);
OSErr DoGetPages(VDPgInfoPtr pgPtr, DCtlPtr dce);
//==========================================================================
// Exported control routines
//==========================================================================
OSErr DoVideoReset(VDPgInfoPtr pgPtr, DCtlPtr dce);
OSErr DoSetVideoMode(VDPgInfoPtr pgPtr, DCtlPtr dce);
OSErr DoSetEntries(VDSetEntryPtr pgPtr, DCtlPtr dce);
OSErr DoSetGamma(VDGamRecPtr pgPtr, DCtlPtr dce);
OSErr DoGrayPage(VDPgInfoPtr pgPtr, DCtlPtr dce);
OSErr DoSetGray(VDGrayPtr pgPtr, DCtlPtr dce);
OSErr DoSetInterrupt(VDPgInfoPtr pgPtr, DCtlPtr dce);
OSErr DoDirectSetEntries(VDSetEntryPtr pgPtr, DCtlPtr dce);
OSErr DoSetDefaultMode(VDDefModePtr dfPtr, DCtlPtr dce);
//==========================================================================
// Definition of slot manager vendor PRAM data structure
//==========================================================================
struct SPRAMRecord {
UInt16 boardID;
UInt8 vendorUse1;
UInt8 vendorUse2;
UInt8 vendorUse3;
UInt8 vendorUse4;
UInt8 vendorUse5;
UInt8 vendorUse6;
};
typedef struct SPRAMRecord SPRAMRecord;
typedef SPRAMRecord *SPRAMRecordPtr, **SPRAMRecordHandle;
#define kSPRAMRecordSize (sizeof(SPRAMRecord))
//==========================================================================
// Definition of gamma table data structure
//==========================================================================
struct GammaTable {
short gVersion; // gamma version number
short gType; // gamma data type
short gFormulaSize; // Formula data size
short gChanCnt; // number of channels of data
short gDataCnt; // number of values/channel
short gDataWidth; // bits/corrected value (data packed to next larger byte size)
char gFormulaData[255*3]; // data for formulas followed by gamma values
};
typedef struct GammaTable GammaTable;
typedef GammaTable *GammaTablePtr, **GammaTableHandle;
#define kGammaTableSize (sizeof(GammaTable))
struct ACDCVidParms {
UInt8 pbcr0ValueFirstMode;
UInt8 pbcr1ValueFirstMode;
UInt8 pbcr0ValueSecondMode;
UInt8 pbcr1ValueSecondMode;
UInt8 pbcr0ValueThirdMode;
UInt8 pbcr1ValueThirdMode;
};
typedef struct ACDCVidParms ACDCVidParms;
typedef struct ACDCVidParms *ACDCVidParmsPtr;
typedef struct ACDCVidParms **ACDCVidParmsHdl;
#define ACDCVIDPARMSSIZE ((UInt32) sizeof(ACDCVidParms))
struct endeavorVidParms {
UInt8 MRegValue;
UInt8 NRegValue;
};
typedef struct endeavorVidParms endeavorVidParms;
typedef struct endeavorVidParms *endeavorVidParmsPtr;
typedef struct endeavorVidParms **endeavorVidParmsHdl;
#define ENDEAVORVIDPARMSSIZE ((UInt32) sizeof(endeavorVidParms))
struct globals {
GammaTablePtr gGammaPtr;
Ptr gBaseAddr;
Ptr gFBBaseAddr;
Boolean gInterruptsEnabled;
Boolean gMonoOnly;
Boolean gLuminanceMode;
Boolean gDirectMode;
UInt16 gNumLines;
UInt16 gRowBytes;
UInt16 gCurrentPage;
UInt32 gBigSlotNum;
UInt8 gMonitorID;
UInt8 gSlotNum;
UInt8 gCurrentMode;
SlotIntQElement qElem;
};
typedef struct globals globals;
typedef struct globals *globalsPtr;
typedef struct globals **globalsH;
#define GLOBALSSIZE ((UInt32) sizeof(globals))
//==========================================================================
// Utility routines
//==========================================================================
void RemoveInterruptRoutine(DCtlPtr dce);
void InstallInterruptRoutine(DCtlPtr dce);
void DoDisableVideo(UInt32 theSlot);
/*-------------------------------------------------------------------------
*
* End of Module
*
*-----------------------------------------------------------------------*/