Expand PMF_FN_* macros.
[netbsd-mini2440.git] / sys / arch / amiga / dev / grf_rhreg.h
blobed08fc44d098e5dbfb96b156baae66092eeb5723
1 /* $NetBSD: grf_rhreg.h,v 1.15 2005/12/24 20:06:47 perry Exp $ */
3 /*
4 * Copyright (c) 1994 Markus Wild
5 * Copyright (c) 1994 Lutz Vieweg
6 * All rights reserved.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 * 3. All advertising materials mentioning features or use of this software
17 * must display the following acknowledgement:
18 * This product includes software developed by Lutz Vieweg.
19 * 4. The name of the author may not be used to endorse or promote products
20 * derived from this software without specific prior written permission
22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
27 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
31 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 #ifndef _GRF_RHREG_H
34 #define _GRF_RHREG_H
36 #define EMPTY_ALPHA 0x2010 /* this is the char and the attribute
37 that AlphaErase will fill into the
38 text-screen */
40 #define MEMSIZE 4 /* Set this to 1 or 4 (MB), according to the
41 RAM on your Retina BLT Z3 board */
43 * The following definitions are places in the frame-buffer memory
44 * which are used for special purposes. While the displayed screen
45 * itself is always beginning at the start of the frame-buffer
46 * memory, the following special places are located at the end
47 * of the memory to keep free as much space as possible for the
48 * screen - the user might want to use monitor-definitions with
49 * huge logical dimensions (e.g. 2048x2000 ?). This way of defining
50 * special locations in the frame-buffer memory is far from being
51 * elegant - you may want to use you own, real memory-management...
52 * but remember that some routines in RZ3_BSD.cc REALLY NEED those
53 * memory locations to function properly, so if you manage the
54 * frame-buffer memory on your own, make sure to change those
55 * definitions appropriately.
58 /* reserve some space for one pattern line */
59 #define PAT_MEM_SIZE 16*3
60 #define PAT_MEM_OFF (MEMSIZE*1024*1024 - PAT_MEM_SIZE)
62 /* reserve some space for the hardware cursor (up to 64x64 pixels) */
63 #define HWC_MEM_SIZE 1024
64 #define HWC_MEM_OFF ((PAT_MEM_OFF - HWC_MEM_SIZE) & 0xffffff00)
67 * The following structure is passed to RZ3Init() and holds the
68 * monitor-definition. You may either use one of the ready-made
69 * definitions in RZ3_monitors.cc or you can define them on your
70 * own, take a look at RZ3_monitors.cc for more information.
72 struct MonDef {
74 /* first the general monitor characteristics */
76 unsigned long FQ;
77 unsigned char FLG;
79 unsigned short MW; /* physical screen width in pixels */
80 /* has to be at least a multiple of 8 */
81 unsigned short MH; /* physical screen height in pixels */
83 unsigned short HBS;
84 unsigned short HSS;
85 unsigned short HSE;
86 unsigned short HBE;
87 unsigned short HT;
88 unsigned short VBS;
89 unsigned short VSS;
90 unsigned short VSE;
91 unsigned short VBE;
92 unsigned short VT;
94 unsigned short DEP; /* Color-depth, 4 enables text-mode */
95 /* 8 enables 256-color graphics-mode, */
96 /* 16 and 24bit gfx not supported yet */
98 unsigned char * PAL; /* points to 16*3 byte RGB-palette data */
99 /* use LoadPalette() to set colors 0..255 */
100 /* in 256-color-gfx mode */
103 * all following entries are font-specific in
104 * text-mode. Make sure your monitor
105 * parameters are calculated for the
106 * appropriate font width and height!
109 unsigned short TX; /* Text-mode (DEP=4): */
110 /* screen-width in characters */
112 /* Gfx-mode (DEP > 4) */
113 /* "logical" screen-width, */
114 /* use values > MW to allow */
115 /* hardware-panning */
117 unsigned short TY; /* Text-mode: */
118 /* screen-height in characters */
120 /* Gfx-mode: "logical" screen */
121 /* height for panning */
123 /* the following values are currently unused for gfx-mode */
125 unsigned short XY; /* TX*TY (speeds up some calcs.) */
127 unsigned short FX; /* font-width (valid values: 4,7-16) */
128 unsigned short FY; /* font-height (valid range: 1-32) */
129 unsigned char * FData; /* pointer to the font-data */
132 * The font data is simply an array of bytes defining
133 * the chars in ascending order, line by line. If your
134 * font is wider than 8 pixel, FData has to be an
135 * array of words.
138 unsigned short FLo; /* lowest character defined */
139 unsigned short FHi; /* highest char. defined */
145 * The following are the prototypes for the low-level
146 * routines you may want to call.
149 #if 0
151 #ifdef __GNUG__
153 /* The prototypes for C++, prototypes for C (with explanations) below */
155 "C" unsigned char * RZ3Init (volatile void *HardWareAddress, struct MonDef * md);
156 "C" void RZ3SetCursorPos (unsigned short pos);
157 "C" void RZ3AlphaErase (unsigned short xd, unsigned short yd,
158 unsigned short w, unsigned short h );
159 "C" void RZ3AlphaCopy (unsigned short xs, unsigned short ys,
160 unsigned short xd, unsigned short yd,
161 unsigned short w, unsigned short h );
162 "C" void RZ3BitBlit (struct grf_bitblt * gbb );
163 "C" void RZ3BitBlit16 (struct grf_bitblt * gbb );
164 "C" void RZ3LoadPalette (unsigned char * pal, unsigned char firstcol, unsigned char colors);
165 "C" void RZ3SetPalette (unsigned char colornum, unsigned char red, unsigned char green, unsigned char blue);
166 "C" void RZ3SetPanning (unsigned short xoff, unsigned short yoff);
167 "C" void RZ3SetupHWC (unsigned char col1, unsigned col2,
168 unsigned char hsx, unsigned char hsy,
169 const unsigned long * data);
170 "C" void RZ3DisableHWC (void);
171 "C" void RZ3SetHWCloc (unsigned short x, unsigned short y);
172 #else
174 /* The prototypes for C */
175 /* with a little explanation */
177 unsigned char * RZ3Init(volatile void *BoardAddress, struct MonDef * md);
180 * This routine initialises the Retina Z3 hardware, opens a
181 * text- or gfx-mode screen, depending on the value of
182 * MonDef.DEP, and sets the cursor to position 0.
183 * It takes as arguments a pointer to the hardware-base
184 * address as it is denoted in the DevConf structure
185 * of the AmigaDOS, and a pointer to a struct MonDef
186 * which describes the screen-mode parameters.
188 * The routine returns 0 if it was unable to open the screen,
189 * or an unsigned char * to the display memory when it
190 * succeeded.
192 * The organisation of the display memory in text-mode is a
193 * little strange (Intel-typically...) :
195 * Byte 00 01 02 03 04 05 06 etc.
196 * Char0 Attr0 -- -- Char1 Attr1 -- etc.
198 * You may set a character and its associated attribute byte
199 * with a single word-access, or you may perform to byte writes
200 * for the char and attribute. Each 2. word has no meaning,
201 * and writes to theese locations are ignored.
203 * The attribute byte for each character has the following
204 * structure:
206 * Bit 7 6 5 4 3 2 1 0
207 * BLINK BACK2 BACK1 BACK0 FORE3 FORE2 FORE1 FORE0
209 * Were FORE is the foreground-color index (0-15) and
210 * BACK is the background color index (0-7). BLINK
211 * enables blinking for the associated character.
212 * The higher 8 colors in the standard palette are
213 * lighter than the lower 8, so you may see FORE3 as
214 * an intensity bit. If FORE == 1 or FORE == 9 and
215 * BACK == 0 the character is underlined. Since I don't
216 * think this looks good, it will probably change in a
217 * future release.
219 * There's no routine "SetChar" or "SetAttr" provided,
220 * because I think it's so trivial... a function call
221 * would be pure overhead. As an example, a routine
222 * to set the char code and attribute at position x,y:
223 * (assumed the value returned by RZ3Init was stored
224 * into "DispMem", the actual MonDef struct * is hold
225 * in "MDef")
227 * void SetChar(unsigned char chr, unsigned char attr,
228 * unsigned short x, unsigned short y) {
230 * unsigned struct MonDef * md = MDef;
231 * unsigned char * c = DispMem + x*4 + y*md->TX*4;
233 * *c++ = chr;
234 * *c = attr;
238 * In gfx-mode, the memory organisation is rather simple,
239 * 1 byte per pixel in 256-color mode, one pixel after
240 * each other, line by line.
242 * When 16-bits per pixel are used, each two bytes represent
243 * one pixel. The meaning of the bits is the following:
245 * Bit 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
246 * Component g2 g1 g0 b4 b3 b2 b1 b0 r4 r3 r2 r1 r0 g5 g4 g3
248 * Please note that the memory layout in gfx-mode depends
249 * on the logical screen-size, panning does only affect
250 * the appearance of the physical screen.
252 * Currently, RZ3Init() disables the Retina Z3 VBLANK IRQ,
253 * but beware: When running the Retina WB-Emu under
254 * AmigaDOS, the VBLANK IRQ is ENABLED...
258 void RZ3LoadPalette(unsigned char * pal, unsigned char firstcol, unsigned char colors);
261 * Loads the palette-registers. "pal" points to an array of unsigned char
262 * triplets, for the red, green and blue component. "firstcol" determines the
263 * number of the first palette-register to load (256 available). "colors" is
264 * the number of colors you want to put in the palette registers.
267 void RZ3SetPalette(unsigned char colornum, unsigned char red, unsigned char green, unsigned char blue);
270 * Allows you to set a single color in the palette, "colornum" is the number
271 * of the palette entry (256 available), "red", "green" and "blue" are the
272 * three components.
275 void RZ3SetCursorPos(unsigned short pos);
278 * This routine sets the text-mode hardware-cursor position to the screen
279 * location pos. pos can be calculated as (x + y * md->TY).
280 * Text-mode only!
283 void RZ3AlphaCopy (unsigned short xs, unsigned short ys,
284 unsigned short xd, unsigned short yd,
285 unsigned short w, unsigned short h );
288 * This Routine uses the blitter to perform fast copies
289 * in the text-display. The parameters are:
290 * xs - source x-coordinate
291 * ys - source y-coordinate
292 * xd - destination x-coordinate
293 * yd - destination y-coordinate
294 * w - the width of the area to copy
295 * h - the height of the area to copy
296 * All coordinates are in characters. RZ3AlphaCopy does not
297 * check for boundaries - you've got to make sure that the
298 * parameters have sensible values. Text-mode only!
302 void RZ3AlphaErase (unsigned short xd, unsigned short yd,
303 unsigned short w, unsigned short h );
306 * RZ3AlphaErase uses the blitter to erase portions of
307 * the text-display. The parameters are:
308 * xd - destination x-coordinate
309 * yd - destination y-coordinate
310 * w - the width of the area to erase
311 * h - the height of the area to erase
312 * All coordinates are in characters. RZ3AlphaCopy does not
313 * check for boundaries - you've got to make sure that the
314 * parameters have sensible values. Text-mode only!
316 * Since the blitter is unable to use a mask-pattern and a
317 * certain fill-value at the same time, this routine uses
318 * a simple trick: RZ3Init() clears a memory area twice as
319 * large as the text-display needs, and RZ3AlphaErase then
320 * simply uses RZ3AlphaCopy to copy the desired area from
321 * the empty text-screen to the actually displayed screen.
324 void RZ3BitBlit (struct grf_bitblt * gbb );
327 * RZ3BitBlit uses the blitter to perform one of 16
328 * available logical operations on the display memory,
329 * among them ordinary fill- and copy operations.
330 * The only parameter is a pointer to a struct grf_bitblt:
332 * struct grf_bitblt {
333 * unsigned short op; see above definitions of GRFBBOPxxx
334 * unsigned short src_x, src_y; upper left corner of source-region
335 * unsigned short dst_x, dst_y; upper left corner of dest-region
336 * unsigned short w, h; width, height of region
337 * unsigned short mask; bitmask to apply
338 * };
340 * All coordinates are in pixels. RZ3BitBlit does not
341 * check for boundaries - you've got to make sure that the
342 * parameters have sensible values. 8 bit gfx-mode only!
344 * The blitter has a lot more capabilities, which aren't
345 * currently used by theese routines, among them color-expanded
346 * and text-blits, which can speed up GUIs like X11 a lot.
347 * If you've got any idea how to make use of them within
348 * your routines, contact me, and I'll implement the necessary
349 * blit-operations.
352 void RZ3BitBlit16( struct grf_bitblt * gbb );
354 /* Does the same as RZ3BitBlit(), but for 16-bit screens */
356 void RZ3SetPanning(unsigned short xoff, unsigned short yoff);
359 * Moves the logical coordinate (xoff, yoff) to the upper left corner
360 * of your screen. Of course, you shouldn't specify excess values that would
361 * show garbage in the lower right area of your screen... SetPanning()
362 * does NOT check for boundaries.
363 * Please read the documentation of RZ3SetHWCloc, too.
366 void RZ3SetupHWC (unsigned char col1, unsigned col2,
367 unsigned char hsx, unsigned char hsy,
368 const unsigned long * data);
371 * Initializes and switches on the hardware-cursor sprite.
372 * The parameters are:
373 * col1 - the first color
374 * col2 - the second color
375 * hsx - hot-spot location offset x
376 * hsy - hot-spot location offset y
377 * data - a pointer to the bitmap data to be used for the sprite
379 * The organization of the data is - as always with MSDOS related
380 * products - rather strange: The first and the second long-word
381 * represent bitplane0 for the first 64 pixels. The following two
382 * long-words represent bitplane1 for the first 64 pixels. But
383 * the long-words are organized in Intel-fashion, beginning with
384 * the least significant byte, ending with the most significant
385 * one. The most significant bit of each byte is the leftmost,
386 * as one would expect it. Now the weird color-assignments:
388 * bitplane0 bitplane1 result
389 * 0 0 col2
390 * 0 1 col1
391 * 1 0 transparent
392 * 1 1 background-color XOR 0xff
394 * The size of the data has to be 64*64*2/8 = 1024 byte,
395 * obviously, the size of the sprite is 64x64 pixels.
399 void RZ3DisableHWC (void);
401 /* simply disables the hardware-cursor sprite */
403 void RZ3SetHWCloc (unsigned short x, unsigned short y);
406 * sets the location of the hardwar-cursor sprite to x,y
407 * relative to the logical screen beginning.
408 * IMPORTANT: If you use RZ3SetHWCloc() to set the position
409 * of the hardware-cursor sprite, all necessary panning is
410 * done automatically - you can treat the display without
411 * even knowing about the physical screen size that is
412 * displayed.
415 #endif
417 #endif /* RZ3_BSD_h */
420 /* -------------- START OF CODE -------------- */
422 /* read VGA register */
423 #define vgar(ba, reg) (*(((volatile unsigned char *)ba)+reg))
425 /* write VGA register */
426 #define vgaw(ba, reg, val) \
427 *(((volatile unsigned char *)ba)+reg) = val
430 * defines for the used register addresses (mw)
432 * NOTE: there are some registers that have different addresses when
433 * in mono or color mode. We only support color mode, and thus
434 * some addresses won't work in mono-mode!
437 /* General Registers: */
438 #define GREG_STATUS0_R 0x03C2
439 #define GREG_STATUS1_R 0x03DA
440 #define GREG_MISC_OUTPUT_R 0x03CC
441 #define GREG_MISC_OUTPUT_W 0x03C2
442 #define GREG_FEATURE_CONTROL_R 0x03CA
443 #define GREG_FEATURE_CONTROL_W 0x03DA
444 #define GREG_POS 0x0102
446 /* Attribute Controller: */
447 #define ACT_ADDRESS 0x03C0
448 #define ACT_ADDRESS_R 0x03C0
449 #define ACT_ADDRESS_W 0x03C0
450 #define ACT_ADDRESS_RESET 0x03DA
451 #define ACT_ID_PALETTE0 0x00
452 #define ACT_ID_PALETTE1 0x01
453 #define ACT_ID_PALETTE2 0x02
454 #define ACT_ID_PALETTE3 0x03
455 #define ACT_ID_PALETTE4 0x04
456 #define ACT_ID_PALETTE5 0x05
457 #define ACT_ID_PALETTE6 0x06
458 #define ACT_ID_PALETTE7 0x07
459 #define ACT_ID_PALETTE8 0x08
460 #define ACT_ID_PALETTE9 0x09
461 #define ACT_ID_PALETTE10 0x0A
462 #define ACT_ID_PALETTE11 0x0B
463 #define ACT_ID_PALETTE12 0x0C
464 #define ACT_ID_PALETTE13 0x0D
465 #define ACT_ID_PALETTE14 0x0E
466 #define ACT_ID_PALETTE15 0x0F
467 #define ACT_ID_ATTR_MODE_CNTL 0x10
468 #define ACT_ID_OVERSCAN_COLOR 0x11
469 #define ACT_ID_COLOR_PLANE_ENA 0x12
470 #define ACT_ID_HOR_PEL_PANNING 0x13
471 #define ACT_ID_COLOR_SELECT 0x14
473 /* Graphics Controller: */
474 #define GCT_ADDRESS 0x03CE
475 #define GCT_ADDRESS_R 0x03CE
476 #define GCT_ADDRESS_W 0x03CF
477 #define GCT_ID_SET_RESET 0x00
478 #define GCT_ID_ENABLE_SET_RESET 0x01
479 #define GCT_ID_COLOR_COMPARE 0x02
480 #define GCT_ID_DATA_ROTATE 0x03
481 #define GCT_ID_READ_MAP_SELECT 0x04
482 #define GCT_ID_GRAPHICS_MODE 0x05
483 #define GCT_ID_MISC 0x06
484 #define GCT_ID_COLOR_XCARE 0x07
485 #define GCT_ID_BITMASK 0x08
487 /* Sequencer: */
488 #define SEQ_ADDRESS 0x03C4
489 #define SEQ_ADDRESS_R 0x03C4
490 #define SEQ_ADDRESS_W 0x03C5
491 #define SEQ_ID_RESET 0x00
492 #define SEQ_ID_CLOCKING_MODE 0x01
493 #define SEQ_ID_MAP_MASK 0x02
494 #define SEQ_ID_CHAR_MAP_SELECT 0x03
495 #define SEQ_ID_MEMORY_MODE 0x04
496 #define SEQ_ID_EXTENDED_ENABLE 0x05 /* down from here, all seq registers are NCR extensions */
497 #define SEQ_ID_UNKNOWN1 0x06
498 #define SEQ_ID_UNKNOWN2 0x07
499 #define SEQ_ID_CHIP_ID 0x08
500 #define SEQ_ID_UNKNOWN3 0x09
501 #define SEQ_ID_CURSOR_COLOR1 0x0A
502 #define SEQ_ID_CURSOR_COLOR0 0x0B
503 #define SEQ_ID_CURSOR_CONTROL 0x0C
504 #define SEQ_ID_CURSOR_X_LOC_HI 0x0D
505 #define SEQ_ID_CURSOR_X_LOC_LO 0x0E
506 #define SEQ_ID_CURSOR_Y_LOC_HI 0x0F
507 #define SEQ_ID_CURSOR_Y_LOC_LO 0x10
508 #define SEQ_ID_CURSOR_X_INDEX 0x11
509 #define SEQ_ID_CURSOR_Y_INDEX 0x12
510 #define SEQ_ID_CURSOR_STORE_HI 0x13 /* manual still wrong here.. argl! */
511 #define SEQ_ID_CURSOR_STORE_LO 0x14 /* downto 0x16 */
512 #define SEQ_ID_CURSOR_ST_OFF_HI 0x15
513 #define SEQ_ID_CURSOR_ST_OFF_LO 0x16
514 #define SEQ_ID_CURSOR_PIXELMASK 0x17
515 #define SEQ_ID_PRIM_HOST_OFF_HI 0x18
516 #define SEQ_ID_PRIM_HOST_OFF_LO 0x19
517 #define SEQ_ID_LINEAR_0 0x1A
518 #define SEQ_ID_LINEAR_1 0x1B
519 #define SEQ_ID_SEC_HOST_OFF_HI 0x1C
520 #define SEQ_ID_SEC_HOST_OFF_LO 0x1D
521 #define SEQ_ID_EXTENDED_MEM_ENA 0x1E
522 #define SEQ_ID_EXT_CLOCK_MODE 0x1F
523 #define SEQ_ID_EXT_VIDEO_ADDR 0x20
524 #define SEQ_ID_EXT_PIXEL_CNTL 0x21
525 #define SEQ_ID_BUS_WIDTH_FEEDB 0x22
526 #define SEQ_ID_PERF_SELECT 0x23
527 #define SEQ_ID_COLOR_EXP_WFG 0x24
528 #define SEQ_ID_COLOR_EXP_WBG 0x25
529 #define SEQ_ID_EXT_RW_CONTROL 0x26
530 #define SEQ_ID_MISC_FEATURE_SEL 0x27
531 #define SEQ_ID_COLOR_KEY_CNTL 0x28
532 #define SEQ_ID_COLOR_KEY_MATCH0 0x29
533 #define SEQ_ID_COLOR_KEY_MATCH1 0x2A
534 #define SEQ_ID_COLOR_KEY_MATCH2 0x2B
535 #define SEQ_ID_UNKNOWN6 0x2C
536 #define SEQ_ID_CRC_CONTROL 0x2D
537 #define SEQ_ID_CRC_DATA_LOW 0x2E
538 #define SEQ_ID_CRC_DATA_HIGH 0x2F
539 #define SEQ_ID_MEMORY_MAP_CNTL 0x30
540 #define SEQ_ID_ACM_APERTURE_1 0x31
541 #define SEQ_ID_ACM_APERTURE_2 0x32
542 #define SEQ_ID_ACM_APERTURE_3 0x33
543 #define SEQ_ID_BIOS_UTILITY_0 0x3e
544 #define SEQ_ID_BIOS_UTILITY_1 0x3f
546 /* CRT Controller: */
547 #define CRT_ADDRESS 0x03D4
548 #define CRT_ADDRESS_R 0x03D5
549 #define CRT_ADDRESS_W 0x03D5
550 #define CRT_ID_HOR_TOTAL 0x00
551 #define CRT_ID_HOR_DISP_ENA_END 0x01
552 #define CRT_ID_START_HOR_BLANK 0x02
553 #define CRT_ID_END_HOR_BLANK 0x03
554 #define CRT_ID_START_HOR_RETR 0x04
555 #define CRT_ID_END_HOR_RETR 0x05
556 #define CRT_ID_VER_TOTAL 0x06
557 #define CRT_ID_OVERFLOW 0x07
558 #define CRT_ID_PRESET_ROW_SCAN 0x08
559 #define CRT_ID_MAX_SCAN_LINE 0x09
560 #define CRT_ID_CURSOR_START 0x0A
561 #define CRT_ID_CURSOR_END 0x0B
562 #define CRT_ID_START_ADDR_HIGH 0x0C
563 #define CRT_ID_START_ADDR_LOW 0x0D
564 #define CRT_ID_CURSOR_LOC_HIGH 0x0E
565 #define CRT_ID_CURSOR_LOC_LOW 0x0F
566 #define CRT_ID_START_VER_RETR 0x10
567 #define CRT_ID_END_VER_RETR 0x11
568 #define CRT_ID_VER_DISP_ENA_END 0x12
569 #define CRT_ID_OFFSET 0x13
570 #define CRT_ID_UNDERLINE_LOC 0x14
571 #define CRT_ID_START_VER_BLANK 0x15
572 #define CRT_ID_END_VER_BLANK 0x16
573 #define CRT_ID_MODE_CONTROL 0x17
574 #define CRT_ID_LINE_COMPARE 0x18
575 #define CRT_ID_UNKNOWN1 0x19 /* are these register really void ? */
576 #define CRT_ID_UNKNOWN2 0x1A
577 #define CRT_ID_UNKNOWN3 0x1B
578 #define CRT_ID_UNKNOWN4 0x1C
579 #define CRT_ID_UNKNOWN5 0x1D
580 #define CRT_ID_UNKNOWN6 0x1E
581 #define CRT_ID_UNKNOWN7 0x1F
582 #define CRT_ID_UNKNOWN8 0x20
583 #define CRT_ID_UNKNOWN9 0x21
584 #define CRT_ID_UNKNOWN10 0x22
585 #define CRT_ID_UNKNOWN11 0x23
586 #define CRT_ID_UNKNOWN12 0x24
587 #define CRT_ID_UNKNOWN13 0x25
588 #define CRT_ID_UNKNOWN14 0x26
589 #define CRT_ID_UNKNOWN15 0x27
590 #define CRT_ID_UNKNOWN16 0x28
591 #define CRT_ID_UNKNOWN17 0x29
592 #define CRT_ID_UNKNOWN18 0x2A
593 #define CRT_ID_UNKNOWN19 0x2B
594 #define CRT_ID_UNKNOWN20 0x2C
595 #define CRT_ID_UNKNOWN21 0x2D
596 #define CRT_ID_UNKNOWN22 0x2E
597 #define CRT_ID_UNKNOWN23 0x2F
598 #define CRT_ID_EXT_HOR_TIMING1 0x30 /* down from here, all crt registers are NCR extensions */
599 #define CRT_ID_EXT_START_ADDR 0x31
600 #define CRT_ID_EXT_HOR_TIMING2 0x32
601 #define CRT_ID_EXT_VER_TIMING 0x33
602 #define CRT_ID_MONITOR_POWER 0x34
604 /* PLL chip (clock frequency synthesizer) I'm guessing here... */
605 #define PLL_ADDRESS 0x83c8
606 #define PLL_ADDRESS_W 0x83c9
609 /* Video DAC */
610 #define VDAC_ADDRESS 0x03c8
611 #define VDAC_ADDRESS_W 0x03c8
612 #define VDAC_ADDRESS_R 0x03c7
613 #define VDAC_STATE 0x03c7
614 #define VDAC_DATA 0x03c9
615 #define VDAC_MASK 0x03c6
618 /* Accelerator Control Menu (memory mapped registers, includes blitter) */
619 #define ACM_PRIMARY_OFFSET 0x00
620 #define ACM_SECONDARY_OFFSET 0x04
621 #define ACM_MODE_CONTROL 0x08
622 #define ACM_CURSOR_POSITION 0x0c
623 #define ACM_START_STATUS 0x30
624 #define ACM_CONTROL 0x34
625 #define ACM_RASTEROP_ROTATION 0x38
626 #define ACM_BITMAP_DIMENSION 0x3c
627 #define ACM_DESTINATION 0x40
628 #define ACM_SOURCE 0x44
629 #define ACM_PATTERN 0x48
630 #define ACM_FOREGROUND 0x4c
631 #define ACM_BACKGROUND 0x50
634 #define WGfx(ba, idx, val) \
635 do { vgaw(ba, GCT_ADDRESS, idx); vgaw(ba, GCT_ADDRESS_W , val); } while (0)
637 #define WSeq(ba, idx, val) \
638 do { vgaw(ba, SEQ_ADDRESS, idx); vgaw(ba, SEQ_ADDRESS_W , val); } while (0)
640 #define WCrt(ba, idx, val) \
641 do { vgaw(ba, CRT_ADDRESS, idx); vgaw(ba, CRT_ADDRESS_W , val); } while (0)
643 #define WAttr(ba, idx, val) \
644 do { vgaw(ba, ACT_ADDRESS, idx); vgaw(ba, ACT_ADDRESS_W, val); } while (0)
646 #define Map(m) \
647 do { WGfx(ba, GCT_ID_READ_MAP_SELECT, m & 3 ); WSeq(ba, SEQ_ID_MAP_MASK, (1 << (m & 3))); } while (0)
649 #define WPLL(ba, idx, val) \
650 do { vgaw(ba, PLL_ADDRESS, idx);\
651 vgaw(ba, PLL_ADDRESS_W, (val & 0xff));\
652 vgaw(ba, PLL_ADDRESS_W, (val >> 8)); } while (0)
655 static inline unsigned char RAttr(volatile void *ba, short idx) {
656 vgaw (ba, ACT_ADDRESS, idx);
657 return vgar (ba, ACT_ADDRESS_R);
660 static inline unsigned char RSeq(volatile void *ba, short idx) {
661 vgaw (ba, SEQ_ADDRESS, idx);
662 return vgar (ba, SEQ_ADDRESS_R);
665 static inline unsigned char RCrt(volatile void *ba, short idx) {
666 vgaw (ba, CRT_ADDRESS, idx);
667 return vgar (ba, CRT_ADDRESS_R);
670 static inline unsigned char RGfx(volatile void *ba, short idx) {
671 vgaw(ba, GCT_ADDRESS, idx);
672 return vgar (ba, GCT_ADDRESS_R);
675 void RZ3DisableHWC(struct grf_softc *gp);
676 void RZ3SetupHWC(struct grf_softc *gp, unsigned char col1, unsigned int col2,
677 unsigned char hsx, unsigned char hsy,
678 const long unsigned int *data);
679 void RZ3AlphaErase(struct grf_softc *gp,
680 short unsigned int xd, short unsigned int yd,
681 short unsigned int w, short unsigned int h);
682 void RZ3AlphaCopy(struct grf_softc *gp,
683 short unsigned int xs, short unsigned int ys,
684 short unsigned int xd, short unsigned int yd,
685 short unsigned int w, short unsigned int h);
686 void RZ3BitBlit(struct grf_softc *gp, struct grf_bitblt *gbb);
687 void RZ3BitBlit16(struct grf_softc *gp, struct grf_bitblt *gbb);
688 void RZ3BitBlit24(struct grf_softc *gp, struct grf_bitblt *gbb);
689 void RZ3SetCursorPos(struct grf_softc *gp, short unsigned int pos);
690 void RZ3LoadPalette(struct grf_softc *gp, unsigned char *pal,
691 unsigned char firstcol, unsigned char colors);
692 void RZ3SetPalette(struct grf_softc *gp, unsigned char colornum,
693 unsigned char red, unsigned char green,
694 unsigned char blue);
695 void RZ3SetPanning(struct grf_softc *gp,
696 short unsigned int xoff, short unsigned int yoff);
697 void RZ3SetHWCloc(struct grf_softc *gp,
698 short unsigned int x, short unsigned int y);
699 int rh_mode(register struct grf_softc *gp, u_long cmd, void *arg,
700 u_long a2, int a3);
701 int rh_ioctl(register struct grf_softc *gp, u_long cmd, void *data);
702 int rh_getcmap(struct grf_softc *gfp, struct grf_colormap *cmap);
703 int rh_putcmap(struct grf_softc *gfp, struct grf_colormap *cmap);
704 int rh_getspritepos(struct grf_softc *gp, struct grf_position *pos);
705 int rh_setspritepos(struct grf_softc *gp, struct grf_position *pos);
706 int rh_getspriteinfo(struct grf_softc *gp, struct grf_spriteinfo *info);
707 int rh_setspriteinfo(struct grf_softc *gp, struct grf_spriteinfo *info);
708 int rh_getspritemax(struct grf_softc *gp, struct grf_position *pos);
709 int rh_bitblt(struct grf_softc *gp, struct grf_bitblt *bb);
710 int rh_blank(struct grf_softc *, int *);
712 struct ite_softc;
713 void rh_init(struct ite_softc *);
714 void rh_cursor(struct ite_softc *, int);
715 void rh_deinit(struct ite_softc *);
716 void rh_putc(struct ite_softc *, int, int, int, int);
717 void rh_clear(struct ite_softc *, int, int, int, int);
718 void rh_scroll(struct ite_softc *, int, int, int, int);
720 int grfrh_cnprobe(void);
721 void grfrh_iteinit(struct grf_softc *);
723 #endif /* _GRF_RHREG_H */