Home | History | Annotate | Line # | Download | only in dev
grf_cvreg.h revision 1.1
      1  1.1  chopps /*
      2  1.1  chopps  * Copyright (c) 1995 Michael Teske
      3  1.1  chopps  * All rights reserved.
      4  1.1  chopps  *
      5  1.1  chopps  * Redistribution and use in source and binary forms, with or without
      6  1.1  chopps  * modification, are permitted provided that the following conditions
      7  1.1  chopps  * are met:
      8  1.1  chopps  * 1. Redistributions of source code must retain the above copyright
      9  1.1  chopps  *    notice, this list of conditions and the following disclaimer.
     10  1.1  chopps  * 2. Redistributions in binary form must reproduce the above copyright
     11  1.1  chopps  *    notice, this list of conditions and the following disclaimer in the
     12  1.1  chopps  *    documentation and/or other materials provided with the distribution.
     13  1.1  chopps  * 3. All advertising materials mentioning features or use of this software
     14  1.1  chopps  *    must display the following acknowledgement:
     15  1.1  chopps  *      This product includes software developed by Ezra Story, by Kari
     16  1.1  chopps  *      Mettinen and by Bernd Ernesti.
     17  1.1  chopps  * 4. The name of the author may not be used to endorse or promote products
     18  1.1  chopps  *    derived from this software without specific prior written permission
     19  1.1  chopps  *
     20  1.1  chopps  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     21  1.1  chopps  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     22  1.1  chopps  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     23  1.1  chopps  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     24  1.1  chopps  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     25  1.1  chopps  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     26  1.1  chopps  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     27  1.1  chopps  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     28  1.1  chopps  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     29  1.1  chopps  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  1.1  chopps  */
     31  1.1  chopps 
     32  1.1  chopps #ifndef _GRF_CVREG_H
     33  1.1  chopps #define _GRF_CVREG_H
     34  1.1  chopps 
     35  1.1  chopps /*
     36  1.1  chopps  * This is derived from ciruss driver source
     37  1.1  chopps  */
     38  1.1  chopps 
     39  1.1  chopps /* Extension to grfvideo_mode to support text modes.
     40  1.1  chopps  * This can be passed to both text & gfx functions
     41  1.1  chopps  * without worry.  If gv.depth == 4, then the extended
     42  1.1  chopps  * fields for a text mode are present.
     43  1.1  chopps  */
     44  1.1  chopps 
     45  1.1  chopps struct grfcvtext_mode {
     46  1.1  chopps 	struct grfvideo_mode gv;
     47  1.1  chopps 	unsigned short	fx;	/* font x dimension */
     48  1.1  chopps 	unsigned short	fy;	/* font y dimension */
     49  1.1  chopps 	unsigned short	cols;	/* screen dimensions */
     50  1.1  chopps 	unsigned short	rows;
     51  1.1  chopps 	void		*fdata;	/* font data */
     52  1.1  chopps 	unsigned short	fdstart;
     53  1.1  chopps 	unsigned short	fdend;
     54  1.1  chopps };
     55  1.1  chopps 
     56  1.1  chopps 
     57  1.1  chopps /* read VGA register */
     58  1.1  chopps #define vgar(ba, reg) (*(((volatile unsigned char *)ba)+reg))
     59  1.1  chopps 
     60  1.1  chopps /* write VGA register */
     61  1.1  chopps #define vgaw(ba, reg, val) \
     62  1.1  chopps 	*(((volatile unsigned char *)ba)+reg) = ((val) & 0xff)
     63  1.1  chopps 
     64  1.1  chopps /*
     65  1.1  chopps  * defines for the used register addresses (mw)
     66  1.1  chopps  *
     67  1.1  chopps  * NOTE: there are some registers that have different addresses when
     68  1.1  chopps  *       in mono or color mode. We only support color mode, and thus
     69  1.1  chopps  *       some addresses won't work in mono-mode!
     70  1.1  chopps  *
     71  1.1  chopps  * General and VGA-registers taken from retina driver. Fixed a few
     72  1.1  chopps  * bugs in it. (SR and GR read address is Port + 1, NOT Port)
     73  1.1  chopps  *
     74  1.1  chopps  */
     75  1.1  chopps 
     76  1.1  chopps /* General Registers: */
     77  1.1  chopps #define GREG_MISC_OUTPUT_R	0x03CC
     78  1.1  chopps #define GREG_MISC_OUTPUT_W	0x03C2
     79  1.1  chopps #define GREG_FEATURE_CONTROL_R	0x03CA
     80  1.1  chopps #define GREG_FEATURE_CONTROL_W	0x03DA
     81  1.1  chopps #define GREG_INPUT_STATUS0_R	0x03C2
     82  1.1  chopps #define GREG_INPUT_STATUS1_R	0x03DA
     83  1.1  chopps 
     84  1.1  chopps /* Setup Registers: */
     85  1.1  chopps #define SREG_OPTION_SELECT	0x0102
     86  1.1  chopps #define SREG_VIDEO_SUBS_ENABLE	0x46E8
     87  1.1  chopps 
     88  1.1  chopps /* Attribute Controller: */
     89  1.1  chopps #define ACT_ADDRESS		0x03C0
     90  1.1  chopps #define ACT_ADDRESS_R		0x03C1
     91  1.1  chopps #define ACT_ADDRESS_W		0x03C0
     92  1.1  chopps #define ACT_ADDRESS_RESET	0x03DA
     93  1.1  chopps #define ACT_ID_PALETTE0		0x00
     94  1.1  chopps #define ACT_ID_PALETTE1		0x01
     95  1.1  chopps #define ACT_ID_PALETTE2		0x02
     96  1.1  chopps #define ACT_ID_PALETTE3		0x03
     97  1.1  chopps #define ACT_ID_PALETTE4		0x04
     98  1.1  chopps #define ACT_ID_PALETTE5		0x05
     99  1.1  chopps #define ACT_ID_PALETTE6		0x06
    100  1.1  chopps #define ACT_ID_PALETTE7		0x07
    101  1.1  chopps #define ACT_ID_PALETTE8		0x08
    102  1.1  chopps #define ACT_ID_PALETTE9		0x09
    103  1.1  chopps #define ACT_ID_PALETTE10	0x0A
    104  1.1  chopps #define ACT_ID_PALETTE11	0x0B
    105  1.1  chopps #define ACT_ID_PALETTE12	0x0C
    106  1.1  chopps #define ACT_ID_PALETTE13	0x0D
    107  1.1  chopps #define ACT_ID_PALETTE14	0x0E
    108  1.1  chopps #define ACT_ID_PALETTE15	0x0F
    109  1.1  chopps #define ACT_ID_ATTR_MODE_CNTL	0x10
    110  1.1  chopps #define ACT_ID_OVERSCAN_COLOR	0x11
    111  1.1  chopps #define ACT_ID_COLOR_PLANE_ENA	0x12
    112  1.1  chopps #define ACT_ID_HOR_PEL_PANNING	0x13
    113  1.1  chopps #define ACT_ID_COLOR_SELECT	0x14
    114  1.1  chopps 
    115  1.1  chopps /* Graphics Controller: */
    116  1.1  chopps #define GCT_ADDRESS		0x03CE
    117  1.1  chopps #define GCT_ADDRESS_R		0x03CF
    118  1.1  chopps #define GCT_ADDRESS_W		0x03CF
    119  1.1  chopps #define GCT_ID_SET_RESET	0x00
    120  1.1  chopps #define GCT_ID_ENABLE_SET_RESET	0x01
    121  1.1  chopps #define GCT_ID_COLOR_COMPARE	0x02
    122  1.1  chopps #define GCT_ID_DATA_ROTATE	0x03
    123  1.1  chopps #define GCT_ID_READ_MAP_SELECT	0x04
    124  1.1  chopps #define GCT_ID_GRAPHICS_MODE	0x05
    125  1.1  chopps #define GCT_ID_MISC		0x06
    126  1.1  chopps #define GCT_ID_COLOR_XCARE	0x07
    127  1.1  chopps #define GCT_ID_BITMASK		0x08
    128  1.1  chopps 
    129  1.1  chopps /* Sequencer: */
    130  1.1  chopps #define SEQ_ADDRESS		0x03C4
    131  1.1  chopps #define SEQ_ADDRESS_R		0x03C5
    132  1.1  chopps #define SEQ_ADDRESS_W		0x03C5
    133  1.1  chopps #define SEQ_ID_RESET		0x00
    134  1.1  chopps #define SEQ_ID_CLOCKING_MODE	0x01
    135  1.1  chopps #define SEQ_ID_MAP_MASK		0x02
    136  1.1  chopps #define SEQ_ID_CHAR_MAP_SELECT	0x03
    137  1.1  chopps #define SEQ_ID_MEMORY_MODE	0x04
    138  1.1  chopps #define SEQ_ID_UNKNOWN1		0x05
    139  1.1  chopps #define SEQ_ID_UNKNOWN2		0x06
    140  1.1  chopps #define SEQ_ID_UNKNOWN3		0x07
    141  1.1  chopps /* S3 extensions */
    142  1.1  chopps #define SEQ_ID_UNLOCK_EXT	0x08
    143  1.1  chopps #define SEQ_ID_EXT_SEQ_REG9	0x09
    144  1.1  chopps #define SEQ_ID_BUS_REQ_CNTL	0x0A
    145  1.1  chopps #define SEQ_ID_EXT_MISC_SEQ	0x0B
    146  1.1  chopps #define SEQ_ID_UNKNOWN4		0x0C
    147  1.1  chopps #define SEQ_ID_EXT_SEQ		0x0D
    148  1.1  chopps #define SEQ_ID_UNKNOWN5		0x0E
    149  1.1  chopps #define SEQ_ID_UNKNOWN6		0x0F
    150  1.1  chopps #define SEQ_ID_MCLK_LO		0x10
    151  1.1  chopps #define SEQ_ID_MCLK_HI		0x11
    152  1.1  chopps #define SEQ_ID_DCLK_LO		0x12
    153  1.1  chopps #define SEQ_ID_DCLK_HI		0x13
    154  1.1  chopps #define SEQ_ID_CLKSYN_CNTL_1	0x14
    155  1.1  chopps #define SEQ_ID_CLKSYN_CNTL_2	0x15
    156  1.1  chopps #define SEQ_ID_CLKSYN_TEST_HI	0x16	/* reserved for S3 testing of the */
    157  1.1  chopps #define SEQ_ID_CLKSYN_TEST_LO	0x17	/*   internal clock synthesizer   */
    158  1.1  chopps #define SEQ_ID_RAMDAC_CNTL	0x18
    159  1.1  chopps 
    160  1.1  chopps /* CRT Controller: */
    161  1.1  chopps #define CRT_ADDRESS		0x03D4
    162  1.1  chopps #define CRT_ADDRESS_R		0x03D5
    163  1.1  chopps #define CRT_ADDRESS_W		0x03D5
    164  1.1  chopps #define CRT_ID_HOR_TOTAL	0x00
    165  1.1  chopps #define CRT_ID_HOR_DISP_ENA_END	0x01
    166  1.1  chopps #define CRT_ID_START_HOR_BLANK	0x02
    167  1.1  chopps #define CRT_ID_END_HOR_BLANK	0x03
    168  1.1  chopps #define CRT_ID_START_HOR_RETR	0x04
    169  1.1  chopps #define CRT_ID_END_HOR_RETR	0x05
    170  1.1  chopps #define CRT_ID_VER_TOTAL	0x06
    171  1.1  chopps #define CRT_ID_OVERFLOW		0x07
    172  1.1  chopps #define CRT_ID_PRESET_ROW_SCAN	0x08
    173  1.1  chopps #define CRT_ID_MAX_SCAN_LINE	0x09
    174  1.1  chopps #define CRT_ID_CURSOR_START	0x0A
    175  1.1  chopps #define CRT_ID_CURSOR_END	0x0B
    176  1.1  chopps #define CRT_ID_START_ADDR_HIGH	0x0C
    177  1.1  chopps #define CRT_ID_START_ADDR_LOW	0x0D
    178  1.1  chopps #define CRT_ID_CURSOR_LOC_HIGH	0x0E
    179  1.1  chopps #define CRT_ID_CURSOR_LOC_LOW	0x0F
    180  1.1  chopps #define CRT_ID_START_VER_RETR	0x10
    181  1.1  chopps #define CRT_ID_END_VER_RETR	0x11
    182  1.1  chopps #define CRT_ID_VER_DISP_ENA_END	0x12
    183  1.1  chopps #define CRT_ID_SCREEN_OFFSET	0x13
    184  1.1  chopps #define CRT_ID_UNDERLINE_LOC	0x14
    185  1.1  chopps #define CRT_ID_START_VER_BLANK	0x15
    186  1.1  chopps #define CRT_ID_END_VER_BLANK	0x16
    187  1.1  chopps #define CRT_ID_MODE_CONTROL	0x17
    188  1.1  chopps #define CRT_ID_LINE_COMPARE	0x18
    189  1.1  chopps #define CRT_ID_GD_LATCH_RBACK	0x22
    190  1.1  chopps #define CRT_ID_ACT_TOGGLE_RBACK	0x24
    191  1.1  chopps #define CRT_ID_ACT_INDEX_RBACK	0x26
    192  1.1  chopps /* S3 extensions: S3 VGA Registers */
    193  1.1  chopps #define CRT_ID_DEVICE_HIGH	0x2D
    194  1.1  chopps #define CRT_ID_DEVICE_LOW	0x2E
    195  1.1  chopps #define CRT_ID_REVISION 	0x2F
    196  1.1  chopps #define CRT_ID_CHIP_ID_REV	0x30
    197  1.1  chopps #define CRT_ID_MEMORY_CONF	0x31
    198  1.1  chopps #define CRT_ID_BACKWAD_COMP_1	0x32
    199  1.1  chopps #define CRT_ID_BACKWAD_COMP_2	0x33
    200  1.1  chopps #define CRT_ID_BACKWAD_COMP_3	0x34
    201  1.1  chopps #define CRT_ID_REGISTER_LOCK	0x35
    202  1.1  chopps #define CRT_ID_CONFIG_1 	0x36
    203  1.1  chopps #define CRT_ID_CONFIG_2 	0x37
    204  1.1  chopps #define CRT_ID_REGISTER_LOCK_1	0x38
    205  1.1  chopps #define CRT_ID_REGISTER_LOCK_2	0x39
    206  1.1  chopps #define CRT_ID_MISC_1		0x3A
    207  1.1  chopps #define CRT_ID_DISPLAY_FIFO	0x3B
    208  1.1  chopps #define CRT_ID_LACE_RETR_START	0x3C
    209  1.1  chopps /* S3 extensions: System Control Registers  */
    210  1.1  chopps #define CRT_ID_SYSTEM_CONFIG	0x40
    211  1.1  chopps #define CRT_ID_BIOS_FLAG	0x41
    212  1.1  chopps #define CRT_ID_LACE_CONTROL	0x42
    213  1.1  chopps #define CRT_ID_EXT_MODE 	0x43
    214  1.1  chopps #define CRT_ID_HWGC_MODE	0x45	/* HWGC = Hardware Graphics Cursor */
    215  1.1  chopps #define CRT_ID_HWGC_ORIGIN_X_HI	0x46
    216  1.1  chopps #define CRT_ID_HWGC_ORIGIN_X_LO	0x47
    217  1.1  chopps #define CRT_ID_HWGC_ORIGIN_Y_HI	0x48
    218  1.1  chopps #define CRT_ID_HWGC_ORIGIN_Y_LO	0x49
    219  1.1  chopps #define CRT_ID_HWGC_FG_STACK	0x4A
    220  1.1  chopps #define CRT_ID_HWGC_BG_STACK	0x4B
    221  1.1  chopps #define CRT_ID_HWGC_START_AD_HI	0x4C
    222  1.1  chopps #define CRT_ID_HWGC_START_AD_LO	0x4D
    223  1.1  chopps #define CRT_ID_HWGC_DSTART_X	0x4E
    224  1.1  chopps #define CRT_ID_HWGC_DSTART_Y	0x4F
    225  1.1  chopps /* S3 extensions: System Extension Registers  */
    226  1.1  chopps #define CRT_ID_EXT_SYS_CNTL_1	0x50
    227  1.1  chopps #define CRT_ID_EXT_SYS_CNTL_2	0x51
    228  1.1  chopps #define CRT_ID_EXT_BIOS_FLAG_1	0x52
    229  1.1  chopps #define CRT_ID_EXT_MEM_CNTL_1	0x53
    230  1.1  chopps #define CRT_ID_EXT_MEM_CNTL_2	0x54
    231  1.1  chopps #define CRT_ID_EXT_DAC_CNTL	0x55
    232  1.1  chopps #define CRT_ID_EX_SYNC_1	0x56
    233  1.1  chopps #define CRT_ID_EX_SYNC_2	0x57
    234  1.1  chopps #define CRT_ID_LAW_CNTL		0x58	/* LAW = Linear Address Window */
    235  1.1  chopps #define CRT_ID_LAW_POS_HI	0x59
    236  1.1  chopps #define CRT_ID_LAW_POS_LO	0x5A
    237  1.1  chopps #define CRT_ID_GOUT_PORT	0x5C
    238  1.1  chopps #define CRT_ID_EXT_HOR_OVF	0x5D
    239  1.1  chopps #define CRT_ID_EXT_VER_OVF	0x5E
    240  1.1  chopps #define CRT_ID_EXT_MEM_CNTL_3	0x60
    241  1.1  chopps #define CRT_ID_EX_SYNC_3	0x63
    242  1.1  chopps #define CRT_ID_EXT_MISC_CNTL	0x65
    243  1.1  chopps #define CRT_ID_EXT_MISC_CNTL_1	0x66
    244  1.1  chopps #define CRT_ID_EXT_MISC_CNTL_2	0x67
    245  1.1  chopps #define CRT_ID_CONFIG_3 	0x68
    246  1.1  chopps #define CRT_ID_EXT_SYS_CNTL_3	0x69
    247  1.1  chopps #define CRT_ID_EXT_SYS_CNTL_4	0x6A
    248  1.1  chopps #define CRT_ID_EXT_BIOS_FLAG_3	0x6B
    249  1.1  chopps #define CRT_ID_EXT_BIOS_FLAG_4	0x6C
    250  1.1  chopps 
    251  1.1  chopps /* Enhanced Commands Registers: */
    252  1.1  chopps #define ECR_SUBSYSTEM_STAT	0x42E8
    253  1.1  chopps #define ECR_SUBSYSTEM_CNTL	0x42E8
    254  1.1  chopps #define ECR_ADV_FUNC_CNTL	0x4AE8
    255  1.1  chopps #define ECR_CURRENT_Y_POS	0x82E8
    256  1.1  chopps #define ECR_CURRENT_Y_POS2	0x82EA	/* Trio64 only */
    257  1.1  chopps #define ECR_CURRENT_X_POS	0x86E8
    258  1.1  chopps #define ECR_CURRENT_X_POS2	0x86EA	/* Trio64 only */
    259  1.1  chopps #define ECR_DEST_Y__AX_STEP	0x8AE8
    260  1.1  chopps #define ECR_DEST_Y2__AX_STEP2	0x8AEA	/* Trio64 only */
    261  1.1  chopps #define ECR_DEST_X__DIA_STEP	0x8EE8
    262  1.1  chopps #define ECR_DEST_X2__DIA_STEP2	0x8EEA	/* Trio64 only */
    263  1.1  chopps #define ECR_ERR_TERM		0x92E8
    264  1.1  chopps #define ECR_ERR_TERM2		0x92EA	/* Trio64 only */
    265  1.1  chopps #define ECR_MAJ_AXIS_PIX_CNT	0x96E8
    266  1.1  chopps #define ECR_MAJ_AXIS_PIX_CNT2	0x96EA	/* Trio64 only */
    267  1.1  chopps #define ECR_GP_STAT		0x9AE8	/* GP = Graphics Processor */
    268  1.1  chopps #define ECR_DRAW_CMD		0x9AE8
    269  1.1  chopps #define ECR_DRAW_CMD2		0x9AEA	/* Trio64 only */
    270  1.1  chopps #define ECR_SHORT_STROKE	0x9EE8
    271  1.1  chopps #define ECR_BKGD_COLOR		0xA2E8	/* BKGD = Background */
    272  1.1  chopps #define ECR_FRGD_COLOR		0xA6E8	/* FRGD = Foreground */
    273  1.1  chopps #define ECR_BITPLANE_WRITE_MASK	0xAAE8
    274  1.1  chopps #define ECR_BITPLANE_READ_MASK	0xAEE8
    275  1.1  chopps #define ECR_COLOR_COMPARE	0xB2E8
    276  1.1  chopps #define ECR_BKGD_MIX		0xB6E8
    277  1.1  chopps #define ECR_FRGD_MIX		0xBAE8
    278  1.1  chopps #define ECR_READ_REG_DATA	0xBEE8
    279  1.1  chopps #define ECR_ID_MIN_AXIS_PIX_CNT	0x00
    280  1.1  chopps #define ECR_ID_SCISSORS_TOP	0x01
    281  1.1  chopps #define ECR_ID_SCISSORS_LEFT	0x02
    282  1.1  chopps #define ECR_ID_SCISSORS_BUTTOM	0x03
    283  1.1  chopps #define ECR_ID_SCISSORS_RIGHT	0x04
    284  1.1  chopps #define ECR_ID_PIX_CNTL		0x0A
    285  1.1  chopps #define ECR_ID_MULT_CNTL_MISC_2	0x0D
    286  1.1  chopps #define ECR_ID_MULT_CNTL_MISC	0x0E
    287  1.1  chopps #define ECR_ID_READ_SEL		0x0F
    288  1.1  chopps #define ECR_PIX_TRANS		0xE2E8
    289  1.1  chopps #define ECR_PIX_TRANS_EXT	0xE2EA
    290  1.1  chopps #define ECR_PATTERN_Y		0xEAE8	/* Trio64 only */
    291  1.1  chopps #define ECR_PATTERN_X		0xEAEA	/* Trio64 only */
    292  1.1  chopps 
    293  1.1  chopps 
    294  1.1  chopps /* Pass-through */
    295  1.1  chopps #define PASS_ADDRESS		0x40001
    296  1.1  chopps #define PASS_ADDRESS_W		0x40001
    297  1.1  chopps 
    298  1.1  chopps /* Video DAC */
    299  1.1  chopps #define VDAC_ADDRESS		0x03c8
    300  1.1  chopps #define VDAC_ADDRESS_W		0x03c8
    301  1.1  chopps #define VDAC_ADDRESS_R		0x03c7
    302  1.1  chopps #define VDAC_STATE		0x03c7
    303  1.1  chopps #define VDAC_DATA		0x03c9
    304  1.1  chopps #define VDAC_MASK		0x03c6
    305  1.1  chopps 
    306  1.1  chopps 
    307  1.1  chopps #define WGfx(ba, idx, val) \
    308  1.1  chopps 	do { vgaw(ba, GCT_ADDRESS, idx); vgaw(ba, GCT_ADDRESS_W , val); } while (0)
    309  1.1  chopps 
    310  1.1  chopps #define WSeq(ba, idx, val) \
    311  1.1  chopps 	do { vgaw(ba, SEQ_ADDRESS, idx); vgaw(ba, SEQ_ADDRESS_W , val); } while (0)
    312  1.1  chopps 
    313  1.1  chopps #define WCrt(ba, idx, val) \
    314  1.1  chopps 	do { vgaw(ba, CRT_ADDRESS, idx); vgaw(ba, CRT_ADDRESS_W , val); } while (0)
    315  1.1  chopps 
    316  1.1  chopps #define WAttr(ba, idx, val) \
    317  1.1  chopps 	do {	\
    318  1.1  chopps 		unsigned char tmp;\
    319  1.1  chopps 		tmp = vgar(ba, ACT_ADDRESS_RESET);\
    320  1.1  chopps 		vgaw(ba, ACT_ADDRESS_W, idx);\
    321  1.1  chopps 		vgaw(ba, ACT_ADDRESS_W, val);\
    322  1.1  chopps 	} while (0)
    323  1.1  chopps 
    324  1.1  chopps 
    325  1.1  chopps #define SetTextPlane(ba, m) \
    326  1.1  chopps 	do { \
    327  1.1  chopps 		WGfx(ba, GCT_ID_READ_MAP_SELECT, m & 3 );\
    328  1.1  chopps 		WSeq(ba, SEQ_ID_MAP_MASK, (1 << (m & 3)));\
    329  1.1  chopps 	} while (0)
    330  1.1  chopps 
    331  1.1  chopps /* Special wakeup/passthrough registers on graphics boards
    332  1.1  chopps  *
    333  1.1  chopps  * The methods have diverged a bit for each board, so
    334  1.1  chopps  * WPass(P) has been converted into a set of specific
    335  1.1  chopps  * inline functions.
    336  1.1  chopps  */
    337  1.1  chopps 
    338  1.1  chopps static inline unsigned char
    339  1.1  chopps RAttr(ba, idx)
    340  1.1  chopps 	volatile void *ba;
    341  1.1  chopps 	short idx;
    342  1.1  chopps {
    343  1.1  chopps 
    344  1.1  chopps 	vgaw(ba, ACT_ADDRESS_W, idx);
    345  1.1  chopps 	delay(0);
    346  1.1  chopps 	return vgar(ba, ACT_ADDRESS_R);
    347  1.1  chopps }
    348  1.1  chopps 
    349  1.1  chopps static inline unsigned char
    350  1.1  chopps RSeq(ba, idx)
    351  1.1  chopps 	volatile void *ba;
    352  1.1  chopps 	short idx;
    353  1.1  chopps {
    354  1.1  chopps 	vgaw(ba, SEQ_ADDRESS, idx);
    355  1.1  chopps 	return vgar(ba, SEQ_ADDRESS_R);
    356  1.1  chopps }
    357  1.1  chopps 
    358  1.1  chopps static inline unsigned char
    359  1.1  chopps RCrt(ba, idx)
    360  1.1  chopps 	volatile void *ba;
    361  1.1  chopps 	short idx;
    362  1.1  chopps {
    363  1.1  chopps 	vgaw(ba, CRT_ADDRESS, idx);
    364  1.1  chopps 	return vgar(ba, CRT_ADDRESS_R);
    365  1.1  chopps }
    366  1.1  chopps 
    367  1.1  chopps static inline unsigned char
    368  1.1  chopps RGfx(ba, idx)
    369  1.1  chopps 	volatile void *ba;
    370  1.1  chopps 	short idx;
    371  1.1  chopps {
    372  1.1  chopps 	vgaw(ba, GCT_ADDRESS, idx);
    373  1.1  chopps 	return vgar(ba, GCT_ADDRESS_R);
    374  1.1  chopps }
    375  1.1  chopps 
    376  1.1  chopps 
    377  1.1  chopps static inline void
    378  1.1  chopps cv_write_port(bits, BoardAddr)
    379  1.1  chopps 	unsigned short bits;
    380  1.1  chopps 	volatile unsigned char *BoardAddr;
    381  1.1  chopps {
    382  1.1  chopps 	volatile char *addr;
    383  1.1  chopps 	static unsigned char CVPortBits=0;	/* mirror port bits here */
    384  1.1  chopps 
    385  1.1  chopps 	addr = BoardAddr + 0x40001;
    386  1.1  chopps 	if (bits & 0x8000)
    387  1.1  chopps 		CVPortBits |= bits&0xFF;	/* Set bits */
    388  1.1  chopps 	else {
    389  1.1  chopps 		bits = bits & 0xFF;
    390  1.1  chopps 		bits = (~bits) & 0xFF ;
    391  1.1  chopps 		CVPortBits &= bits;	/* Clear bits */
    392  1.1  chopps 	}
    393  1.1  chopps 
    394  1.1  chopps 	*addr = CVPortBits;
    395  1.1  chopps }
    396  1.1  chopps 
    397  1.1  chopps #define set_port_bits(b, ba) cv_write_port((unsigned short )b | 0x8000,ba)
    398  1.1  chopps #define clear_port_bits(b, ba) cv_write_port((unsigned short )b & 0xff,ba)
    399  1.1  chopps 
    400  1.1  chopps 
    401  1.1  chopps /*
    402  1.1  chopps  *  Monitor Switch
    403  1.1  chopps  *  0 = CyberVision Signal
    404  1.1  chopps  *  1 = Amiga Signal,
    405  1.1  chopps  * ba = boardaddr
    406  1.1  chopps  */
    407  1.1  chopps 
    408  1.1  chopps static inline void
    409  1.1  chopps cvscreen(toggle, ba)
    410  1.1  chopps 	char toggle;
    411  1.1  chopps 	volatile unsigned char *ba;
    412  1.1  chopps {
    413  1.1  chopps 
    414  1.1  chopps 	if (toggle)
    415  1.1  chopps 		cv_write_port (0x10, ba);
    416  1.1  chopps 	else
    417  1.1  chopps 		cv_write_port (0x8010, ba);
    418  1.1  chopps }
    419  1.1  chopps 
    420  1.1  chopps /* 0 = on, 1= off */
    421  1.1  chopps /* ba= registerbase */
    422  1.1  chopps static inline void
    423  1.1  chopps gfx_on_off(toggle, ba)
    424  1.1  chopps 	char toggle;
    425  1.1  chopps 	volatile unsigned char *ba;
    426  1.1  chopps {
    427  1.1  chopps 	unsigned char r;
    428  1.1  chopps 
    429  1.1  chopps 	toggle &= 0x1;
    430  1.1  chopps 	toggle = toggle << 5;
    431  1.1  chopps 
    432  1.1  chopps 	r = RSeq(ba, 0x1);
    433  1.1  chopps 	r &= 0xDF; /* Bit 5 auf 0!!! */
    434  1.1  chopps 	WSeq(ba, 1, r | toggle);
    435  1.1  chopps }
    436  1.1  chopps 
    437  1.1  chopps int cv_mode __P((register struct grf_softc *gp, int cmd, void *arg, int a2, int a3));
    438  1.1  chopps int cv_load_mon __P((struct grf_softc *gp, struct grfcvtext_mode *gv));
    439  1.1  chopps int grfcv_cnprobe __P((void));
    440  1.1  chopps #if 0
    441  1.1  chopps void grfcv_iteinit __P((struct grf_softc *gp));
    442  1.1  chopps #endif
    443  1.1  chopps 
    444  1.1  chopps static unsigned char clocks[]={
    445  1.1  chopps 0x13, 0x61, 0x6b, 0x6d, 0x51, 0x69, 0x54, 0x69,
    446  1.1  chopps 0x4f, 0x68, 0x6b, 0x6b, 0x18, 0x61, 0x7b, 0x6c,
    447  1.1  chopps 0x51, 0x67, 0x24, 0x62, 0x56, 0x67, 0x77, 0x6a,
    448  1.1  chopps 0x1d, 0x61, 0x53, 0x66, 0x6b, 0x68, 0x79, 0x69,
    449  1.1  chopps 0x7c, 0x69, 0x7f, 0x69, 0x22, 0x61, 0x54, 0x65,
    450  1.1  chopps 0x56, 0x65, 0x58, 0x65, 0x67, 0x66, 0x41, 0x63,
    451  1.1  chopps 0x27, 0x61, 0x13, 0x41, 0x37, 0x62, 0x6b, 0x4d,
    452  1.1  chopps 0x23, 0x43, 0x51, 0x49, 0x79, 0x66, 0x54, 0x49,
    453  1.1  chopps 0x7d, 0x66, 0x34, 0x56, 0x4f, 0x63, 0x1f, 0x42,
    454  1.1  chopps 0x6b, 0x4b, 0x7e, 0x4d, 0x18, 0x41, 0x2a, 0x43,
    455  1.1  chopps 0x7b, 0x4c, 0x74, 0x4b, 0x51, 0x47, 0x65, 0x49,
    456  1.1  chopps 0x24, 0x42, 0x68, 0x49, 0x56, 0x47, 0x75, 0x4a,
    457  1.1  chopps 0x77, 0x4a, 0x31, 0x43, 0x1d, 0x41, 0x71, 0x49,
    458  1.1  chopps 0x53, 0x46, 0x29, 0x42, 0x6b, 0x48, 0x1f, 0x41,
    459  1.1  chopps 0x79, 0x49, 0x6f, 0x48, 0x7c, 0x49, 0x38, 0x43,
    460  1.1  chopps 0x7f, 0x49, 0x5d, 0x46, 0x22, 0x41, 0x53, 0x45,
    461  1.1  chopps 0x54, 0x45, 0x55, 0x45, 0x56, 0x45, 0x57, 0x45,
    462  1.1  chopps 0x58, 0x45, 0x25, 0x41, 0x67, 0x46, 0x5b, 0x45,
    463  1.1  chopps 0x41, 0x43, 0x78, 0x47, 0x27, 0x41, 0x51, 0x44,
    464  1.1  chopps 0x13, 0x21, 0x7d, 0x47, 0x37, 0x42, 0x71, 0x46,
    465  1.1  chopps 0x6b, 0x2d, 0x14, 0x21, 0x23, 0x23, 0x7d, 0x2f,
    466  1.1  chopps 0x51, 0x29, 0x61, 0x2b, 0x79, 0x46, 0x1d, 0x22,
    467  1.1  chopps 0x54, 0x29, 0x45, 0x27, 0x7d, 0x46, 0x7f, 0x46,
    468  1.1  chopps 0x4f, 0x43, 0x2f, 0x41, 0x1f, 0x22, 0x6a, 0x2b,
    469  1.1  chopps 0x6b, 0x2b, 0x5b, 0x29, 0x7e, 0x2d, 0x65, 0x44,
    470  1.1  chopps 0x18, 0x21, 0x5e, 0x29, 0x2a, 0x23, 0x45, 0x26,
    471  1.1  chopps 0x7b, 0x2c, 0x19, 0x21, 0x74, 0x2b, 0x75, 0x2b,
    472  1.1  chopps 0x51, 0x27, 0x3f, 0x25, 0x65, 0x29, 0x40, 0x25,
    473  1.1  chopps 0x24, 0x22, 0x41, 0x25, 0x68, 0x29, 0x42, 0x25,
    474  1.1  chopps 0x56, 0x27, 0x7e, 0x2b, 0x75, 0x2a, 0x1c, 0x21,
    475  1.1  chopps 0x77, 0x2a, 0x4f, 0x26, 0x31, 0x23, 0x6f, 0x29,
    476  1.1  chopps 0x1d, 0x21, 0x32, 0x23, 0x71, 0x29, 0x72, 0x29,
    477  1.1  chopps 0x53, 0x26, 0x69, 0x28, 0x29, 0x22, 0x75, 0x29,
    478  1.1  chopps 0x6b, 0x28, 0x1f, 0x21, 0x1f, 0x21, 0x6d, 0x28,
    479  1.1  chopps 0x79, 0x29, 0x2b, 0x22, 0x6f, 0x28, 0x59, 0x26,
    480  1.1  chopps 0x7c, 0x29, 0x7d, 0x29, 0x38, 0x23, 0x21, 0x21,
    481  1.1  chopps 0x7f, 0x29, 0x39, 0x23, 0x5d, 0x26, 0x75, 0x28,
    482  1.1  chopps 0x22, 0x21, 0x77, 0x28, 0x53, 0x25, 0x6c, 0x27,
    483  1.1  chopps 0x54, 0x25, 0x61, 0x26, 0x55, 0x25, 0x30, 0x22,
    484  1.1  chopps 0x56, 0x25, 0x63, 0x26, 0x57, 0x25, 0x71, 0x27,
    485  1.1  chopps 0x58, 0x25, 0x7f, 0x28, 0x25, 0x21, 0x74, 0x27,
    486  1.1  chopps 0x67, 0x26, 0x40, 0x23, 0x5b, 0x25, 0x26, 0x21,
    487  1.1  chopps 0x41, 0x23, 0x34, 0x22, 0x78, 0x27, 0x6b, 0x26,
    488  1.1  chopps 0x27, 0x21, 0x35, 0x22, 0x51, 0x24, 0x7b, 0x27,
    489  1.1  chopps 0x13, 0x1,  0x13, 0x1,  0x7d, 0x27, 0x4c, 0x9,
    490  1.1  chopps 0x37, 0x22, 0x5b, 0xb,  0x71, 0x26, 0x5c, 0xb,
    491  1.1  chopps 0x6b, 0xd,  0x47, 0x23, 0x14, 0x1,  0x4f, 0x9,
    492  1.1  chopps 0x23, 0x3,  0x75, 0x26, 0x7d, 0xf,  0x1c, 0x2,
    493  1.1  chopps 0x51, 0x9,  0x59, 0x24, 0x61, 0xb,  0x69, 0x25,
    494  1.1  chopps 0x79, 0x26, 0x34, 0x5,  0x1d, 0x2,  0x6b, 0x25,
    495  1.1  chopps 0x54, 0x9,  0x35, 0x5,  0x45, 0x7,  0x6d, 0x25,
    496  1.1  chopps 0x7d, 0x26, 0x16, 0x1,  0x7f, 0x26, 0x77, 0xd,
    497  1.1  chopps 0x4f, 0x23, 0x78, 0xd,  0x2f, 0x21, 0x27, 0x3,
    498  1.1  chopps 0x1f, 0x2,  0x59, 0x9,  0x6a, 0xb,  0x73, 0x25,
    499  1.1  chopps 0x6b, 0xb,  0x63, 0x24, 0x5b, 0x9,  0x20, 0x2,
    500  1.1  chopps 0x7e, 0xd,  0x4b, 0x7,  0x65, 0x24, 0x43, 0x22,
    501  1.1  chopps 0x18, 0x1,  0x6f, 0xb,  0x5e, 0x9,  0x70, 0xb,
    502  1.1  chopps 0x2a, 0x3,  0x33, 0x4,  0x45, 0x6,  0x60, 0x9,
    503  1.1  chopps 0x7b, 0xc,  0x19, 0x1,  0x19, 0x1,  0x7d, 0xc,
    504  1.1  chopps 0x74, 0xb,  0x50, 0x7,  0x75, 0xb,  0x63, 0x9,
    505  1.1  chopps 0x51, 0x7,  0x23, 0x2,  0x3f, 0x5,  0x1a, 0x1,
    506  1.1  chopps 0x65, 0x9,  0x2d, 0x3,  0x40, 0x5,  0x0,  0x0,
    507  1.1  chopps };
    508  1.1  chopps 
    509  1.1  chopps #endif /* _GRF_RHREG_H */
    510  1.1  chopps 
    511