//************************************************************************* //** ** //** AMACH.H ** //** ** //** Copyright (c) 1993, ATI Technologies Inc. ** //************************************************************************* // // Created from the 68800.H and 68801.H in the Windows NT Group // as a simple merging of the files so ALL Mach8 and Mach32 defines // are located in one H file. // // Created the 68800.inc file which includes equates, macros, etc // from the following include files: // 8514vesa.inc, vga1regs.inc, m32regs.inc, 8514.inc // // supplement Defines and values to the 68800 Family. // // This is a "C" only file and is NOT derived from any Assembler INC files. /********************** PolyTron RCS Utilities $Revision: 1.2 $ $Date: 23 Dec 1994 10:48:28 $ $Author: ASHANMUG $ $Log: S:/source/wnt/ms11/miniport/vcs/amach.h $ * * Rev 1.2 23 Dec 1994 10:48:28 ASHANMUG * ALPHA/Chrontel-DAC * * Rev 1.1 20 May 1994 13:55:52 RWOLFF * Ajith's change: removed unused register SRC_CMP_COLOR from enumeration. * * Rev 1.0 31 Jan 1994 11:26:18 RWOLFF * Initial revision. * * Rev 1.4 14 Jan 1994 15:15:30 RWOLFF * Added offsets of VGA registers from start of VGA_BASE_IO_PORT and * VGA_END_BREAK_PORT blocks, definition for bit in MISC_OPTIONS to * enable block write. * * Rev 1.3 15 Dec 1993 15:23:14 RWOLFF * Removed EISA configuration registers and (implied) placeholder for * linear framebuffer from register enumeration. * * Rev 1.2 10 Nov 1993 19:20:18 RWOLFF * Added definitions for DATA_READY bit of GE_STAT (ready to read from * PIX_TRANS in screen-to-host blit) and READ_WRITE bit of DP_CONFIG (indicates * whether we are reading from or writing to drawing trajectory). * * Rev 1.1 08 Oct 1993 10:58:52 RWOLFF * Added definitions for bit fields in MISC_OPTIONS and EXT_GE_CONFIG. * * Rev 1.0 03 Sep 1993 14:25:54 RWOLFF * Initial revision. Rev 1.4 06 Jul 1993 15:53:42 RWOLFF Added definitions for ATI 68860 and AT&T 491 DACs. Rev 1.3 07 Jun 1993 12:57:32 BRADES add EXT_SRC_Y, EXT_CUR_Y for Mach8 512k minimum mode. add enums for 24 and 32 bpp formats. Rev 1.2 30 Apr 1993 15:57:06 BRADES fix DISP_STATUS, SEQ_IND and 1CE registers to use table. Rev 1.0 14 Apr 1993 15:38:38 BRADES Initial revision. Rev 1.6 15 Mar 1993 22:22:12 BRADES add mode_table.m_screen_pitch for the # pixels on a display line. Used with Mach8 800 by 600 where pitch is 896. Rev 1.5 08 Mar 1993 19:58:10 BRADES added DEC Alpha and update to Build 390. Thsi is from Miniport source. Rev 1.3 15 Jan 1993 10:19:32 Robert_Wolff Added definitions for video card type, amount of video memory, and resolutions supported (formerly in VIDFIND.H). Rev 1.2 17 Dec 1992 18:09:10 Robert_Wolff Added definitions for various bits in the CMD and GE_STAT registers. Definitions originally were in the now-obsolete S3.H for the engine-only driver. Rev 1.1 13 Nov 1992 13:29:48 Robert_Wolff Fixed list of memory types (based on table on p. 9-66 of Programmer's Guide to the Mach 32 Registers, release 1.2, which swapped 2 types and omitted the second flavour of 256kx4 VRAM). Rev 1.0 13 Nov 1992 09:31:02 Chris_Brady Initial revision. End of PolyTron RCS section *****************/ #define REVISION 0x0002 // No one should use this //------------------------------------------------------------------------- // REGISTER PORT ADDRESSES // // PS/2 POS registers #define SETUP_ID1 0x0100 // Setup Mode Identification (Byte 1) #define SETUP_ID2 0x0101 // Setup Mode Identification (Byte 2) #define SETUP_OPT 0x0102 // Setup Mode Option Select #define ROM_SETUP 0x0103 // #define SETUP_1 0x0104 // #define SETUP_2 0x0105 // // Lowest and highest I/O ports used by the VGAWonder. #define VGA_BASE_IO_PORT 0x03B0 #define VGA_START_BREAK_PORT 0x03BB #define VGA_END_BREAK_PORT 0x03C0 #define VGA_MAX_IO_PORT 0x03DF // Registers used in reading/writing EEPROM #define IO_SEQ_IND 0x03C4 // Sequencer index register #define IO_HI_SEQ_ADDR IO_SEQ_IND // word register #define IO_SEQ_DATA 0x03C5 // Sequencer data register /* * Offsets for VGA registers from regVGA_BASE_IO_PORT or * regVGA_END_BREAK_PORT (depending on which block they're in) */ #define GENMO_OFFSET 0x0002 /* 0x03C2 */ #define DAC_W_INDEX_OFFSET 0x0008 /* 0x03C8 */ #define DAC_DATA_OFFSET 0x0009 /* 0x03C9 */ #define CRTX_COLOUR_OFFSET 0x0014 /* 0x03D4 */ #define GENS1_COLOUR_OFFSET 0x001A /* 0x03DA */ // define registers in IO space #define IO_DAC_MASK 0x02EA // DAC Mask #define IO_DAC_R_INDEX 0x02EB // DAC Read Index #define IO_DAC_W_INDEX 0x02EC // DAC Write Index #define IO_DAC_DATA 0x02ED // DAC Data #define IO_DISP_STATUS 0x02E8 // Display Status #define IO_H_TOTAL 0x02E8 // Horizontal Total #define IO_OVERSCAN_COLOR_8 0x02EE #define IO_OVERSCAN_BLUE_24 0x02EF #define IO_H_DISP 0x06E8 // Horizontal Displayed #define IO_OVERSCAN_GREEN_24 0x06EE #define IO_OVERSCAN_RED_24 0x06EF #define IO_H_SYNC_STRT 0x0AE8 // Horizontal Sync Start #define IO_CURSOR_OFFSET_LO 0x0AEE #define IO_H_SYNC_WID 0x0EE8 // Horizontal Sync Width #define IO_CURSOR_OFFSET_HI 0x0EEE #define IO_V_TOTAL 0x12E8 // Vertical Total #define IO_CONFIG_STATUS_1 0x12EE // Read only equivalent to HORZ_CURSOR_POSN #define IO_HORZ_CURSOR_POSN 0x12EE #define IO_V_DISP 0x16E8 // Vertical Displayed #define IO_CONFIG_STATUS_2 0x16EE // Read only equivalent to VERT_CURSOR_POSN #define IO_VERT_CURSOR_POSN 0x16EE #define IO_V_SYNC_STRT 0x1AE8 // Vertical Sync Start #define IO_CURSOR_COLOR_0 0x1AEE #define IO_FIFO_TEST_DATA 0x1AEE #define IO_CURSOR_COLOR_1 0x1AEF #define IO_V_SYNC_WID 0x1EE8 // Vertical Sync Width #define IO_HORZ_CURSOR_OFFSET 0x1EEE #define IO_VERT_CURSOR_OFFSET 0x1EEF #define IO_DISP_CNTL 0x22E8 // Display Control #define IO_CRT_PITCH 0x26EE #define IO_CRT_OFFSET_LO 0x2AEE #define IO_CRT_OFFSET_HI 0x2EEE #define IO_LOCAL_CONTROL 0x32EE #define IO_FIFO_OPT 0x36EE #define IO_MISC_OPTIONS 0x36EE #define IO_EXT_CURSOR_COLOR_0 0x3AEE #define IO_FIFO_TEST_TAG 0x3AEE #define IO_EXT_CURSOR_COLOR_1 0x3EEE #define IO_SUBSYS_CNTL 0x42E8 // Subsystem Control #define IO_SUBSYS_STAT 0x42E8 // Subsystem Status #define IO_MEM_BNDRY 0x42EE #define IO_SHADOW_CTL 0x46EE #define IO_ROM_PAGE_SEL 0x46E8 // ROM Page Select (not in manual) #define IO_ADVFUNC_CNTL 0x4AE8 // Advanced Function Control #define IO_CLOCK_SEL 0x4AEE #define IO_ROM_ADDR_1 0x52EE #define IO_ROM_ADDR_2 0x56EE #define IO_SCRATCH_PAD_0 0x52EE #define IO_SCRATCH_PAD_1 0x56EE #define IO_SHADOW_SET 0x5AEE #define IO_MEM_CFG 0x5EEE #define IO_EXT_GE_STATUS 0x62EE #define IO_HORZ_OVERSCAN 0x62EE #define IO_VERT_OVERSCAN 0x66EE #define IO_MAX_WAITSTATES 0x6AEE #define IO_GE_OFFSET_LO 0x6EEE #define IO_BOUNDS_LEFT 0x72EE #define IO_GE_OFFSET_HI 0x72EE #define IO_BOUNDS_TOP 0x76EE #define IO_GE_PITCH 0x76EE #define IO_BOUNDS_RIGHT 0x7AEE #define IO_EXT_GE_CONFIG 0x7AEE #define IO_BOUNDS_BOTTOM 0x7EEE #define IO_MISC_CNTL 0x7EEE #define IO_CUR_Y 0x82E8 // Current Y Position #define IO_PATT_DATA_INDEX 0x82EE #define IO_CUR_X 0x86E8 // Current X Position #define IO_SRC_Y 0x8AE8 // #define IO_DEST_Y 0x8AE8 // #define IO_AXSTP 0x8AE8 // Destination Y Position #define IO_SRC_X 0x8EE8 // Axial Step Constant #define IO_DEST_X 0x8EE8 // #define IO_DIASTP 0x8EE8 // Destination X Position #define IO_PATT_DATA 0x8EEE #define IO_R_EXT_GE_CONFIG 0x8EEE #define IO_ERR_TERM 0x92E8 // Error Term #define IO_R_MISC_CNTL 0x92EE #define IO_MAJ_AXIS_PCNT 0x96E8 // Major Axis Pixel Count #define IO_BRES_COUNT 0x96EE #define IO_CMD 0x9AE8 // Command #define IO_GE_STAT 0x9AE8 // Graphics Processor Status #define IO_EXT_FIFO_STATUS 0x9AEE #define IO_LINEDRAW_INDEX 0x9AEE #define IO_SHORT_STROKE 0x9EE8 // Short Stroke Vector Transfer #define IO_BKGD_COLOR 0xA2E8 // Background Color #define IO_LINEDRAW_OPT 0xA2EE #define IO_FRGD_COLOR 0xA6E8 // Foreground Color #define IO_DEST_X_START 0xA6EE #define IO_WRT_MASK 0xAAE8 // Write Mask #define IO_DEST_X_END 0xAAEE #define IO_RD_MASK 0xAEE8 // Read Mask #define IO_DEST_Y_END 0xAEEE #define IO_CMP_COLOR 0xB2E8 // Compare Color #define IO_R_H_TOTAL 0xB2EE #define IO_R_H_DISP 0xB2EE #define IO_SRC_X_START 0xB2EE #define IO_BKGD_MIX 0xB6E8 // Background Mix #define IO_ALU_BG_FN 0xB6EE #define IO_R_H_SYNC_STRT 0xB6EE #define IO_FRGD_MIX 0xBAE8 // Foreground Mix #define IO_ALU_FG_FN 0xBAEE #define IO_R_H_SYNC_WID 0xBAEE #define IO_MULTIFUNC_CNTL 0xBEE8 // Multi-Function Control (mach 8) #define IO_MIN_AXIS_PCNT 0xBEE8 #define IO_SCISSOR_T 0xBEE8 #define IO_SCISSOR_L 0xBEE8 #define IO_SCISSOR_B 0xBEE8 #define IO_SCISSOR_R 0xBEE8 #define IO_MEM_CNTL 0xBEE8 #define IO_PATTERN_L 0xBEE8 #define IO_PATTERN_H 0xBEE8 #define IO_PIXEL_CNTL 0xBEE8 #define IO_SRC_X_END 0xBEEE #define IO_SRC_Y_DIR 0xC2EE #define IO_R_V_TOTAL 0xC2EE #define IO_EXT_SSV 0xC6EE // (used for MACH 8) #define IO_EXT_SHORT_STROKE 0xC6EE #define IO_R_V_DISP 0xC6EE #define IO_SCAN_X 0xCAEE #define IO_R_V_SYNC_STRT 0xCAEE #define IO_DP_CONFIG 0xCEEE #define IO_VERT_LINE_CNTR 0xCEEE #define IO_PATT_LENGTH 0xD2EE #define IO_R_V_SYNC_WID 0xD2EE #define IO_PATT_INDEX 0xD6EE #define IO_EXT_SCISSOR_L 0xDAEE // "extended" left scissor (12 bits precision) #define IO_R_SRC_X 0xDAEE #define IO_EXT_SCISSOR_T 0xDEEE // "extended" top scissor (12 bits precision) #define IO_R_SRC_Y 0xDEEE #define IO_PIX_TRANS 0xE2E8 // Pixel Data Transfer #define IO_PIX_TRANS_HI 0xE2E9 // Pixel Data Transfer #define IO_EXT_SCISSOR_R 0xE2EE // "extended" right scissor (12 bits precision) #define IO_EXT_SCISSOR_B 0xE6EE // "extended" bottom scissor (12 bits precision) #define IO_SRC_CMP_COLOR 0xEAEE // (used for MACH 8) #define IO_DEST_CMP_FN 0xEEEE #define IO_EXT_CUR_Y 0xF6EE // Mach8 only #define IO_ASIC_ID 0xFAEE // Mach32 rev 6 #define IO_LINEDRAW 0xFEEE // Internal registers (read only, for test purposes only) #define IO__PAR_FIFO_DATA 0x1AEE #define IO__PAR_FIFO_ADDR 0x3AEE #define IO__MAJOR_DEST_CNT 0x42EE #define IO__MAJOR_SRC_CNT 0x5EEE #define IO__MINOR_DEST_CNT 0x66EE #define IO__MINOR_SRC_CNT 0x8AEE #define IO__HW_TEST 0x32EE //--------------------------------------------------------- // define the registers locations in Memory Mapped space // take the IO address and and with 0xFC00 works for offset //--- IF (port AND 0FFh) EQ 0E8h //--- mov word ptr seg:[edx+(3FFE00h+((port AND 0FC00h)shr 8))],ax //--- ELSE //--- IF (port AND 0FFh) EQ 0EEh //--- mov word ptr seg:[edx+(3FFF00h+((port AND 0FC00h)shr 8))],ax //--- 0x3FFE00 #define MM_DISP_STATUS (IO_DISP_STATUS & 0xFC00) >> 8 #define MM_DISP_CNTL (IO_DISP_CNTL & 0xFC00) >> 8 #define MM_SUBSYS_CNTL (IO_SUBSYS_CNTL & 0xFC00) >> 8 #define MM_SUBSYS_STAT (IO_SUBSYS_STAT & 0xFC00) >> 8 #define MM_ADVFUNC_CNTL (IO_ADVFUNC_CNTL & 0xFC00) >> 8 #define MM_CUR_Y (IO_CUR_Y & 0xFC00) >> 8 #define MM_CUR_X (IO_CUR_X & 0xFC00) >> 8 #define MM_SRC_Y (IO_SRC_Y & 0xFC00) >> 8 #define MM_DEST_Y (IO_DEST_Y & 0xFC00) >> 8 #define MM_AXSTP (IO_AXSTP & 0xFC00) >> 8 #define MM_SRC_X (IO_SRC_X & 0xFC00) >> 8 #define MM_DEST_X (IO_DEST_X & 0xFC00) >> 8 #define MM_DIASTP (IO_DIASTP & 0xFC00) >> 8 #define MM_ERR_TERM (IO_ERR_TERM & 0xFC00) >> 8 #define MM_MAJ_AXIS_PCNT (IO_MAJ_AXIS_PCNT & 0xFC00) >> 8 #define MM_GE_STAT (IO_GE_STAT & 0xFC00) >> 8 #define MM_SHORT_STROKE (IO_SHORT_STROKE & 0xFC00) >> 8 #define MM_BKGD_COLOR (IO_BKGD_COLOR & 0xFC00) >> 8 #define MM_FRGD_COLOR (IO_FRGD_COLOR & 0xFC00) >> 8 #define MM_WRT_MASK (IO_WRT_MASK & 0xFC00) >> 8 #define MM_RD_MASK (IO_RD_MASK & 0xFC00) >> 8 #define MM_CMP_COLOR (IO_CMP_COLOR & 0xFC00) >> 8 #define MM_BKGD_MIX (IO_BKGD_MIX & 0xFC00) >> 8 #define MM_FRGD_MIX (IO_FRGD_MIX & 0xFC00) >> 8 #define MM_MULTIFUNC_CNTL (IO_MULTIFUNC_CNTL & 0xFC00) >> 8 #define MM_MIN_AXIS_PCNT (IO_MIN_AXIS_PCNT & 0xFC00) >> 8 //--- #define MM_MEM_CNTL (IO_MEM_CNTL & 0xFC00) >> 8 #define MM_PIXEL_CNTL (IO_PIXEL_CNTL & 0xFC00) >> 8 #define MM_PIX_TRANS (IO_PIX_TRANS & 0xFC00) >> 8 #define MM_PIX_TRANS_HI (IO_PIX_TRANS_HI & 0xFC00) >> 8 #define MM_CURSOR_OFFSET_LO 0x100+((IO_CURSOR_OFFSET_LO & 0xFC00) >> 8) + (IO_CURSOR_OFFSET_LO & 1) #define MM_CURSOR_OFFSET_HI 0x100+((IO_CURSOR_OFFSET_HI & 0xFC00) >> 8) + (IO_CURSOR_OFFSET_HI & 1) #define MM_CONFIG_STATUS_1 0x100+((IO_CONFIG_STATUS_1 & 0xFC00) >> 8) + (IO_CONFIG_STATUS_1 & 1) #define MM_HORZ_CURSOR_POSN 0x100+((IO_HORZ_CURSOR_POSN & 0xFC00) >> 8) + (IO_HORZ_CURSOR_POSN & 1) #define MM_CONFIG_STATUS_2 0x100+((IO_CONFIG_STATUS_2 & 0xFC00) >> 8) + (IO_CONFIG_STATUS_2 & 1) #define MM_VERT_CURSOR_POSN 0x100+((IO_VERT_CURSOR_POSN & 0xFC00) >> 8) + (IO_VERT_CURSOR_POSN & 1) #define MM_CURSOR_COLOR_0 0x100+((IO_CURSOR_COLOR_0 & 0xFC00) >> 8) + (IO_CURSOR_COLOR_0 & 1) #define MM_CURSOR_COLOR_1 0x100+((IO_CURSOR_COLOR_1 & 0xFC00) >> 8) + (IO_CURSOR_COLOR_1 & 1) #define MM_HORZ_CURSOR_OFFSET 0x100+((IO_HORZ_CURSOR_OFFSET & 0xFC00) >> 8) + (IO_HORZ_CURSOR_OFFSET & 1) #define MM_VERT_CURSOR_OFFSET 0x100+((IO_VERT_CURSOR_OFFSET & 0xFC00) >> 8) + (IO_VERT_CURSOR_OFFSET & 1) #define MM_CRT_PITCH 0x100+((IO_CRT_PITCH & 0xFC00) >> 8) + (IO_CRT_PITCH & 1) #define MM_CRT_OFFSET_LO 0x100+((IO_CRT_OFFSET_LO & 0xFC00) >> 8) + (IO_CRT_OFFSET_LO & 1) #define MM_CRT_OFFSET_HI 0x100+((IO_CRT_OFFSET_HI & 0xFC00) >> 8) + (IO_CRT_OFFSET_HI & 1) #define MM_MISC_OPTIONS 0x100+((IO_MISC_OPTIONS & 0xFC00) >> 8) + (IO_MISC_OPTIONS & 1) #define MM_EXT_CURSOR_COLOR_0 0x100+((IO_EXT_CURSOR_COLOR_0 & 0xFC00) >> 8) + (IO_EXT_CURSOR_COLOR_0 & 1) #define MM_EXT_CURSOR_COLOR_1 0x100+((IO_EXT_CURSOR_COLOR_1 & 0xFC00) >> 8) + (IO_EXT_CURSOR_COLOR_1 & 1) #define MM_CLOCK_SEL 0x100+((IO_CLOCK_SEL & 0xFC00) >> 8) + (IO_CLOCK_SEL & 1) #define MM_EXT_GE_STATUS 0x100+((IO_EXT_GE_STATUS & 0xFC00) >> 8) + (IO_EXT_GE_STATUS & 1) #define MM_GE_OFFSET_LO 0x100+((IO_GE_OFFSET_LO & 0xFC00) >> 8) + (IO_GE_OFFSET_LO & 1) #define MM_BOUNDS_LEFT 0x100+((IO_BOUNDS_LEFT & 0xFC00) >> 8) + (IO_BOUNDS_LEFT & 1) #define MM_GE_OFFSET_HI 0x100+((IO_GE_OFFSET_HI & 0xFC00) >> 8) + (IO_GE_OFFSET_HI & 1) #define MM_BOUNDS_TOP 0x100+((IO_BOUNDS_TOP & 0xFC00) >> 8) + (IO_BOUNDS_TOP & 1) #define MM_GE_PITCH 0x100+((IO_GE_PITCH & 0xFC00) >> 8) + (IO_GE_PITCH & 1) #define MM_BOUNDS_RIGHT 0x100+((IO_BOUNDS_RIGHT & 0xFC00) >> 8) + (IO_BOUNDS_RIGHT & 1) #define MM_EXT_GE_CONFIG 0x100+((IO_EXT_GE_CONFIG & 0xFC00) >> 8) + (IO_EXT_GE_CONFIG & 1) #define MM_BOUNDS_BOTTOM 0x100+((IO_BOUNDS_BOTTOM & 0xFC00) >> 8) + (IO_BOUNDS_BOTTOM & 1) #define MM_MISC_CNTL 0x100+((IO_MISC_CNTL & 0xFC00) >> 8) + (IO_MISC_CNTL & 1) #define MM_PATT_DATA_INDEX 0x100+((IO_PATT_DATA_INDEX & 0xFC00) >> 8) + (IO_PATT_DATA_INDEX & 1) #define MM_PATT_DATA 0x100+((IO_PATT_DATA & 0xFC00) >> 8) + (IO_PATT_DATA & 1) #define MM_BRES_COUNT 0x100+((IO_BRES_COUNT & 0xFC00) >> 8) + (IO_BRES_COUNT & 1) #define MM_EXT_FIFO_STATUS 0x100+((IO_EXT_FIFO_STATUS & 0xFC00) >> 8) + (IO_EXT_FIFO_STATUS & 1) #define MM_LINEDRAW_INDEX 0x100+((IO_LINEDRAW_INDEX & 0xFC00) >> 8) + (IO_LINEDRAW_INDEX & 1) #define MM_LINEDRAW_OPT 0x100+((IO_LINEDRAW_OPT & 0xFC00) >> 8) + (IO_LINEDRAW_OPT & 1) #define MM_DEST_X_START 0x100+((IO_DEST_X_START & 0xFC00) >> 8) + (IO_DEST_X_START & 1) #define MM_DEST_X_END 0x100+((IO_DEST_X_END & 0xFC00) >> 8) + (IO_DEST_X_END & 1) #define MM_DEST_Y_END 0x100+((IO_DEST_Y_END & 0xFC00) >> 8) + (IO_DEST_Y_END & 1) #define MM_SRC_X_START 0x100+((IO_SRC_X_START & 0xFC00) >> 8) + (IO_SRC_X_START & 1) #define MM_ALU_BG_FN 0x100+((IO_ALU_BG_FN & 0xFC00) >> 8) + (IO_ALU_BG_FN & 1) #define MM_ALU_FG_FN 0x100+((IO_ALU_FG_FN & 0xFC00) >> 8) + (IO_ALU_FG_FN & 1) #define MM_SRC_X_END 0x100+((IO_SRC_X_END & 0xFC00) >> 8) + (IO_SRC_X_END & 1) #define MM_SRC_Y_DIR 0x100+((IO_SRC_Y_DIR & 0xFC00) >> 8) + (IO_SRC_Y_DIR & 1) #define MM_EXT_SSV 0x100+((IO_EXT_SSV & 0xFC00) >> 8) + (IO_EXT_SSV & 1) #define MM_EXT_SHORT_STROKE 0x100+((IO_EXT_SHORT_STROKE & 0xFC00) >> 8) + (IO_EXT_SHORT_STROKE & 1) #define MM_SCAN_X 0x100+((IO_SCAN_X & 0xFC00) >> 8) + (IO_SCAN_X & 1) #define MM_DP_CONFIG 0x100+((IO_DP_CONFIG & 0xFC00) >> 8) + (IO_DP_CONFIG & 1) #define MM_VERT_LINE_CNTR 0x100+((IO_VERT_LINE_CNTR & 0xFC00) >> 8) + (IO_VERT_LINE_CNTR & 1) #define MM_PATT_LENGTH 0x100+((IO_PATT_LENGTH & 0xFC00) >> 8) + (IO_PATT_LENGTH & 1) #define MM_PATT_INDEX 0x100+((IO_PATT_INDEX & 0xFC00) >> 8) + (IO_PATT_INDEX & 1) #define MM_EXT_SCISSOR_L 0x100+((IO_EXT_SCISSOR_L & 0xFC00) >> 8) + (IO_EXT_SCISSOR_L & 1) #define MM_EXT_SCISSOR_T 0x100+((IO_EXT_SCISSOR_T & 0xFC00) >> 8) + (IO_EXT_SCISSOR_T & 1) #define MM_EXT_SCISSOR_R 0x100+((IO_EXT_SCISSOR_R & 0xFC00) >> 8) + (IO_EXT_SCISSOR_R & 1) #define MM_EXT_SCISSOR_B 0x100+((IO_EXT_SCISSOR_B & 0xFC00) >> 8) + (IO_EXT_SCISSOR_B & 1) #define MM_SRC_CMP_COLOR 0x100+((IO_SRC_CMP_COLOR & 0xFC00) >> 8) + (IO_SRC_CMP_COLOR & 1) #define MM_DEST_CMP_FN 0x100+((IO_DEST_CMP_FN & 0xFC00) >> 8) + (IO_DEST_CMP_FN & 1) #define MM_EXT_CUR_Y 0x100+((IO_EXT_CUR_Y & 0xFC00) >> 8) + (IO_ASIC_ID & 1) #define MM_LINEDRAW 0x100+((IO_LINEDRAW & 0xFC00) >> 8) + (IO_LINEDRAW & 1) //--------------------------------------------------------- // define the registers as subscripts to an array // this order MATCHES SETUP_M.H DriverRange_m[] structures // all entries are in INCREASING IO address. // // Alternate names AT same IO address enum { DAC_MASK=0 , DAC_R_INDEX , DAC_W_INDEX , DAC_DATA , DISP_STATUS , // H_TOTAL OVERSCAN_COLOR_8 , // OVERSCAN_BLUE_24 at 2EF H_DISP , OVERSCAN_GREEN_24 , // OVERSCAN_RED_24 at 6EF H_SYNC_STRT , CURSOR_OFFSET_LO , H_SYNC_WID , CURSOR_OFFSET_HI , V_TOTAL , CONFIG_STATUS_1 , // HORZ_CURSOR_POSN V_DISP , CONFIG_STATUS_2 , // VERT_CURSOR_POSN V_SYNC_STRT , CURSOR_COLOR_0 , // FIFO_TEST_DATA CURSOR_COLOR_1 , V_SYNC_WID , HORZ_CURSOR_OFFSET , VERT_CURSOR_OFFSET , DISP_CNTL , CRT_PITCH , CRT_OFFSET_LO , CRT_OFFSET_HI , LOCAL_CONTROL , FIFO_OPT , // MISC_OPTIONS EXT_CURSOR_COLOR_0 , // FIFO_TEST_TAG EXT_CURSOR_COLOR_1 , SUBSYS_CNTL , // SUBSYS_STAT MEM_BNDRY , ROM_PAGE_SEL , SHADOW_CTL , ADVFUNC_CNTL , CLOCK_SEL , ROM_ADDR_1 , // SCRATCH_PAD_0 ROM_ADDR_2 , // SCRATCH_PAD_1 SHADOW_SET , MEM_CFG , EXT_GE_STATUS , // HORZ_OVERSCAN VERT_OVERSCAN , MAX_WAITSTATES , GE_OFFSET_LO , BOUNDS_LEFT , // GE_OFFSET_HI BOUNDS_TOP , // GE_PITCH BOUNDS_RIGHT , // EXT_GE_CONFIG BOUNDS_BOTTOM , // MISC_CNTL CUR_Y , PATT_DATA_INDEX , CUR_X , SRC_Y , // DEST_Y AXSTP SRC_X , // DEST_X DIASTP PATT_DATA , // R_EXT_GE_CONFIG ERR_TERM , R_MISC_CNTL , MAJ_AXIS_PCNT , BRES_COUNT , CMD , // GE_STAT LINEDRAW_INDEX , // EXT_FIFO_STATUS SHORT_STROKE , BKGD_COLOR , LINEDRAW_OPT , FRGD_COLOR , DEST_X_START , WRT_MASK , DEST_X_END , RD_MASK , DEST_Y_END , CMP_COLOR , SRC_X_START , // R_H_TOTAL R_H_DISP BKGD_MIX , ALU_BG_FN , // R_H_SYNC_STRT FRGD_MIX , ALU_FG_FN , // R_H_SYNC_WID MULTIFUNC_CNTL , // MIN_AXIS_PCNT SCISSOR_T SCISSOR_L // SCISSOR_B SCISSOR_R MEM_CNTL // PATTERN_L PATTERN_H PIXEL_CNTL SRC_X_END , SRC_Y_DIR , // R_V_TOTAL EXT_SSV , // EXT_SHORT_STROKE R_V_DISP SCAN_X , // R_V_SYNC_STRT DP_CONFIG , // VERT_LINE_CNTR PATT_LENGTH , // R_V_SYNC_WID PATT_INDEX , EXT_SCISSOR_L , // R_SRC_X EXT_SCISSOR_T , // R_SRC_Y PIX_TRANS , PIX_TRANS_HI , EXT_SCISSOR_R , EXT_SCISSOR_B , DEST_CMP_FN , ASIC_ID , LINEDRAW , SEQ_IND , HI_SEQ_ADDR , SEQ_DATA , regVGA_BASE_IO_PORT , regVGA_END_BREAK_PORT, reg1CE , // ati_reg == 0x1CE reg1CF , // ati_reg == 0x1CF EXT_CUR_Y , reg3CE , // // Internal registers (read only, for test purposes only) _PAR_FIFO_DATA , _PAR_FIFO_ADDR , _MAJOR_DEST_CNT , _MAJOR_SRC_CNT , _MINOR_DEST_CNT , _MINOR_SRC_CNT , _HW_TEST }; // define the registers located at the same I/O addresses #define H_TOTAL DISP_STATUS #define HORZ_CURSOR_POSN CONFIG_STATUS_1 #define VERT_CURSOR_POSN CONFIG_STATUS_2 #define FIFO_TEST_DATA CURSOR_COLOR_0 #define MISC_OPTIONS FIFO_OPT #define FIFO_TEST_TAG EXT_CURSOR_COLOR_0 #define SUBSYS_STAT SUBSYS_CNTL #define SCRATCH_PAD_0 ROM_ADDR_1 #define SCRATCH_PAD_1 ROM_ADDR_2 #define HORZ_OVERSCAN EXT_GE_STATUS #define GE_STAT CMD #define GE_OFFSET_HI BOUNDS_LEFT #define GE_PITCH BOUNDS_TOP #define EXT_GE_CONFIG BOUNDS_RIGHT #define MISC_CNTL BOUNDS_BOTTOM #define DEST_Y SRC_Y #define AXSTP SRC_Y #define DEST_X SRC_X #define DIASTP SRC_X #define R_EXT_GE_CONFIG PATT_DATA #define EXT_FIFO_STATUS LINEDRAW_INDEX #define R_H_TOTAL SRC_X_START #define R_H_DISP SRC_X_START #define R_H_SYNC_STRT ALU_BG_FN #define R_H_SYNC_WID ALU_FG_FN #define MEM_CNTL MULTIFUNC_CNTL #define R_V_TOTAL SRC_Y_DIR #define EXT_SHORT_STROKE EXT_SSV #define R_V_DISP EXT_SSV #define R_V_SYNC_STRT SCAN_X #define VERT_LINE_CNTR DP_CONFIG #define R_V_SYNC_WID PATT_LENGTH #define R_SRC_X EXT_SCISSOR_L #define R_SRC_Y EXT_SCISSOR_T #define EXT_SRC_Y ASIC_ID //--------------------------------------------------------- //--------------------------------------------------------- // Define the ASIC revisions into something Useful // Values are reported by the ASIC_ID register. #define MACH32_REV3 0 #define MACH32_REV5 1 // not in production #define MACH32_REV6 2 //--------------------------------------------------------- // #define MIX_FN_NOT_D 0x0000 //NOT dest #define MIX_FN_ZERO 0x0001 //dest = 0 #define MIX_FN_ONE 0x0002 //dest = 1 #define MIX_FN_LEAVE_ALONE 0x0003 //dest #define MIX_FN_NOT_S 0x0004 //NOT source #define MIX_FN_XOR 0x0005 //source XOR dest #define MIX_FN_XNOR 0x0006 //source XOR NOT dest #define MIX_FN_PAINT 0x0007 //source #define MIX_FN_NAND 0x0008 //NOT source OR NOT dest #define MIX_FN_D_OR_NOT_S 0x0009 //NOT source OR dest #define MIX_FN_NOT_D_OR_S 0x000A //source OR NOT dest #define MIX_FN_OR 0x000B //source OR dest #define MIX_FN_AND 0x000C //dest AND source #define MIX_FN_NOT_D_AND_S 0x000D //NOT dest AND source #define MIX_FN_D_AND_NOT_S 0x000E //dest AND NOT source #define MIX_FN_NOR 0x000F //NOT dest AND NOT source #define MIX_FN_MIN 0x0010 //minimum #define MIX_FN_SUBSZ 0x0011 //(dest - source), with saturate #define MIX_FN_SUBDZ 0x0012 //(source - dest), with saturate #define MIX_FN_ADDS 0x0013 //add with saturation #define MIX_FN_MAX 0x0014 //maximum // // //--------------------------------------------------------- // //Following are the FIFO checking macros: // #define ONE_WORD 0x8000 #define TWO_WORDS 0xC000 #define THREE_WORDS 0xE000 #define FOUR_WORDS 0xF000 #define FIVE_WORDS 0xF800 #define SIX_WORDS 0xFC00 #define SEVEN_WORDS 0xFE00 #define EIGHT_WORDS 0xFF00 #define NINE_WORDS 0xFF80 #define TEN_WORDS 0xFFC0 #define ELEVEN_WORDS 0xFFE0 #define TWELVE_WORDS 0xFFF0 #define THIRTEEN_WORDS 0xFFF8 #define FOURTEEN_WORDS 0xFFFC #define FIFTEEN_WORDS 0xFFFE #define SIXTEEN_WORDS 0xFFFF // // // //--------------------------------------- // // // Draw Command (IBM 8514 compatible CMD register) // // opcode field #define OP_CODE 0xE000 #define SHIFT_op_code 0x000D #define DRAW_SETUP 0x0000 #define DRAW_LINE 0x2000 #define FILL_RECT_H1H4 0x4000 #define FILL_RECT_V1V2 0x6000 #define FILL_RECT_V1H4 0x8000 #define DRAW_POLY_LINE 0xA000 #define BITBLT_OP 0xC000 #define DRAW_FOREVER 0xE000 // swap field #define LSB_FIRST 0x1000 // data width field #define DATA_WIDTH 0x0200 #define BIT16 0x0200 #define BIT8 0x0000 // CPU wait field #define CPU_WAIT 0x0100 // octant field #define OCTANT 0x00E0 #define SHIFT_octant 0x0005 #define YPOSITIVE 0x0080 #define YMAJOR 0x0040 #define XPOSITIVE 0x0020 // draw field #define DRAW 0x0010 // direction field #define DIR_TYPE 0x0008 #define DEGREE 0x0008 #define XY 0x0000 #define RECT_RIGHT_AND_DOWN 0x00E0 // quadrant 3 #define RECT_LEFT_AND_UP 0x0000 // quadrant 1 // last pel off field #define SHIFT_last_pel_off 0x0002 #define LAST_PEL_OFF 0x0004 #define LAST_PEL_ON 0x0000 #define LAST_PIXEL_OFF 0x0004 #define LAST_PIXEL_ON 0x0000 #define MULTIPLE_PIXELS 0x0002 #define SINGLE_PIXEL 0x0000 // pixel mode #define PIXEL_MODE 0x0002 #define MULTI 0x0002 #define SINGLE 0x0000 // read/write #define RW 0x0001 #define WRITE 0x0001 #define READ 0x0000 // // --------------------------------------------------------- // // // GE_STAT (9AE8) is set if the engine is busy. // #define HARDWARE_BUSY 0x0200 #define DATA_READY 0x0100 /* * Miscelaneous Options (MISC_OPTIONS) */ #define MEM_SIZE_ALIAS 0x0000C #define MEM_SIZE_STRIPPED 0x0FFF3 #define MEM_SIZE_512K 0x00000 #define MEM_SIZE_1M 0x00004 #define MEM_SIZE_2M 0x00008 #define MEM_SIZE_4M 0x0000C #define BLK_WR_ENA 0x00400 // // Extended Graphics Engine Status (EXT_GE_STATUS) // #define POINTS_INSIDE 0x8000 #define EE_DATA_IN 0x4000 #define GE_ACTIVE 0x2000 #define CLIP_ABOVE 0x1000 #define CLIP_BELOW 0x0800 #define CLIP_LEFT 0x0400 #define CLIP_RIGHT 0x0200 #define CLIP_FLAGS 0x1E00 #define CLIP_INSIDE 0x0100 #define EE_CRC_VALID 0x0080 #define CLIP_OVERRUN 0x000F /* * Extended Graphics Engine Configuration (EXT_GE_CONFIG) */ #define PIX_WIDTH_4BPP 0x0000 #define PIX_WIDTH_8BPP 0x0010 #define PIX_WIDTH_16BPP 0x0020 #define PIX_WIDTH_24BPP 0x0030 #define ORDER_16BPP_555 0x0000 #define ORDER_16BPP_565 0x0040 #define ORDER_16BPP_655 0x0080 #define ORDER_16BPP_664 0x00C0 #define ORDER_24BPP_RGB 0x0000 #define ORDER_24BPP_RGBx 0x0200 #define ORDER_24BPP_BGR 0x0400 #define ORDER_24BPP_xBGR 0x0600 // // Datapath Configuration Register (DP_CONFIG) #define FG_COLOR_SRC 0xE000 #define SHIFT_fg_color_src 0x000D #define DATA_ORDER 0x1000 #define DATA_WIDTH 0x0200 #define BG_COLOR_SRC 0x0180 #define SHIFT_bg_color_src 0x0007 #define EXT_MONO_SRC 0x0060 #define SHIFT_ext_mono_src 0x0005 #define DRAW 0x0010 #define READ_MODE 0x0004 #define POLY_FILL_MODE 0x0002 #define READ_WRITE 0x0001 #define SRC_SWAP 0x0800 // #define FG_COLOR_SRC_BG 0x0000 // Background Color Register #define FG_COLOR_SRC_FG 0x2000 // Foreground Color Register #define FG_COLOR_SRC_HOST 0x4000 // CPU Data Transfer Reg #define FG_COLOR_SRC_BLIT 0x6000 // VRAM blit source #define FG_COLOR_SRC_GS 0x8000 // Grey-scale mono blit #define FG_COLOR_SRC_PATT 0xA000 // Color Pattern Shift Reg #define FG_COLOR_SRC_CLUH 0xC000 // Color lookup of Host Data #define FG_COLOR_SRC_CLUB 0xE000 // Color lookup of blit src // #define BG_COLOR_SRC_BG 0x0000 // Background Color Reg #define BG_COLOR_SRC_FG 0x0080 // Foreground Color Reg #define BG_COLOR_SRC_HOST 0x0100 // CPU Data Transfer Reg #define BG_COLOR_SRC_BLIT 0x0180 // VRAM blit source // // Note that "EXT_MONO_SRC" and "MONO_SRC" are mutually destructive, but that // "EXT_MONO_SRC" selects the ATI pattern registers. // #define EXT_MONO_SRC_ONE 0x0000 // Always '1' #define EXT_MONO_SRC_PATT 0x0020 // ATI Mono Pattern Regs #define EXT_MONO_SRC_HOST 0x0040 // CPU Data Transfer Reg #define EXT_MONO_SRC_BLIT 0x0060 // VRAM Blit source plane // // Linedraw Options Register (LINEDRAW_OPT) // #define CLIP_MODE 0x0600 #define SHIFT_clip_mode 0x0009 #define CLIP_MODE_DIS 0x0000 #define CLIP_MODE_LINE 0x0200 #define CLIP_MODE_PLINE 0x0400 #define CLIP_MODE_PATT 0x0600 #define BOUNDS_RESET 0x0100 #define OCTANT 0x00E0 #define SHIFT_ldo_octant 0x0005 #define YDIR 0x0080 #define XMAJOR 0x0040 #define XDIR 0x0020 #define DIR_TYPE 0x0008 #define DIR_TYPE_DEGREE 0x0008 #define DIR_TYPE_OCTANT 0x0000 #define LAST_PEL_OFF 0x0004 #define POLY_MODE 0x0002 // // //-------------- was in 68801.H -------------------------------------- //*** 8514 EEPROM command codes ************************************* // format is 0111 1100 0000b #define EE_READ 0x0600 // read address #define EE_ERASE 0x0700 // erase address #define EE_WRITE 0x0500 // write address #define EE_ENAB 0x0980 // enable EEPROM #define EE_DISAB 0x0800 // disable EEPROM //------------------------------------------------------------------------- // REGISTER bit definitions // Configuration Status 1 (CONFIG_STATUS_1) // // #define ROM_LOCATION 0xFE00 #define SHIFT_rom_location 0x0009 #define ROM_PAGE_ENA 0x0100 #define ROM_ENA 0x0080 #define MEM_INSTALLED 0x0060 #define SHIFT_mem_installed 0x0005 #define MEM_INSTALLED_128k 0x0000 #define MEM_INSTALLED_256k 0x0020 #define MEM_INSTALLED_512k 0x0040 #define MEM_INSTALLED_1024k 0x0060 #define DRAM_ENA 0x0010 #define EEPROM_ENA 0x0008 #define MC_BUS 0x0004 #define BUS_16 0x0002 #define CLK_MODE 0x0001 // // // Configuration Status 2 (CONFIG_STATUS_2) // // // #define FLASH_ENA 0x0010 #define WRITE_PER_BIT 0x0008 #define EPROM16_ENA 0x0004 #define HIRES_BOOT 0x0002 #define SHARE_CLOCK 0x0001 //------------------------------------------------------------------------- // For the Mach32 - 68800 class of adapters, the eeprom location // is different for an 8514/Ultra in an 8 bit bus, 16 bit bus, and 68800. // #define EE_DATA_IN 0x4000 // Inputs are OK // Mach 32 values #define EE_SELECT_M32 8 #define EE_CS_M32 4 #define EE_CLK_M32 2 #define EE_DATA_OUT_M32 1 // Mach 8 values in a 16 bit bus #define EE_SELECT_M8_16 0x8000 #define EE_CS_M8_16 0x4000 #define EE_CLK_M8_16 0x2000 #define EE_DATA_OUT_M8_16 0x1000 // Mach 8 values in an 8 bit bus OR jumpered to 8 bit I/O operation #define EE_SELECT_M8_8 0x80 #define EE_CS_M8_8 0x04 #define EE_CLK_M8_8 0x02 #define EE_DATA_OUT_M8_8 0x01 //------------------------------------------------------------------------- // Context indices // #define PATT_COLOR_INDEX 0 #define PATT_MONO_INDEX 16 #define PATT_INDEX_INDEX 19 #define DP_CONFIG_INDEX 27 #define LINEDRAW_OPTION_INDEX 26 //********************** end of AMACH.H ****************************