source: rtems/c/src/lib/libbsp/i386/pc386/console/vgainit.c @ 3cbb63a

4.104.114.84.95
Last change on this file since 3cbb63a was 3cbb63a, checked in by Joel Sherrill <joel.sherrill@…>, on 08/30/00 at 08:15:30

2000-08-26 Rosimildo da Silva <rdasilva@…>

  • Major rework of the "/dev/console" driver.
  • Added termios support for stdin ( keyboard ).
  • Added ioctls() to support modes similar to Linux( XLATE, RAW, MEDIUMRAW ).
  • Added Keyboard mapping and handling of the keyboard's leds.
  • Added Micro FrameBuffer? driver ( "/dev/fb0" ) for bare VGA controller ( 16 colors ).
  • Added PS/2 and Serial mouse support for PC386 BSP.
  • console/defkeymap.c: New file.
  • console/fb_vga.c: New file.
  • console/fb_vga.h: New file.
  • console/i386kbd.h: New file.
  • console/kd.h: New file.
  • console/keyboard.c: New file.
  • console/keyboard.h: New file.
  • console/mouse_parser.c: New file.
  • console/mouse_parser.h: New file.
  • console/pc_keyb.c: New file.
  • console/ps2_drv.h: New file.
  • console/ps2_mouse.c: New file.
  • console/ps2_mouse.h: New file.
  • console/serial_mouse.c: New file.
  • console/serial_mouse.h: New file.
  • console/vgainit.c: New file.
  • console/vt.c: New file.
  • console/Makefile.am: Reflect new files.
  • console/console.c, console/inch.c, console/outch.c: Console functionality modifications.
  • startup/Makefile.am: Pick up tty_drv.c and gdb_glue.c
  • Property mode set to 100644
File size: 20.2 KB
Line 
1/*
2 * Copyright (c) 1999 Greg Haerr <greg@censoft.com>
3 * Copyright (c) 1991 David I. Bell
4 * Permission is granted to use, distribute, or modify this source,
5 * provided that this copyright notice remains intact.
6 *
7 * Alternate EGA/VGA Screen Driver Init, direct hw programming
8 */
9#include <i386_io.h>
10
11#ifdef __rtems__
12#define ROMFONT         0       /* =0 no bios rom fonts available*/
13#else
14#define ROMFONT         1       /* =1 uses PC rom fonts */
15#endif
16
17/* defines are defined in device.h of the MicroWindows package */
18#define MODE_SET        0       /* draw pixels as given (default) */
19#define MODE_XOR        1       /* draw pixels using XOR */
20#define MODE_OR 2       /* draw pixels using OR (notimp)*/
21#define MODE_AND        3       /* draw pixels using AND (notimp)*/
22#define  MODE_MAX       3
23typedef int MODE;    /* drawing mode*/
24
25
26/* Define one and only one of the following to be nonzero*/
27#define VGA_ET4000      0       /* TSENG LABS ET4000 chip 800x600*/
28#define VGA_STANDARD    1       /* standard VGA 640x480*/
29#define EGA_STANDARD    0       /* standard EGA 640x350*/
30
31#define DONE    0
32#define IN      1
33#define OUT     2
34
35#define RAM_SCAN_LINES  32      /* number of scan lines in fonts in RAM */
36#define FONT_CHARS      256     /* number of characters in font tables */
37#define CHAR_WIDTH      8       /* number of pixels for character width */
38
39#define PALREG  0x3c0
40#define SEQREG  0x3c4
41#define SEQVAL  0x3c5
42#define GRREG   0x3ce
43#define GRVAL   0x3cf
44#define ATTRREG 0x3da
45#define CRTCREG 0x3d4
46#define CRTCVAL 0x3d5
47
48#define GENREG1 0x3c2
49#define GENREG2 0x3cc
50#define GENREG3 0x3ca
51
52#define DATA_ROTATE     3       /* register number for data rotate */
53
54typedef struct {
55  int action;
56  int port1;
57  int data1;
58  int port2;
59  int data2;
60} REGIO;
61
62/* extern data*/
63#if ROMFONT
64extern FARADDR          rom_char_addr;          /* address of ROM font*/
65extern int              ROM_CHAR_HEIGHT;        /* ROM character height*/
66#endif
67
68/* local data*/
69extern REGIO            graphics_on[];
70extern REGIO            graph_off[];
71
72/* entry points*/
73void            ega_hwinit(void);
74void            ega_hwterm(void);
75
76/* local routines*/
77static void writeregs(REGIO *rp);
78static void out_word(unsigned int p,unsigned int d);
79static void setmode(MODE mode);
80
81void
82ega_hwinit(void)
83{
84        writeregs(graphics_on);
85}
86
87void
88ega_hwterm(void)
89{
90  setmode(MODE_SET);
91
92  /* Copy character table from ROM back into bit plane 2 before turning
93   * off graphics.
94   */
95  out_word(SEQREG, 0x0100);     /* syn reset */
96  out_word(SEQREG, 0x0402);     /* cpu writes only to map 2 */
97  out_word(SEQREG, 0x0704);     /* sequential addressing */
98  out_word(SEQREG, 0x0300);     /* clear synchronous reset */
99
100  out_word(GRREG, 0x0204);      /* select map 2 for CPU reads */
101  out_word(GRREG, 0x0005);      /* disable odd-even addressing */
102
103#if ROMFONT
104  {
105          FARADDR       srcoffset;
106          FARADDR       destoffset;
107          int           data;
108          int           ch;
109          int           row;
110
111          srcoffset = rom_char_addr;
112          destoffset = EGA_BASE;
113          for (ch = 0; ch < FONT_CHARS; ch++) {
114                for(row = 0; row < ROM_CHAR_HEIGHT; row++) {
115                        data = GETBYTE_FP(srcoffset++);
116                        PUTBYTE_FP(destoffset++, data);
117                }
118                destoffset += (RAM_SCAN_LINES - ROM_CHAR_HEIGHT);
119          }
120  }
121#endif
122
123  /* Finally set the registers back for text mode. */
124  writeregs(graph_off);
125}
126
127/* Set the graphics registers as indicated by the given table */
128static void
129writeregs(REGIO *rp)
130{
131  for (; rp->action != DONE; rp++) {
132        switch (rp->action) {
133            case IN:
134                        inp(rp->port1);
135                        break;
136            case OUT:
137                        outp(rp->port1, rp->data1);
138                        if (rp->port2)
139                                outp(rp->port2, rp->data2);
140                        break;
141        }
142  }
143}
144
145/* Output a word to an I/O port. */
146static void
147out_word(unsigned int p,unsigned int d)
148{
149  outp(p, d & 0xff);
150  outp(p + 1, (d >> 8) & 0xff);
151}
152
153
154/* Values for the data rotate register to implement drawing modes. */
155static unsigned char mode_table[MODE_MAX + 1] = {
156  0x00, 0x18, 0x10, 0x08
157};
158
159/* Set the drawing mode.
160 * This is either SET, OR, AND, or XOR.
161 */
162static void
163setmode(MODE mode)
164{
165  if (mode > MODE_MAX)
166        return;
167  outp(GRREG, DATA_ROTATE);
168  outp(GRVAL, mode_table[mode]);
169}
170
171
172#if VGA_ET4000
173
174/* VGA 800x600 16-color graphics (BIOS mode 0x29).
175 */
176static REGIO graphics_on[] = {
177  /* Reset attr F/F */
178  IN, ATTRREG, 0, 0, 0,
179
180  /* Disable palette */
181  OUT, PALREG, 0, 0, 0,
182
183  /* Reset sequencer regs */
184  OUT, SEQREG, 0, SEQVAL, 0,
185  OUT, SEQREG, 1, SEQVAL, 1,
186  OUT, SEQREG, 2, SEQVAL, 0x0f,
187  OUT, SEQREG, 3, SEQVAL, 0,
188  OUT, SEQREG, 4, SEQVAL, 6,
189
190  /* Misc out reg */
191  OUT, GENREG1, 0xe3, 0, 0,
192
193  /* Sequencer enable */
194  OUT, SEQREG, 0, SEQVAL, 0x03,
195
196  /* Unprotect crtc regs 0-7 */
197  OUT, CRTCREG, 0x11, CRTCVAL, 0,
198
199  /* Crtc */
200  OUT, CRTCREG, 0, CRTCVAL, 0x7a,
201  OUT, CRTCREG, 1, CRTCVAL, 0x63,
202  OUT, CRTCREG, 2, CRTCVAL, 0x64,
203  OUT, CRTCREG, 3, CRTCVAL, 0x1d,
204  OUT, CRTCREG, 4, CRTCVAL, 0x68,
205  OUT, CRTCREG, 5, CRTCVAL, 0x9a,
206  OUT, CRTCREG, 6, CRTCVAL, 0x78,
207  OUT, CRTCREG, 7, CRTCVAL, 0xf0,
208  OUT, CRTCREG, 8, CRTCVAL, 0x00,
209  OUT, CRTCREG, 9, CRTCVAL, 0x60,
210  OUT, CRTCREG, 10, CRTCVAL, 0x00,
211  OUT, CRTCREG, 11, CRTCVAL, 0x00,
212  OUT, CRTCREG, 12, CRTCVAL, 0x00,
213  OUT, CRTCREG, 13, CRTCVAL, 0x00,
214  OUT, CRTCREG, 14, CRTCVAL, 0x00,
215  OUT, CRTCREG, 15, CRTCVAL, 0x00,
216  OUT, CRTCREG, 16, CRTCVAL, 0x5c,
217  OUT, CRTCREG, 17, CRTCVAL, 0x8e,
218  OUT, CRTCREG, 18, CRTCVAL, 0x57,
219  OUT, CRTCREG, 19, CRTCVAL, 0x32,
220  OUT, CRTCREG, 20, CRTCVAL, 0x00,
221  OUT, CRTCREG, 21, CRTCVAL, 0x5b,
222  OUT, CRTCREG, 22, CRTCVAL, 0x75,
223  OUT, CRTCREG, 23, CRTCVAL, 0xc3,
224  OUT, CRTCREG, 24, CRTCVAL, 0xff,
225
226  /* Graphics controller */
227  OUT, GENREG2, 0x00, 0, 0,
228  OUT, GENREG3, 0x01, 0, 0,
229  OUT, GRREG, 0, GRVAL, 0x00,
230  OUT, GRREG, 1, GRVAL, 0x00,
231  OUT, GRREG, 2, GRVAL, 0x00,
232  OUT, GRREG, 3, GRVAL, 0x00,
233  OUT, GRREG, 4, GRVAL, 0x00,
234  OUT, GRREG, 5, GRVAL, 0x00,
235  OUT, GRREG, 6, GRVAL, 0x05,
236  OUT, GRREG, 7, GRVAL, 0x0f,
237  OUT, GRREG, 8, GRVAL, 0xff,
238
239  /* Reset attribute flip/flop */
240  IN, ATTRREG, 0, 0, 0,
241
242  /* Palette */
243  OUT, PALREG, 0, PALREG, 0x00,
244  OUT, PALREG, 1, PALREG, 0x01,
245  OUT, PALREG, 2, PALREG, 0x02,
246  OUT, PALREG, 3, PALREG, 0x03,
247  OUT, PALREG, 4, PALREG, 0x04,
248  OUT, PALREG, 5, PALREG, 0x05,
249  OUT, PALREG, 6, PALREG, 0x06,
250  OUT, PALREG, 7, PALREG, 0x07,
251  OUT, PALREG, 8, PALREG, 0x38,
252  OUT, PALREG, 9, PALREG, 0x39,
253  OUT, PALREG, 10, PALREG, 0x3a,
254  OUT, PALREG, 11, PALREG, 0x3b,
255  OUT, PALREG, 12, PALREG, 0x3c,
256  OUT, PALREG, 13, PALREG, 0x3d,
257  OUT, PALREG, 14, PALREG, 0x3e,
258  OUT, PALREG, 15, PALREG, 0x3f,
259  OUT, PALREG, 16, PALREG, 0x01,
260  OUT, PALREG, 17, PALREG, 0x00,
261  OUT, PALREG, 18, PALREG, 0x0f,
262  OUT, PALREG, 19, PALREG, 0x00,
263
264  /* Enable palette */
265  OUT, PALREG, 0x20, 0, 0,
266
267  /* End of table */
268  DONE, 0, 0, 0, 0
269};
270
271
272/* VGA 80x25 text (BIOS mode 3).
273 */
274static REGIO graph_off[] = {
275  /* Reset attr F/F */
276  IN, ATTRREG, 0, 0, 0,
277
278  /* Disable palette */
279  OUT, PALREG, 0, 0, 0,
280
281  /* Reset sequencer regs */
282  OUT, SEQREG, 0, SEQVAL, 1,
283  OUT, SEQREG, 1, SEQVAL, 1,
284  OUT, SEQREG, 2, SEQVAL, 3,
285  OUT, SEQREG, 3, SEQVAL, 0,
286  OUT, SEQREG, 4, SEQVAL, 2,
287
288  /* Misc out reg */
289  OUT, GENREG1, 0x63, 0, 0,
290
291  /* Sequencer enable */
292  OUT, SEQREG, 0, SEQVAL, 3,
293
294  /* Unprotect crtc regs 0-7 */
295  OUT, CRTCREG, 0x11, CRTCVAL, 0,
296
297  /* Crtc */
298  OUT, CRTCREG, 0, CRTCVAL, 0x5f,       /* horiz total */
299  OUT, CRTCREG, 1, CRTCVAL, 0x4f,       /* horiz end */
300  OUT, CRTCREG, 2, CRTCVAL, 0x50,       /* horiz blank */
301  OUT, CRTCREG, 3, CRTCVAL, 0x82,       /* end blank */
302  OUT, CRTCREG, 4, CRTCVAL, 0x55,       /* horiz retrace */
303  OUT, CRTCREG, 5, CRTCVAL, 0x81,       /* end retrace */
304  OUT, CRTCREG, 6, CRTCVAL, 0xbf,       /* vert total */
305  OUT, CRTCREG, 7, CRTCVAL, 0x1f,       /* overflows */
306  OUT, CRTCREG, 8, CRTCVAL, 0x00,       /* row scan */
307  OUT, CRTCREG, 9, CRTCVAL, 0x4f,       /* max scan line */
308  OUT, CRTCREG, 10, CRTCVAL, 0x00,      /* cursor start */
309  OUT, CRTCREG, 11, CRTCVAL, 0x0f,      /* cursor end */
310  OUT, CRTCREG, 12, CRTCVAL, 0x0e,      /* start high addr */
311  OUT, CRTCREG, 13, CRTCVAL, 0xb0,      /* low addr */
312  OUT, CRTCREG, 14, CRTCVAL, 0x16,      /* cursor high */
313  OUT, CRTCREG, 15, CRTCVAL, 0x30,      /* cursor low */
314  OUT, CRTCREG, 16, CRTCVAL, 0x9c,      /* vert retrace */
315  OUT, CRTCREG, 17, CRTCVAL, 0x8e,      /* retrace end */
316  OUT, CRTCREG, 18, CRTCVAL, 0x8f,      /* vert end */
317  OUT, CRTCREG, 19, CRTCVAL, 0x28,      /* offset */
318  OUT, CRTCREG, 20, CRTCVAL, 0x1f,      /* underline */
319  OUT, CRTCREG, 21, CRTCVAL, 0x96,      /* vert blank */
320  OUT, CRTCREG, 22, CRTCVAL, 0xb9,      /* end blank */
321  OUT, CRTCREG, 23, CRTCVAL, 0xa3,      /* crt mode */
322  OUT, CRTCREG, 24, CRTCVAL, 0xff,      /* line compare */
323
324  /* Graphics controller */
325  OUT, GENREG2, 0x00, 0, 0,
326  OUT, GENREG3, 0x01, 0, 0,
327  OUT, GRREG, 0, GRVAL, 0x00,
328  OUT, GRREG, 1, GRVAL, 0x00,
329  OUT, GRREG, 2, GRVAL, 0x00,
330  OUT, GRREG, 3, GRVAL, 0x00,
331  OUT, GRREG, 4, GRVAL, 0x00,
332  OUT, GRREG, 5, GRVAL, 0x10,
333  OUT, GRREG, 6, GRVAL, 0x0e,
334  OUT, GRREG, 7, GRVAL, 0x00,
335  OUT, GRREG, 8, GRVAL, 0xff,
336
337  /* Reset attribute flip/flop */
338  IN, ATTRREG, 0, 0, 0,
339
340  /* Palette */
341  OUT, PALREG, 0, PALREG, 0x00,
342  OUT, PALREG, 1, PALREG, 0x01,
343  OUT, PALREG, 2, PALREG, 0x02,
344  OUT, PALREG, 3, PALREG, 0x03,
345  OUT, PALREG, 4, PALREG, 0x04,
346  OUT, PALREG, 5, PALREG, 0x05,
347  OUT, PALREG, 6, PALREG, 0x06,
348  OUT, PALREG, 7, PALREG, 0x07,
349  OUT, PALREG, 8, PALREG, 0x10,
350  OUT, PALREG, 9, PALREG, 0x11,
351  OUT, PALREG, 10, PALREG, 0x12,
352  OUT, PALREG, 11, PALREG, 0x13,
353  OUT, PALREG, 12, PALREG, 0x14,
354  OUT, PALREG, 13, PALREG, 0x15,
355  OUT, PALREG, 14, PALREG, 0x16,
356  OUT, PALREG, 15, PALREG, 0x17,
357  OUT, PALREG, 16, PALREG, 0x08,
358  OUT, PALREG, 17, PALREG, 0x00,
359  OUT, PALREG, 18, PALREG, 0x0f,
360  OUT, PALREG, 19, PALREG, 0x00,
361
362  /* Enable palette */
363  OUT, PALREG, 0x20, 0, 0,
364
365  /* End of table */
366  DONE, 0, 0, 0, 0
367};
368
369#endif
370
371
372#if VGA_STANDARD
373
374/* VGA 640x480 16-color graphics (BIOS mode 0x12).
375 */
376static REGIO graphics_on[] = {
377  /* Reset attr F/F */
378  IN, ATTRREG, 0, 0, 0,
379
380  /* Disable palette */
381  OUT, PALREG, 0, 0, 0,
382
383  /* Reset sequencer regs */
384  OUT, SEQREG, 0, SEQVAL, 0,
385  OUT, SEQREG, 1, SEQVAL, 1,
386  OUT, SEQREG, 2, SEQVAL, 0x0f,
387  OUT, SEQREG, 3, SEQVAL, 0,
388  OUT, SEQREG, 4, SEQVAL, 6,
389
390  /* Misc out reg */
391  OUT, GENREG1, 0xe3, 0, 0,
392
393  /* Sequencer enable */
394  OUT, SEQREG, 0, SEQVAL, 0x03,
395
396  /* Unprotect crtc regs 0-7 */
397  OUT, CRTCREG, 0x11, CRTCVAL, 0,
398
399  /* Crtc */
400  OUT, CRTCREG, 0, CRTCVAL, 0x5f,
401  OUT, CRTCREG, 1, CRTCVAL, 0x4f,
402  OUT, CRTCREG, 2, CRTCVAL, 0x50,
403  OUT, CRTCREG, 3, CRTCVAL, 0x82,
404  OUT, CRTCREG, 4, CRTCVAL, 0x54,
405  OUT, CRTCREG, 5, CRTCVAL, 0x80,
406  OUT, CRTCREG, 6, CRTCVAL, 0x0b,
407  OUT, CRTCREG, 7, CRTCVAL, 0x3e,
408  OUT, CRTCREG, 8, CRTCVAL, 0x00,
409  OUT, CRTCREG, 9, CRTCVAL, 0x40,
410  OUT, CRTCREG, 10, CRTCVAL, 0x00,
411  OUT, CRTCREG, 11, CRTCVAL, 0x00,
412  OUT, CRTCREG, 12, CRTCVAL, 0x00,
413  OUT, CRTCREG, 13, CRTCVAL, 0x00,
414  OUT, CRTCREG, 14, CRTCVAL, 0x00,
415  OUT, CRTCREG, 15, CRTCVAL, 0x59,
416  OUT, CRTCREG, 16, CRTCVAL, 0xea,
417  OUT, CRTCREG, 17, CRTCVAL, 0x8c,
418  OUT, CRTCREG, 18, CRTCVAL, 0xdf,
419  OUT, CRTCREG, 19, CRTCVAL, 0x28,
420  OUT, CRTCREG, 20, CRTCVAL, 0x00,
421  OUT, CRTCREG, 21, CRTCVAL, 0xe7,
422  OUT, CRTCREG, 22, CRTCVAL, 0x04,
423  OUT, CRTCREG, 23, CRTCVAL, 0xe3,
424  OUT, CRTCREG, 24, CRTCVAL, 0xff,
425
426  /* Graphics controller */
427  OUT, GENREG2, 0x00, 0, 0,
428  OUT, GENREG3, 0x01, 0, 0,
429  OUT, GRREG, 0, GRVAL, 0x00,
430  OUT, GRREG, 1, GRVAL, 0x00,
431  OUT, GRREG, 2, GRVAL, 0x00,
432  OUT, GRREG, 3, GRVAL, 0x00,
433  OUT, GRREG, 4, GRVAL, 0x00,
434  OUT, GRREG, 5, GRVAL, 0x00,
435  OUT, GRREG, 6, GRVAL, 0x05,
436  OUT, GRREG, 7, GRVAL, 0x0f,
437  OUT, GRREG, 8, GRVAL, 0xff,
438
439  /* Reset attribute flip/flop */
440  IN, ATTRREG, 0, 0, 0,
441
442  /* Palette */
443  OUT, PALREG, 0, PALREG, 0x00,
444  OUT, PALREG, 1, PALREG, 0x01,
445  OUT, PALREG, 2, PALREG, 0x02,
446  OUT, PALREG, 3, PALREG, 0x03,
447  OUT, PALREG, 4, PALREG, 0x04,
448  OUT, PALREG, 5, PALREG, 0x05,
449  OUT, PALREG, 6, PALREG, 0x06,
450  OUT, PALREG, 7, PALREG, 0x07,
451  OUT, PALREG, 8, PALREG, 0x38,
452  OUT, PALREG, 9, PALREG, 0x39,
453  OUT, PALREG, 10, PALREG, 0x3a,
454  OUT, PALREG, 11, PALREG, 0x3b,
455  OUT, PALREG, 12, PALREG, 0x3c,
456  OUT, PALREG, 13, PALREG, 0x3d,
457  OUT, PALREG, 14, PALREG, 0x3e,
458  OUT, PALREG, 15, PALREG, 0x3f,
459  OUT, PALREG, 16, PALREG, 0x01,
460  OUT, PALREG, 17, PALREG, 0x00,
461  OUT, PALREG, 18, PALREG, 0x0f,
462  OUT, PALREG, 19, PALREG, 0x00,
463
464  /* Enable palette */
465  OUT, PALREG, 0x20, 0, 0,
466
467  /* End of table */
468  DONE, 0, 0, 0, 0
469};
470
471
472/* VGA 80x25 text (BIOS mode 3).
473 */
474static REGIO graph_off[] = {
475  /* Reset attr F/F */
476  IN, ATTRREG, 0, 0, 0,
477
478  /* Disable palette */
479  OUT, PALREG, 0, 0, 0,
480
481  /* Reset sequencer regs */
482  OUT, SEQREG, 0, SEQVAL, 1,
483  OUT, SEQREG, 1, SEQVAL, 1,
484  OUT, SEQREG, 2, SEQVAL, 3,
485  OUT, SEQREG, 3, SEQVAL, 0,
486  OUT, SEQREG, 4, SEQVAL, 2,
487
488  /* Misc out reg */
489  OUT, GENREG1, 0x63, 0, 0,
490
491  /* Sequencer enable */
492  OUT, SEQREG, 0, SEQVAL, 3,
493
494  /* Unprotect crtc regs 0-7 */
495  OUT, CRTCREG, 0x11, CRTCVAL, 0,
496
497  /* Crtc */
498  OUT, CRTCREG, 0, CRTCVAL, 0x5f,       /* horiz total */
499  OUT, CRTCREG, 1, CRTCVAL, 0x4f,       /* horiz end */
500  OUT, CRTCREG, 2, CRTCVAL, 0x50,       /* horiz blank */
501  OUT, CRTCREG, 3, CRTCVAL, 0x82,       /* end blank */
502  OUT, CRTCREG, 4, CRTCVAL, 0x55,       /* horiz retrace */
503  OUT, CRTCREG, 5, CRTCVAL, 0x81,       /* end retrace */
504  OUT, CRTCREG, 6, CRTCVAL, 0xbf,       /* vert total */
505  OUT, CRTCREG, 7, CRTCVAL, 0x1f,       /* overflows */
506  OUT, CRTCREG, 8, CRTCVAL, 0x00,       /* row scan */
507  OUT, CRTCREG, 9, CRTCVAL, 0x4f,       /* max scan line */
508  OUT, CRTCREG, 10, CRTCVAL, 0x00,      /* cursor start */
509  OUT, CRTCREG, 11, CRTCVAL, 0x0f,      /* cursor end */
510  OUT, CRTCREG, 12, CRTCVAL, 0x0e,      /* start high addr */
511  OUT, CRTCREG, 13, CRTCVAL, 0xb0,      /* low addr */
512  OUT, CRTCREG, 14, CRTCVAL, 0x16,      /* cursor high */
513  OUT, CRTCREG, 15, CRTCVAL, 0x30,      /* cursor low */
514  OUT, CRTCREG, 16, CRTCVAL, 0x9c,      /* vert retrace */
515  OUT, CRTCREG, 17, CRTCVAL, 0x8e,      /* retrace end */
516  OUT, CRTCREG, 18, CRTCVAL, 0x8f,      /* vert end */
517  OUT, CRTCREG, 19, CRTCVAL, 0x28,      /* offset */
518  OUT, CRTCREG, 20, CRTCVAL, 0x1f,      /* underline */
519  OUT, CRTCREG, 21, CRTCVAL, 0x96,      /* vert blank */
520  OUT, CRTCREG, 22, CRTCVAL, 0xb9,      /* end blank */
521  OUT, CRTCREG, 23, CRTCVAL, 0xa3,      /* crt mode */
522  OUT, CRTCREG, 24, CRTCVAL, 0xff,      /* line compare */
523
524  /* Graphics controller */
525  OUT, GENREG2, 0x00, 0, 0,
526  OUT, GENREG3, 0x01, 0, 0,
527  OUT, GRREG, 0, GRVAL, 0x00,
528  OUT, GRREG, 1, GRVAL, 0x00,
529  OUT, GRREG, 2, GRVAL, 0x00,
530  OUT, GRREG, 3, GRVAL, 0x00,
531  OUT, GRREG, 4, GRVAL, 0x00,
532  OUT, GRREG, 5, GRVAL, 0x10,
533  OUT, GRREG, 6, GRVAL, 0x0e,
534  OUT, GRREG, 7, GRVAL, 0x00,
535  OUT, GRREG, 8, GRVAL, 0xff,
536
537  /* Reset attribute flip/flop */
538  IN, ATTRREG, 0, 0, 0,
539
540  /* Palette */
541  OUT, PALREG, 0, PALREG, 0x00,
542  OUT, PALREG, 1, PALREG, 0x01,
543  OUT, PALREG, 2, PALREG, 0x02,
544  OUT, PALREG, 3, PALREG, 0x03,
545  OUT, PALREG, 4, PALREG, 0x04,
546  OUT, PALREG, 5, PALREG, 0x05,
547  OUT, PALREG, 6, PALREG, 0x06,
548  OUT, PALREG, 7, PALREG, 0x07,
549  OUT, PALREG, 8, PALREG, 0x10,
550  OUT, PALREG, 9, PALREG, 0x11,
551  OUT, PALREG, 10, PALREG, 0x12,
552  OUT, PALREG, 11, PALREG, 0x13,
553  OUT, PALREG, 12, PALREG, 0x14,
554  OUT, PALREG, 13, PALREG, 0x15,
555  OUT, PALREG, 14, PALREG, 0x16,
556  OUT, PALREG, 15, PALREG, 0x17,
557  OUT, PALREG, 16, PALREG, 0x08,
558  OUT, PALREG, 17, PALREG, 0x00,
559  OUT, PALREG, 18, PALREG, 0x0f,
560  OUT, PALREG, 19, PALREG, 0x00,
561
562  /* Enable palette */
563  OUT, PALREG, 0x20, 0, 0,
564
565  /* End of table */
566  DONE, 0, 0, 0, 0
567};
568
569#endif
570
571
572#if EGA_STANDARD
573
574/* EGA 640x350 16-color graphics (BIOS mode 0x10).
575 */
576static REGIO graphics_on[] = {
577  /* Reset attr F/F */
578  IN, ATTRREG, 0, 0, 0,
579
580  /* Disable palette */
581  OUT, PALREG, 0, 0, 0,
582
583  /* Reset sequencer regs */
584  OUT, SEQREG, 0, SEQVAL, 0,
585  OUT, SEQREG, 1, SEQVAL, 1,
586  OUT, SEQREG, 2, SEQVAL, 0x0f,
587  OUT, SEQREG, 3, SEQVAL, 0,
588  OUT, SEQREG, 4, SEQVAL, 6,
589
590  /* Misc out reg */
591  OUT, GENREG1, 0xa7, 0, 0,
592
593  /* Sequencer enable */
594  OUT, SEQREG, 0, SEQVAL, 0x03,
595
596  /* Unprotect crtc regs 0-7 */
597  OUT, CRTCREG, 0x11, CRTCVAL, 0,
598
599  /* Crtc */
600  OUT, CRTCREG, 0, CRTCVAL, 0x5b,
601  OUT, CRTCREG, 1, CRTCVAL, 0x4f,
602  OUT, CRTCREG, 2, CRTCVAL, 0x53,
603  OUT, CRTCREG, 3, CRTCVAL, 0x37,
604  OUT, CRTCREG, 4, CRTCVAL, 0x52,
605  OUT, CRTCREG, 5, CRTCVAL, 0x00,
606  OUT, CRTCREG, 6, CRTCVAL, 0x6c,
607  OUT, CRTCREG, 7, CRTCVAL, 0x1f,
608  OUT, CRTCREG, 8, CRTCVAL, 0x00,
609  OUT, CRTCREG, 9, CRTCVAL, 0x00,
610  OUT, CRTCREG, 10, CRTCVAL, 0x00,
611  OUT, CRTCREG, 11, CRTCVAL, 0x00,
612  OUT, CRTCREG, 12, CRTCVAL, 0x00,
613  OUT, CRTCREG, 13, CRTCVAL, 0x00,
614  OUT, CRTCREG, 14, CRTCVAL, 0x00,
615  OUT, CRTCREG, 15, CRTCVAL, 0x00,
616  OUT, CRTCREG, 16, CRTCVAL, 0x5e,
617  OUT, CRTCREG, 17, CRTCVAL, 0x2b,
618  OUT, CRTCREG, 18, CRTCVAL, 0x5d,
619  OUT, CRTCREG, 19, CRTCVAL, 0x28,
620  OUT, CRTCREG, 20, CRTCVAL, 0x0f,
621  OUT, CRTCREG, 21, CRTCVAL, 0x5f,
622  OUT, CRTCREG, 22, CRTCVAL, 0x0a,
623  OUT, CRTCREG, 23, CRTCVAL, 0xe3,
624  OUT, CRTCREG, 24, CRTCVAL, 0xff,
625
626  /* Graphics controller */
627  OUT, GENREG2, 0x00, 0, 0,
628  OUT, GENREG3, 0x01, 0, 0,
629  OUT, GRREG, 0, GRVAL, 0x00,
630  OUT, GRREG, 1, GRVAL, 0x00,
631  OUT, GRREG, 2, GRVAL, 0x00,
632  OUT, GRREG, 3, GRVAL, 0x00,
633  OUT, GRREG, 4, GRVAL, 0x00,
634  OUT, GRREG, 5, GRVAL, 0x00,
635  OUT, GRREG, 6, GRVAL, 0x05,
636  OUT, GRREG, 7, GRVAL, 0x0f,
637  OUT, GRREG, 8, GRVAL, 0xff,
638
639  /* Reset attribute flip/flop */
640  IN, ATTRREG, 0, 0, 0,
641
642  /* Palette */
643  OUT, PALREG, 0, PALREG, 0x00,
644  OUT, PALREG, 1, PALREG, 0x01,
645  OUT, PALREG, 2, PALREG, 0x02,
646  OUT, PALREG, 3, PALREG, 0x03,
647  OUT, PALREG, 4, PALREG, 0x04,
648  OUT, PALREG, 5, PALREG, 0x05,
649  OUT, PALREG, 6, PALREG, 0x06,
650  OUT, PALREG, 7, PALREG, 0x07,
651  OUT, PALREG, 8, PALREG, 0x38,
652  OUT, PALREG, 9, PALREG, 0x39,
653  OUT, PALREG, 10, PALREG, 0x3a,
654  OUT, PALREG, 11, PALREG, 0x3b,
655  OUT, PALREG, 12, PALREG, 0x3c,
656  OUT, PALREG, 13, PALREG, 0x3d,
657  OUT, PALREG, 14, PALREG, 0x3e,
658  OUT, PALREG, 15, PALREG, 0x3f,
659  OUT, PALREG, 16, PALREG, 0x01,
660  OUT, PALREG, 17, PALREG, 0x00,
661  OUT, PALREG, 18, PALREG, 0x0f,
662  OUT, PALREG, 19, PALREG, 0x00,
663
664  /* Enable palette */
665  OUT, PALREG, 0x20, 0, 0,
666
667  /* End of table */
668  DONE, 0, 0, 0, 0
669};
670
671
672/* EGA 80x25 text (BIOS mode 3).
673 */
674static REGIO graph_off[] = {
675  /* Reset attr F/F */
676  IN, ATTRREG, 0, 0, 0,
677
678  /* Disable palette */
679  OUT, PALREG, 0, 0, 0,
680
681  /* Reset sequencer regs */
682  OUT, SEQREG, 0, SEQVAL, 1,
683  OUT, SEQREG, 1, SEQVAL, 1,
684  OUT, SEQREG, 2, SEQVAL, 3,
685  OUT, SEQREG, 3, SEQVAL, 0,
686  OUT, SEQREG, 4, SEQVAL, 3,
687
688  /* Misc out reg */
689  OUT, GENREG1, 0xa7, 0, 0,
690
691  /* Sequencer enable */
692  OUT, SEQREG, 0, SEQVAL, 3,
693
694  /* Crtc */
695  OUT, CRTCREG, 0, CRTCVAL, 0x5b,       /* horiz total */
696  OUT, CRTCREG, 1, CRTCVAL, 0x4f,       /* horiz end */
697  OUT, CRTCREG, 2, CRTCVAL, 0x53,       /* horiz blank */
698  OUT, CRTCREG, 3, CRTCVAL, 0x37,       /* end blank */
699  OUT, CRTCREG, 4, CRTCVAL, 0x51,       /* horiz retrace */
700  OUT, CRTCREG, 5, CRTCVAL, 0x5b,       /* end retrace */
701  OUT, CRTCREG, 6, CRTCVAL, 0x6c,       /* vert total */
702  OUT, CRTCREG, 7, CRTCVAL, 0x1f,       /* overflows */
703  OUT, CRTCREG, 8, CRTCVAL, 0x00,       /* row scan */
704  OUT, CRTCREG, 9, CRTCVAL, 0x0d,       /* max scan line */
705  OUT, CRTCREG, 10, CRTCVAL, 0x00,      /* cursor start */
706  OUT, CRTCREG, 11, CRTCVAL, 0x0f,      /* cursor end */
707  OUT, CRTCREG, 12, CRTCVAL, 0x00,      /* start high addr */
708  OUT, CRTCREG, 13, CRTCVAL, 0x00,      /* low addr */
709  OUT, CRTCREG, 14, CRTCVAL, 0x00,      /* cursor high */
710  OUT, CRTCREG, 15, CRTCVAL, 0x00,      /* cursor low */
711  OUT, CRTCREG, 16, CRTCVAL, 0x5e,      /* vert retrace */
712  OUT, CRTCREG, 17, CRTCVAL, 0x2b,      /* retrace end */
713  OUT, CRTCREG, 18, CRTCVAL, 0x5d,      /* vert end */
714  OUT, CRTCREG, 19, CRTCVAL, 0x28,      /* offset */
715  OUT, CRTCREG, 20, CRTCVAL, 0x0f,      /* underline */
716  OUT, CRTCREG, 21, CRTCVAL, 0x5e,      /* vert blank */
717  OUT, CRTCREG, 22, CRTCVAL, 0x0a,      /* end blank */
718  OUT, CRTCREG, 23, CRTCVAL, 0xa3,      /* crt mode */
719  OUT, CRTCREG, 24, CRTCVAL, 0xff,      /* line compare */
720
721  /* Graphics controller */
722  OUT, GENREG2, 0x00, 0, 0,
723  OUT, GENREG3, 0x01, 0, 0,
724  OUT, GRREG, 0, GRVAL, 0x00,
725  OUT, GRREG, 1, GRVAL, 0x00,
726  OUT, GRREG, 2, GRVAL, 0x00,
727  OUT, GRREG, 3, GRVAL, 0x00,
728  OUT, GRREG, 4, GRVAL, 0x00,
729  OUT, GRREG, 5, GRVAL, 0x10,
730  OUT, GRREG, 6, GRVAL, 0x0e,
731  OUT, GRREG, 7, GRVAL, 0x00,
732  OUT, GRREG, 8, GRVAL, 0xff,
733
734  /* Reset attribute flip/flop */
735  IN, ATTRREG, 0, 0, 0,
736
737  /* Palette */
738  OUT, PALREG, 0, PALREG, 0x00,
739  OUT, PALREG, 1, PALREG, 0x01,
740  OUT, PALREG, 2, PALREG, 0x02,
741  OUT, PALREG, 3, PALREG, 0x03,
742  OUT, PALREG, 4, PALREG, 0x04,
743  OUT, PALREG, 5, PALREG, 0x05,
744  OUT, PALREG, 6, PALREG, 0x14,
745  OUT, PALREG, 7, PALREG, 0x07,
746  OUT, PALREG, 8, PALREG, 0x38,
747  OUT, PALREG, 9, PALREG, 0x39,
748  OUT, PALREG, 10, PALREG, 0x3a,
749  OUT, PALREG, 11, PALREG, 0x3b,
750  OUT, PALREG, 12, PALREG, 0x3c,
751  OUT, PALREG, 13, PALREG, 0x3d,
752  OUT, PALREG, 14, PALREG, 0x3e,
753  OUT, PALREG, 15, PALREG, 0x3f,
754  OUT, PALREG, 16, PALREG, 0x08,
755  OUT, PALREG, 17, PALREG, 0x00,
756  OUT, PALREG, 18, PALREG, 0x0f,
757  OUT, PALREG, 19, PALREG, 0x00,
758
759  /* Enable palette */
760  OUT, PALREG, 0x20, 0, 0,
761
762  /* End of table */
763  DONE, 0, 0, 0, 0
764};
765
766#endif
Note: See TracBrowser for help on using the repository browser.