|
|
1.1 root 1: /*++
2:
3: Copyright (c) 1992 Microsoft Corporation
4:
5: Module Name:
6:
7: s3data.h
8:
9: Abstract:
10:
11: This module contains all the global data used by the S3 driver.
12:
13: Environment:
14:
15: Kernel mode
16:
17: Revision History:
18:
19:
20: --*/
21:
22:
23: #include "cmdcnst.h"
24:
25:
26: /*****************************************************************************
27: * Command table to get ready for VGA mode
28: * this is only used for the 911/924 chips
29: ****************************************************************************/
30: USHORT s3_set_vga_mode[] = {
31:
32: SELECTACCESSRANGE + SYSTEMCONTROL,
33:
34: OW, // Unlock the S3 regs
35: 0x3d4, 0x4838,
36:
37: OW, // Unlock the SC regs
38: 0x3d4, 0xa539,
39:
40: OB, // Enable the S3 graphics engine
41: 0x3d4, 0x40,
42:
43: METAOUT+MASKOUT,
44: 0x3d5, 0xfe, 0x01,
45:
46: SELECTACCESSRANGE + ADVANCEDFUNCTIONCONTROL,
47:
48: OB, // reset to normal VGA operation
49: 0x4ae8, 0x02,
50:
51: SELECTACCESSRANGE + SYSTEMCONTROL,
52:
53: OB, // Disable the S3 graphics engine
54: 0x3d4, 0x40,
55:
56: METAOUT+MASKOUT,
57: 0x3d5, 0xfe, 0x00,
58:
59: OB, // Memory Control
60: 0x3d4, 0x31,
61:
62: METAOUT+MASKOUT,
63: 0x3d5, 0x75, 0x85,
64:
65: OB, // Backward Compat 1
66: 0x3d4, 0x32,
67:
68: METAOUT+MASKOUT,
69: 0x3d5, 0x40, 0x00,
70:
71: OW, // Backward Compat 2
72: 0x3d4, 0x0033,
73:
74: OW, // Backward Compat 3
75: 0x3d4, 0x0034,
76:
77: OW, // CRTC Lock
78: 0x3d4, 0x0035,
79:
80: OB, // S3 Misc 1
81: 0x3d4, 0x3a,
82:
83: METAOUT+MASKOUT,
84: 0x3d5, 0x88, 0x05,
85:
86: OW, // Data Transfer Exec Pos
87: 0x3d4, 0x5a3b,
88:
89: OW, // Interlace Retrace start
90: 0x3d4, 0x103c,
91:
92: OW, // Extended Mode
93: 0x3d4, 0x0043,
94:
95: OW, // HW graphics Cursor Mode
96: 0x3d4, 0x0045,
97:
98: OW, // HW graphics Cursor Orig x
99: 0x3d4, 0x0046,
100:
101: OW, // HW graphics Cursor Orig x
102: 0x3d4, 0xff47,
103:
104: OW, // HW graphics Cursor Orig y
105: 0x3d4, 0xfc48,
106:
107: OW, // HW graphics Cursor Orig y
108: 0x3d4, 0xff49,
109:
110: OW, // HW graphics Cursor Orig y
111: 0x3d4, 0xff4a,
112:
113: OW, // HW graphics Cursor Orig y
114: 0x3d4, 0xff4b,
115:
116: OW, // HW graphics Cursor Orig y
117: 0x3d4, 0xff4c,
118:
119: OW, // HW graphics Cursor Orig y
120: 0x3d4, 0xff4d,
121:
122: OW, // Dsp Start x pixel pos
123: 0x3d4, 0xff4e,
124:
125: OW, // Dsp Start y pixel pos
126: 0x3d4, 0xdf4d,
127:
128: OB, // MODE-CNTL
129: 0x3d4, 0x42,
130:
131: METAOUT+MASKOUT,
132: 0x3d5, 0xdf, 0x00,
133:
134: EOD
135:
136: };
137:
138: //
139: // Mode tables are only necessary for non-x86.
140: // This allows us to save lots of space in memory
141:
142: #ifndef i386
143:
144: /*****************************************************************************
145: * S3 - 911 Enhanced mode init.
146: ****************************************************************************/
147: USHORT S3_911_Enhanced_Mode[] = {
148: SELECTACCESSRANGE + VARIOUSVGA,
149:
150: OB, // Make the screen dark
151: 0x3c6, 0x00,
152:
153: OW, // Turn off the screen
154: 0x3c4, 0x2101,
155:
156: METAOUT+VBLANK, // Wait for the 911 to settle down.
157: METAOUT+VBLANK,
158:
159: OW, // Async Reset
160: 0x3c4, 0x0100,
161:
162: OWM, // Sequencer Registers
163: 0x3c4,
164: 4,
165: 0x2101, 0x0F02, 0x0003, 0x0e04,
166:
167: METAOUT+SETCRTC, // Program the CRTC regs
168:
169: SELECTACCESSRANGE + SYSTEMCONTROL,
170:
171: IB, // Prepare to prgram the ACT
172: 0x3da,
173:
174: SELECTACCESSRANGE + VARIOUSVGA,
175:
176: METAOUT+ATCOUT, // Program the ATC
177: 0x3c0,
178: 21, 0,
179: 0x00, 0x01, 0x02, 0x03, 0x04,
180: 0x05, 0x06, 0x07, 0x08, 0x09,
181: 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
182: 0x0f, 0x41, 0x00, 0x0f, 0x00,
183: 0x00,
184:
185: OW, // Start the sequencer
186: 0x3c4, 0x300,
187:
188: OWM, // Program the GDC
189: 0x3ce,
190: 9,
191: 0x0000, 0x0001, 0x0002, 0x0003, 0x0004,
192: 0x0005, 0x0506, 0x0f07, 0xff08,
193:
194: SELECTACCESSRANGE + SYSTEMCONTROL,
195:
196: IB, // Set ATC FF to index
197: 0x3da,
198:
199: SELECTACCESSRANGE + VARIOUSVGA,
200:
201: OB, // Enable the palette
202: 0x3c0, 0x20,
203:
204: SELECTACCESSRANGE + SYSTEMCONTROL,
205:
206: OW, // Unlock S3 SC regs
207: 0x3d4, 0xa039,
208:
209: OB, // Enable 8514/a reg access
210: 0x3d4, 0x40,
211:
212: METAOUT+MASKOUT,
213: 0x3d5, 0xfe, 0x01,
214:
215: OB, // Turn off H/W Graphics Cursor
216: 0x3d4, 0x45,
217:
218: METAOUT+MASKOUT,
219: 0x3d5, 0xfe, 0x0,
220:
221: OW, // Set the graphic cursor fg color
222: 0x3d4, 0xff0e,
223:
224: OW, // Set the graphic cursor bg color
225: 0x3d4, 0x000f,
226:
227: OW, // Unlock the S3 specific regs
228: 0x3d4, 0x4838,
229:
230: OB, // Set the Misc 1 reg
231: 0x3d4, 0x3a,
232:
233: METAOUT+MASKOUT,
234: 0x3d5, 0xe2, 0x15,
235:
236: OB, // Disable 2K X 1K X 4 plane
237: 0x3d4, 0x31,
238:
239: METAOUT+MASKOUT,
240: 0x3d5, 0xe4, 0x08,
241:
242: OB, // Disable multiple pages
243: 0x3d4, 0x32,
244:
245: METAOUT+MASKOUT,
246: 0x3d5, 0xbf, 0x0,
247:
248: OW, // Lock S3 specific regs
249: 0x3d4, 0x0038,
250:
251: SELECTACCESSRANGE + ADVANCEDFUNCTIONCONTROL,
252:
253: OW, // Set either 800X600 or 1024X768
254: 0x4ae8, 0x07, // hi-res mode.
255:
256: SELECTACCESSRANGE + VARIOUSVGA,
257:
258: OB, // Set Misc out reg for external clock
259: 0x3c2, 0x2f,
260:
261: SELECTACCESSRANGE + SYSTEMCONTROL,
262:
263: OW, // Unlock the SC regs
264: 0x3d4, 0xa039,
265:
266: METAOUT+SETCLK, // Set the clock for 65 Mhz
267:
268: METAOUT+VBLANK, // Wait for the clock to settle down
269: METAOUT+VBLANK, // S3 product alert Synchronization &
270: METAOUT+VBLANK, // Clock Skew.
271: METAOUT+VBLANK,
272: METAOUT+VBLANK,
273: METAOUT+VBLANK,
274:
275: OW, // Lock the SC regs
276: 0x3d4, 0x0039,
277:
278: SELECTACCESSRANGE + VARIOUSVGA,
279:
280: OB, // Turn on the screen - in the sequencer
281: 0x3c4, 0x01,
282:
283: METAOUT+MASKOUT,
284: 0x3c5, 0xdf, 0x0,
285:
286: METAOUT+VBLANK, // Wait the monitor to settle down
287: METAOUT+VBLANK,
288:
289: OW, // Enable all the planes through the DAC
290: 0x3c6, 0xff,
291:
292: EOD
293:
294: };
295:
296: /*****************************************************************************
297: * S3 - 801 Enhanced mode init.
298: ****************************************************************************/
299: USHORT S3_801_Enhanced_Mode[] = {
300:
301: SELECTACCESSRANGE + VARIOUSVGA,
302:
303: OB, // Make the screen dark
304: 0x3c6, 0x00,
305:
306: OW, // Turn off the screen
307: 0x3c4, 0x2101,
308:
309: METAOUT+VBLANK, // Wait for the 911 to settle down.
310: METAOUT+VBLANK,
311:
312: OW, // Async Reset
313: 0x3c4, 0x0100,
314:
315: OWM, // Sequencer Registers
316: 0x3c4,
317: 4,
318: 0x2101, 0x0F02, 0x0003, 0x0e04,
319:
320: METAOUT+SETCRTC, // Program the CRTC regs
321:
322: SELECTACCESSRANGE + SYSTEMCONTROL,
323:
324: OWM,
325: 0x3d4,
326: 17,
327: 0xA039, 0x0e42, 0x403c, 0x8931, 0x153a,
328: 0x0050, 0x4854, 0x2f60, 0x8161, 0x0062,
329: 0x0058, 0x0033, 0x0043, 0x8013, 0x0051,
330: 0x005c, 0x1034,
331:
332: OW,
333: 0x3d4, 0x0a5a, // Set the low byte of the LAW
334:
335: OW,
336: 0x3d4, 0x0059, // Set the high byte of the LAW
337:
338: OW, // Lock S3 specific regs
339: 0x3d4, 0x0038,
340:
341: OW, // Lock more S3 specific regs
342: 0x3d4, 0x0039,
343:
344: IB, // Prepare to prgram the ACT
345: 0x3da,
346:
347: SELECTACCESSRANGE + VARIOUSVGA,
348:
349: METAOUT+ATCOUT, // Program the ATC
350: 0x3c0,
351: 21, 0,
352: 0x00, 0x01, 0x02, 0x03, 0x04,
353: 0x05, 0x06, 0x07, 0x08, 0x09,
354: 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
355: 0x0f, 0x41, 0x00, 0x0f, 0x00,
356: 0x00,
357:
358: OW, // Start the sequencer
359: 0x3c4, 0x300,
360:
361: OWM, // Program the GDC
362: 0x3ce,
363: 9,
364: 0x0000, 0x0001, 0x0002, 0x0003, 0x0004,
365: 0x0005, 0x0506, 0x0f07, 0xff08,
366:
367: SELECTACCESSRANGE + SYSTEMCONTROL,
368:
369: IB, // Set ATC FF to index
370: 0x3da,
371:
372: SELECTACCESSRANGE + VARIOUSVGA,
373:
374: OB, // Enable the palette
375: 0x3c0, 0x20,
376:
377: SELECTACCESSRANGE + SYSTEMCONTROL,
378:
379: OW, // Unlock S3 SC regs
380: 0x3d4, 0xa039,
381:
382: OB, // Enable 8514/a reg access
383: 0x3d4, 0x40,
384:
385: METAOUT+MASKOUT,
386: 0x3d5, 0xfe, 0x01,
387:
388: OB, // Turn off H/W Graphics Cursor
389: 0x3d4, 0x45,
390:
391: METAOUT+MASKOUT,
392: 0x3d5, 0xfe, 0x0,
393:
394: OW, // Set the graphic cursor fg color
395: 0x3d4, 0xff0e,
396:
397: OW, // Set the graphic cursor bg color
398: 0x3d4, 0x000f,
399:
400: OW, // Unlock the S3 specific regs
401: 0x3d4, 0x4838,
402:
403: OB, // Set the Misc 1 reg
404: 0x3d4, 0x3a,
405:
406: METAOUT+MASKOUT,
407: 0x3d5, 0xe2, 0x15,
408:
409: OB, // Disable 2K X 1K X 4 plane
410: 0x3d4, 0x31,
411:
412: METAOUT+MASKOUT,
413: 0x3d5, 0xe4, 0x08,
414:
415: OB, // Disable multiple pages
416: 0x3d4, 0x32,
417:
418: METAOUT+MASKOUT,
419: 0x3d5, 0xbf, 0x0,
420:
421: OW, // Lock S3 specific regs
422: 0x3d4, 0x0038,
423:
424: SELECTACCESSRANGE + ADVANCEDFUNCTIONCONTROL,
425:
426: OW, // Set either 800X600 or 1024X768
427: 0x4ae8, 0x07, // hi-res mode.
428:
429: SELECTACCESSRANGE + VARIOUSVGA,
430:
431: OB, // Set Misc out reg for external clock
432: 0x3c2, 0xef,
433:
434: SELECTACCESSRANGE + SYSTEMCONTROL,
435:
436: OW, // Unlock the SC regs
437: 0x3d4, 0xa039,
438:
439: METAOUT+SETCLK, // Set the clock for 65 Mhz
440:
441: METAOUT+VBLANK, // Wait for the clock to settle down
442: METAOUT+VBLANK, // S3 product alert Synchronization &
443: METAOUT+VBLANK, // Clock Skew.
444: METAOUT+VBLANK,
445: METAOUT+VBLANK,
446: METAOUT+VBLANK,
447:
448: OW, // Lock the SC regs
449: 0x3d4, 0x0039,
450:
451: SELECTACCESSRANGE + VARIOUSVGA,
452:
453: OB, // Turn on the screen - in the sequencer
454: 0x3c4, 0x01,
455:
456: METAOUT+MASKOUT,
457: 0x3c5, 0xdf, 0x0,
458:
459: METAOUT+VBLANK, // Wait the monitor to settle down
460: METAOUT+VBLANK,
461:
462: OW, // Enable all the planes through the DAC
463: 0x3c6, 0xff,
464:
465: EOD
466:
467: };
468:
469: /*****************************************************************************
470: * S3 - 928 1024 X 768, 800 X 600, & 640 X 480 Enhanced mode init.
471: ****************************************************************************/
472: USHORT S3_928_Enhanced_Mode[] = {
473:
474: SELECTACCESSRANGE + VARIOUSVGA,
475:
476: OB, // Make the screen dark
477: 0x3c6, 0x00,
478:
479: OW, // Async Reset
480: 0x3c4, 0x0100,
481:
482: OWM, // Sequencer Registers
483: 0x3c4, 5,
484: 0x0300, 0x0101, 0x0F02, 0x0003, 0x0e04,
485:
486: METAOUT+INDXOUT, // Program the GDC
487: 0x3ce,
488: 9, 0,
489: 0x00, 0x00, 0x00, 0x00, 0x00,
490: 0x00, 0x05, 0x0f, 0xff,
491:
492: SELECTACCESSRANGE + SYSTEMCONTROL,
493:
494: OW, // Unlock the S3 specific regs
495: 0x3d4, 0x4838,
496:
497: OW, // Unlock the more S3 specific regs
498: 0x3d4, 0xA039,
499:
500: METAOUT+SETCRTC, // Program the CRTC regs
501:
502: OW, // Set mode control
503: 0X3D4, 0x0242, // dot clock select
504:
505: OW, // memory configuration reg
506: 0X3D4, 0x8D31,
507:
508: OW, // extended system control reg
509: 0X3D4, 0x0050,
510:
511: OW, // backward compatibility 2 reg
512: 0X3D4, 0x2033,
513:
514: OB, // extended mode reg
515: 0x3D4, 0x43,
516:
517: METAOUT+MASKOUT,
518: 0x3D5, 0x10, 0x00,
519:
520: OW, // extended system control reg 2
521: 0X3D4, 0x4051,
522:
523: OW, // general output port
524: 0X3D4, 0x025c,
525:
526: // METAOUT+BUSTEST,
527:
528: OW,
529: 0x3d4, 0x0a5a, // Set the low byte of the LAW
530:
531: OW,
532: 0x3d4, 0x0059, // Set the high byte of the LAW
533:
534: IB, // Prepare to prgram the ACT
535: 0x3da,
536:
537: SELECTACCESSRANGE + VARIOUSVGA,
538:
539: METAOUT+ATCOUT, // Program the ATC
540: 0x3c0,
541: 21, 0,
542: 0x00, 0x01, 0x02, 0x03, 0x04,
543: 0x05, 0x06, 0x07, 0x08, 0x09,
544: 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
545: 0x0f, 0x41, 0x00, 0x0f, 0x00,
546: 0x00,
547:
548: SELECTACCESSRANGE + SYSTEMCONTROL,
549:
550: IB, // Set ATC FF to index
551: 0x3da,
552:
553: SELECTACCESSRANGE + VARIOUSVGA,
554:
555: OB, // Enable the palette
556: 0x3c0, 0x20,
557:
558: SELECTACCESSRANGE + SYSTEMCONTROL,
559:
560: OW, // Enable 8514/a reg access
561: 0x3d4, 0x0140,
562:
563: OB, // Turn off H/W Graphics Cursor
564: 0x3d4, 0x45,
565:
566: METAOUT+MASKOUT,
567: 0x3d5, 0xfe, 0x0,
568:
569: OW, // Set the graphic cursor fg color
570: 0x3d4, 0xff0e,
571:
572: OW, // Set the graphic cursor bg color
573: 0x3d4, 0x000f,
574:
575: OB, // Set the Misc 1 reg
576: 0x3d4, 0x3a,
577:
578: METAOUT+MASKOUT,
579: 0x3d5, 0x62, 0x15,
580:
581: OB, // Disable 2K X 1K X 4 plane
582: 0x3d4, 0x31,
583:
584: METAOUT+MASKOUT,
585: 0x3d5, 0xe4, 0x08,
586:
587: OB, // Disable multiple pages
588: 0x3d4, 0x32,
589:
590: METAOUT+MASKOUT,
591: 0x3d5, 0xbf, 0x0,
592:
593: SELECTACCESSRANGE + ADVANCEDFUNCTIONCONTROL,
594:
595: OW, // Set either 800X600 or 1024X768
596: 0x4ae8, 0x07, // hi-res mode.
597:
598: SELECTACCESSRANGE + VARIOUSVGA,
599:
600: OB, // Set Misc out reg for external clock
601: 0x3c2, 0xef,
602:
603: METAOUT+SETCLK, // Set the clock
604:
605: METAOUT+DELAY, // Wait for the clock to settle down
606: 0x400, // S3 product alert Synchronization &
607: // Clock Skew.
608: METAOUT+VBLANK,
609: METAOUT+VBLANK,
610:
611: METAOUT+MASKOUT,
612: 0x3c5, 0xdf, 0x0,
613:
614: METAOUT+DELAY, // Wait for about 1 millisecond
615: 0x400, // for the monitor to settle down
616:
617: OW, // Enable all the planes through the DAC
618: 0x3c6, 0xff,
619:
620: SELECTACCESSRANGE + SYSTEMCONTROL,
621:
622: OW, // Lock S3 specific regs
623: 0x3d4, 0x0038,
624:
625: OW, // Lock more S3 specific regs
626: 0x3d4, 0x0039,
627:
628: EOD
629:
630: };
631:
632:
633: /*****************************************************************************
634: * S3 - 928 1280 X 1024 Enhanced mode init.
635: ****************************************************************************/
636: USHORT S3_928_1280_Enhanced_Mode[] = {
637:
638: SELECTACCESSRANGE + VARIOUSVGA,
639:
640: OB, // Make the screen dark
641: 0x3c6, 0x00,
642:
643: OW, // Async Reset
644: 0x3c4, 0x0100,
645:
646: OWM, // Sequencer Registers
647: 0x3c4,
648: 5,
649: 0x0300, 0x0101, 0x0F02, 0x0003, 0x0e04,
650:
651: METAOUT+INDXOUT, // Program the GDC
652: 0x3ce,
653: 9, 0,
654: 0x00, 0x00, 0x00, 0x00, 0x00,
655: 0x00, 0x05, 0x0f, 0xff,
656:
657: SELECTACCESSRANGE + SYSTEMCONTROL,
658:
659: OW, // Unlock the S3 specific regs
660: 0x3d4, 0x4838,
661:
662: OW, // Unlock the more S3 specific regs
663: 0x3d4, 0xA039,
664:
665: METAOUT+SETCRTC, // Program the CRTC regs
666:
667: // Set the Bt 485 DAC.
668:
669: OW, // hardware graphics cursor mode reg
670: 0X3D4, 0x2045,
671:
672: OW, // Enable access to Bt 485 CmdReg3
673: 0x3D4, 0x2955, // disable the DAC
674:
675: SELECTACCESSRANGE + VARIOUSVGA,
676:
677: OB,
678: 0x3C6, 0x80, // Bt 485 - CR0
679:
680: METAOUT+DELAY,
681: 0x400,
682:
683: SELECTACCESSRANGE + SYSTEMCONTROL,
684:
685: OW, // S3 extended video DAC control reg
686: 0x3D4, 0x2A55,
687:
688: SELECTACCESSRANGE + VARIOUSVGA,
689:
690: OB,
691: 0x3C8, 0x40, // Bt 485 - CR1
692:
693: METAOUT+DELAY,
694: 0x400,
695:
696: OB,
697: 0x3C9, 0x30, // Bt 485 - CR2
698:
699: METAOUT+DELAY,
700: 0x400,
701:
702: SELECTACCESSRANGE + SYSTEMCONTROL,
703:
704: OW, // S3 extened video DAC control reg
705: 0x3D4, 0x2855,
706:
707: SELECTACCESSRANGE + VARIOUSVGA,
708:
709: OB, // Bt 485
710: 0x3c8, 0x01,
711:
712: METAOUT+DELAY,
713: 0x400,
714:
715: SELECTACCESSRANGE + SYSTEMCONTROL,
716:
717: OW, // S3 extened video DAC control reg
718: 0x3D4, 0x2A55,
719:
720: SELECTACCESSRANGE + VARIOUSVGA,
721:
722: OB, // Bt 485 - CR3
723: 0x3c6, 0x08,
724:
725: METAOUT+DELAY,
726: 0x400,
727:
728: SELECTACCESSRANGE + SYSTEMCONTROL,
729:
730: OW, // Reset the palette index
731: 0x3d4, 0x2855,
732:
733: OW, // Set mode control
734: 0X3D4, 0x0242, // dot clock select
735:
736: METAOUT+DELAY,
737: 0x400,
738:
739: OW, // memory configuration
740: 0X3D4, 0x8f31,
741:
742: OW,
743: 0X3D4, 0x153a,
744:
745: OW, // extended system control reg
746: 0X3D4, 0x0050,
747:
748: OW, // backward compatibility reg
749: 0X3D4, 0x2033,
750:
751: OB, // extended mode reg
752: 0x3D4, 0x43,
753:
754: METAOUT+MASKOUT,
755: 0x3D5, 0x10, 0x00,
756:
757: OW, // extended system control reg 2
758: 0X3D4, 0x5051,
759:
760: OW,
761: 0X3D4, 0x025c, // flash bits, 20 packed mode.
762:
763: // METAOUT+BUSTEST,
764:
765: OW,
766: 0x3d4, 0x0a5a, // Set the low byte of the LAW
767:
768: OW,
769: 0x3d4, 0x0059, // Set the high byte of the LAW
770:
771: IB, // Prepare to prgram the ATC
772: 0x3da,
773:
774: SELECTACCESSRANGE + VARIOUSVGA,
775:
776: METAOUT+ATCOUT, // Program the ATC
777: 0x3c0,
778: 21, 0,
779: 0x00, 0x01, 0x02, 0x03, 0x04,
780: 0x05, 0x06, 0x07, 0x08, 0x09,
781: 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
782: 0x0f, 0x41, 0x00, 0x0f, 0x00,
783: 0x00,
784:
785: SELECTACCESSRANGE + SYSTEMCONTROL,
786:
787: IB, // Set ATC FF to index
788: 0x3da,
789:
790: SELECTACCESSRANGE + VARIOUSVGA,
791:
792: OB, // Enable the palette
793: 0x3c0, 0x20,
794:
795: SELECTACCESSRANGE + SYSTEMCONTROL,
796:
797: OW, // Enable 8514/a reg access
798: 0x3d4, 0x0140,
799:
800: SELECTACCESSRANGE + ADVANCEDFUNCTIONCONTROL,
801:
802: OW, // Galen said set to 0
803: 0x4ae8, 0x03, //
804:
805: SELECTACCESSRANGE + VARIOUSVGA,
806:
807: OB, // Set Misc out reg for external clock
808: 0x3c2, 0xef,
809:
810: METAOUT+SETCLK, // Set the clock
811:
812: METAOUT+DELAY, // Wait for the clock to settle down
813: 0x400, // S3 product alert Synchronization &
814: // Clock Skew.
815: METAOUT+VBLANK,
816: METAOUT+VBLANK,
817:
818: METAOUT+MASKOUT,
819: 0x3c5, 0xdf, 0x0,
820:
821: METAOUT+DELAY, // Wait for about 1 millisecond
822: 0x400, // for the monitor to settle down
823:
824: OW, // Enable all the planes through the DAC
825: 0x3c6, 0xff,
826:
827: SELECTACCESSRANGE + SYSTEMCONTROL,
828:
829: OW, // Lock S3 specific regs
830: 0x3d4, 0x0038,
831:
832: OW, // Lock more S3 specific regs
833: 0x3d4, 0x0039,
834:
835: EOD
836:
837: };
838:
839: /******************************************************************************
840: * 911/924 CRTC Values
841: *****************************************************************************/
842:
843: USHORT crtc911_640x480x60Hz[] = {
844:
845: SELECTACCESSRANGE + SYSTEMCONTROL,
846:
847: OW, // Unlock the S3 specific regs
848: 0x3d4, 0x4838,
849:
850: OW, // Data Xfer Execution Position reg
851: 0x3d4, 0x5a3b,
852:
853: OW, // S3R4 - Backwards Compatibility 3
854: 0x3d4, 0x1034,
855:
856: OW, // Lock S3 specific regs
857: 0x3d4, 0x0038,
858:
859: OW, // Unprotect CRTC regs
860: 0x3d4, 0x0011,
861:
862: METAOUT+INDXOUT, // Program the CRTC regs
863: 0x3d4,
864: 25, 0,
865: 0x5f, 0x4f, 0x50, 0x82, 0x54,
866: 0x80, 0x0b, 0x3e, 0x00, 0x40,
867: 0x00, 0x00, 0x00, 0x00, 0x00,
868: 0x00, 0xea, 0x8c, 0xdf, 0x80,
869: 0x60, 0xe7, 0x04, 0xab, 0xff,
870:
871: EOD
872: };
873:
874: USHORT crtc911_800x600x60Hz[] = {
875:
876: SELECTACCESSRANGE + SYSTEMCONTROL,
877:
878: OW, // Unlock the S3 specific regs
879: 0x3d4, 0x4838,
880:
881: OW, // Data Xfer Execution Position reg
882: 0x3d4, 0x7a3b,
883:
884: OW, // S3R4 - Backwards Compatibility 3
885: 0x3d4, 0x1034,
886:
887: OW, // Lock S3 specific regs
888: 0x3d4, 0x0038,
889:
890: OW, // Unprotect CRTC regs
891: 0x3d4, 0x0011,
892:
893: METAOUT+INDXOUT, // Program the CRTC regs
894: 0x3d4,
895: 25, 0,
896: 0x7f, 0x63, 0x64, 0x82, 0x6a,
897: 0x1a, 0x74, 0xf0, 0x00, 0x60,
898: 0x00, 0x00, 0x00, 0x00, 0x00,
899: 0x00, 0x58, 0x8c, 0x57, 0x80,
900: 0x00, 0x57, 0x73, 0xe3, 0xff,
901:
902:
903: EOD
904: };
905:
906: USHORT crtc911_1024x768x60Hz[] = {
907:
908: SELECTACCESSRANGE + SYSTEMCONTROL,
909:
910: OW, // Unlock the S3 specific regs
911: 0x3d4, 0x4838,
912:
913: OW, // Data Xfer Execution Position reg
914: 0x3d4, 0x9f3b,
915:
916: OW, // S3R4 - Backwards Compatibility 3
917: 0x3d4, 0x1034,
918:
919: OW, // Lock S3 specific regs
920: 0x3d4, 0x0038,
921:
922: OW, // Unprotect CRTC regs
923: 0x3d4, 0x0011,
924:
925: METAOUT+INDXOUT, // Program the CRTC
926: 0x3d4,
927: 25, 0,
928: 0xa4, 0x7f, 0x80, 0x87, 0x84,
929: 0x95, 0x25, 0xf5, 0x00, 0x60,
930: 0x00, 0x00, 0x00, 0x00, 0x00,
931: 0x00, 0x02, 0x87, 0xff, 0x80,
932: 0x60, 0xff, 0x21, 0xab, 0xff,
933:
934: EOD
935: };
936:
937:
938:
939: USHORT crtc911_640x480x70Hz[] = {
940:
941: SELECTACCESSRANGE + SYSTEMCONTROL,
942:
943: OW, // Unlock the S3 specific regs
944: 0x3d4, 0x4838,
945:
946: OW, // Data Xfer Execution Position reg
947: 0x3d4, 0x5e3b,
948:
949: OW, // S3R4 - Backwards Compatibility 3
950: 0x3d4, 0x1034,
951:
952: OW, // Lock S3 specific regs
953: 0x3d4, 0x0038,
954:
955: OW, // Unprotect CRTC regs
956: 0x3d4, 0x0011,
957:
958: METAOUT+INDXOUT, // Program the CRTC regs
959: 0x3d4,
960: 25, 0,
961: 0x63, 0x4f, 0x50, 0x86, 0x53,
962: 0x97, 0x07, 0x3e, 0x00, 0x40,
963: 0x00, 0x00, 0x00, 0x00, 0x00,
964: 0x00, 0xe8, 0x8b, 0xdf, 0x80,
965: 0x60, 0xdf, 0x07, 0xab, 0xff,
966:
967:
968: EOD
969: };
970:
971: USHORT crtc911_800x600x70Hz[] = {
972:
973: SELECTACCESSRANGE + SYSTEMCONTROL,
974:
975: OW, // Unlock the S3 specific regs
976: 0x3d4, 0x4838,
977:
978: OW, // Data Xfer Execution Position reg
979: 0x3d4, 0x783b,
980:
981: OW, // S3R4 - Backwards Compatibility 3
982: 0x3d4, 0x1034,
983:
984: OW, // Lock S3 specific regs
985: 0x3d4, 0x0038,
986:
987: OW, // Unprotect CRTC regs
988: 0x3d4, 0x0011,
989:
990: METAOUT+INDXOUT, // Program the CRTC regs
991: 0x3d4,
992: 25, 0,
993: 0x7d, 0x63, 0x64, 0x80, 0x69,
994: 0x1a, 0x98, 0xf0, 0x00, 0x60,
995: 0x00, 0x00, 0x00, 0x00, 0x00,
996: 0x00, 0x7c, 0xa2, 0x57, 0x80,
997: 0x00, 0x57, 0x98, 0xe3, 0xff,
998:
999:
1000:
1001: EOD
1002: };
1003:
1004: USHORT crtc911_1024x768x70Hz[] = {
1005:
1006: SELECTACCESSRANGE + SYSTEMCONTROL,
1007:
1008: OW, // Unlock the S3 specific regs
1009: 0x3d4, 0x4838,
1010:
1011: OW, // Data Xfer Execution Position reg
1012: 0x3d4, 0x9d3b,
1013:
1014: OW, // S3R4 - Backwards Compatibility 3
1015: 0x3d4, 0x1034,
1016:
1017: OW, // Lock S3 specific regs
1018: 0x3d4, 0x0038,
1019:
1020: OW, // Unprotect CRTC regs
1021: 0x3d4, 0x0011,
1022:
1023: METAOUT+INDXOUT, // Program the CRTC regs
1024: 0x3d4,
1025: 25, 0,
1026: 0xa2, 0x7f, 0x80, 0x85, 0x84,
1027: 0x95, 0x24, 0xf5, 0x00, 0x60,
1028: 0x00, 0x00, 0x00, 0x00, 0x00,
1029: 0x00, 0x02, 0x88, 0xff, 0x80,
1030: 0x60, 0xff, 0x24, 0xab, 0xff,
1031:
1032: EOD
1033: };
1034:
1035: /*****************************************************************************
1036: * 801 / 805 CRTC values
1037: ****************************************************************************/
1038:
1039: USHORT crtc801_640x480x60Hz[] = {
1040:
1041: SELECTACCESSRANGE + SYSTEMCONTROL,
1042:
1043: OW, // Unlock the S3 specific regs
1044: 0x3d4, 0x4838,
1045:
1046: OW, // Unlock the more S3 specific regs
1047: 0x3d4, 0xA039,
1048:
1049: OW, // Data Xfer Execution Position reg
1050: 0x3d4, 0x5a3b,
1051:
1052: OW, // S3R4 - Backwards Compatibility 3
1053: 0x3d4, 0x1034,
1054:
1055: OW, // Unprotect CRTC regs
1056: 0x3d4, 0x0011,
1057:
1058: METAOUT+INDXOUT, // Program the CRTC regs
1059: 0x3d4,
1060: 25, 0,
1061: 0x5f, 0x4f, 0x50, 0x82, 0x54,
1062: 0x80, 0x0b, 0x3e, 0x00, 0x40,
1063: 0x00, 0x00, 0x00, 0x00, 0x00,
1064: 0x00, 0xea, 0x8c, 0xdf, 0x80,
1065: 0x60, 0xe7, 0x04, 0xab, 0xff,
1066:
1067: OW,
1068: 0X3D4, 0x005d,
1069:
1070: OW,
1071: 0X3D4, 0x005e,
1072:
1073: EOD
1074: };
1075:
1076: USHORT crtc801_640x480x70Hz[] = {
1077:
1078: SELECTACCESSRANGE + SYSTEMCONTROL,
1079:
1080: OW, // Unlock the S3 specific regs
1081: 0x3d4, 0x4838,
1082:
1083: OW, // Unlock the more S3 specific regs
1084: 0x3d4, 0xA039,
1085:
1086: OW, // Data Xfer Execution Position reg
1087: 0x3d4, 0x5e3b,
1088:
1089: OW, // S3R4 - Backwards Compatibility 3
1090: 0x3d4, 0x1034,
1091:
1092: OW, // Unprotect CRTC regs
1093: 0x3d4, 0x0011,
1094:
1095: METAOUT+INDXOUT, // Program the CRTC regs
1096: 0x3d4,
1097: 25, 0,
1098: 0x63, 0x4f, 0x50, 0x86, 0x53,
1099: 0x97, 0x07, 0x3e, 0x00, 0x40,
1100: 0x00, 0x00, 0x00, 0x00, 0x00,
1101: 0x00, 0xe8, 0x8b, 0xdf, 0x80,
1102: 0x60, 0xdf, 0x07, 0xab, 0xff,
1103:
1104: OW,
1105: 0X3D4, 0x005d,
1106:
1107: OW,
1108: 0X3D4, 0x005e,
1109:
1110: EOD
1111: };
1112:
1113:
1114:
1115: USHORT crtc801_800x600x60Hz[] = {
1116:
1117: SELECTACCESSRANGE + SYSTEMCONTROL,
1118:
1119: OW, // Unlock the S3 specific regs
1120: 0x3d4, 0x4838,
1121:
1122: OW, // Unlock the more S3 specific regs
1123: 0x3d4, 0xA039,
1124:
1125: OW, // Data Xfer Execution Position reg
1126: 0x3d4, 0x7a3b,
1127:
1128: OW, // S3R4 - Backwards Compatibility 3
1129: 0x3d4, 0x1034,
1130:
1131: OW, // Unprotect CRTC regs
1132: 0x3d4, 0x0011,
1133:
1134: METAOUT+INDXOUT, // Program the CRTC regs
1135: 0x3d4,
1136: 25, 0,
1137: 0x7f, 0x63, 0x64, 0x82,
1138: 0x6a, 0x1a, 0x74, 0xf0,
1139: 0x00, 0x60, 0x00, 0x00,
1140: 0x00, 0x00, 0xff, 0x00,
1141: 0x58, 0x8c, 0x57, 0x80,
1142: 0x00, 0x57, 0x73, 0xe3,
1143: 0xff,
1144:
1145: OW,
1146: 0X3D4, 0x005d,
1147:
1148: OW,
1149: 0X3D4, 0x005e,
1150:
1151: EOD
1152: };
1153:
1154: USHORT crtc801_800x600x70Hz[] = {
1155:
1156: SELECTACCESSRANGE + SYSTEMCONTROL,
1157:
1158: OW, // Unlock the S3 specific regs
1159: 0x3d4, 0x4838,
1160:
1161: OW, // Unlock the more S3 specific regs
1162: 0x3d4, 0xA039,
1163:
1164: OW, // Data Xfer Execution Position reg
1165: 0x3d4, 0x783b,
1166:
1167: OW, // S3R4 - Backwards Compatibility 3
1168: 0x3d4, 0x1034,
1169:
1170: OW, // Unprotect CRTC regs
1171: 0x3d4, 0x0011,
1172:
1173: METAOUT+INDXOUT, // Program the CRTC regs
1174: 0x3d4,
1175: 25, 0,
1176: 0x7d, 0x63, 0x64, 0x80,
1177: 0x6c, 0x1b, 0x98, 0xf0,
1178: 0x00, 0x60, 0x00, 0x00,
1179: 0x00, 0x00, 0xff, 0x00,
1180: 0x7c, 0xa2, 0x57, 0x80,
1181: 0x00, 0x57, 0x98, 0xe3,
1182: 0xff,
1183:
1184: OW,
1185: 0X3D4, 0x005d,
1186:
1187: OW,
1188: 0X3D4, 0x005e,
1189:
1190: EOD
1191: };
1192:
1193:
1194:
1195:
1196: USHORT crtc801_1024x768x60Hz[] = {
1197:
1198: SELECTACCESSRANGE + SYSTEMCONTROL,
1199:
1200: OW, // Unlock the S3 specific regs
1201: 0x3d4, 0x4838,
1202:
1203: OW, // Unlock the more S3 specific regs
1204: 0x3d4, 0xA039,
1205:
1206: OW, // Data Xfer Execution Position reg
1207: 0x3d4, 0x9d3b,
1208:
1209: OW, // S3R4 - Backwards Compatibility 3
1210: 0x3d4, 0x1034,
1211:
1212: OW, // Unprotect CRTC regs
1213: 0x3d4, 0x0011,
1214:
1215: METAOUT+INDXOUT, // Program the CRTC regs
1216: 0x3d4,
1217: 25, 0,
1218: 0xa3, 0x7f, 0x80, 0x86,
1219: 0x84, 0x95, 0x25, 0xf5,
1220: 0x00, 0x60, 0x00, 0x00,
1221: 0x00, 0x00, 0xff, 0x00,
1222: 0x02, 0x87, 0xff, 0x80,
1223: 0x60, 0xff, 0x21, 0xeb,
1224: 0xff,
1225:
1226: OW,
1227: 0X3D4, 0x005d,
1228:
1229: OW,
1230: 0X3D4, 0x005e,
1231:
1232: EOD
1233: };
1234:
1235: USHORT crtc801_1024x768x70Hz[] = {
1236:
1237: SELECTACCESSRANGE + SYSTEMCONTROL,
1238:
1239: OW, // Unlock the S3 specific regs
1240: 0x3d4, 0x4838,
1241:
1242: OW, // Unlock the more S3 specific regs
1243: 0x3d4, 0xA039,
1244:
1245: OW, // Data Xfer Execution Position reg
1246: 0x3d4, 0x9d3b,
1247:
1248: OW, // S3R4 - Backwards Compatibility 3
1249: 0x3d4, 0x1034,
1250:
1251: OW, // Unprotect CRTC regs
1252: 0x3d4, 0x0011,
1253:
1254: METAOUT+INDXOUT, // Program the CRTC regs
1255: 0x3d4,
1256: 25, 0,
1257: 0xa1, 0x7f, 0x80, 0x84,
1258: 0x84, 0x95, 0x24, 0xf5,
1259: 0x00, 0x60, 0x00, 0x00,
1260: 0x00, 0x00, 0x0b, 0x00,
1261: 0x02, 0x88, 0xff, 0x80,
1262: 0x60, 0xff, 0x24, 0xeb,
1263: 0xff,
1264:
1265: OW,
1266: 0X3D4, 0x005d,
1267:
1268: OW,
1269: 0X3D4, 0x005e,
1270:
1271: EOD
1272: };
1273:
1274: /*****************************************************************************
1275: * 928 CRTC values
1276: ****************************************************************************/
1277:
1278: USHORT crtc928_640x480x60Hz[] = {
1279:
1280: SELECTACCESSRANGE + SYSTEMCONTROL,
1281:
1282: OW, // Unlock the S3 specific regs
1283: 0x3d4, 0x4838,
1284:
1285: OW, // Unlock the more S3 specific regs
1286: 0x3d4, 0xA039,
1287:
1288: OW, // Data Xfer Execution Position reg
1289: 0x3d4, 0x5a3b,
1290:
1291: OW, // S3R4 - Backwards Compatibility 3
1292: 0x3d4, 0x1034,
1293:
1294: OW, // Unprotect CRTC regs
1295: 0x3d4, 0x0011,
1296:
1297: METAOUT+INDXOUT, // Program the CRTC regs
1298: 0x3d4,
1299: 25, 0,
1300: 0x5f, 0x4f, 0x50, 0x82, 0x54,
1301: 0x80, 0x0b, 0x3e, 0x00, 0x40,
1302: 0x00, 0x00, 0x00, 0x00, 0x00,
1303: 0x00, 0xea, 0x8c, 0xdf, 0x80,
1304: 0x60, 0xe7, 0x04, 0xab, 0xff,
1305:
1306: OW,
1307: 0X3D4, 0x005d,
1308:
1309: OW,
1310: 0X3D4, 0x005e,
1311:
1312: EOD
1313: };
1314:
1315: USHORT crtc928_640x480x70Hz[] = {
1316:
1317: SELECTACCESSRANGE + SYSTEMCONTROL,
1318:
1319: OW, // Unlock the S3 specific regs
1320: 0x3d4, 0x4838,
1321:
1322: OW, // Unlock the more S3 specific regs
1323: 0x3d4, 0xA039,
1324:
1325: OW, // Data Xfer Execution Position reg
1326: 0x3d4, 0x5e3b,
1327:
1328: OW, // S3R4 - Backwards Compatibility 3
1329: 0x3d4, 0x1034,
1330:
1331: OW, // Unprotect CRTC regs
1332: 0x3d4, 0x0011,
1333:
1334: METAOUT+INDXOUT, // Program the CRTC regs
1335: 0x3d4,
1336: 25, 0,
1337: 0x63, 0x4f, 0x50, 0x86, 0x53,
1338: 0x97, 0x07, 0x3e, 0x00, 0x40,
1339: 0x00, 0x00, 0x00, 0x00, 0x00,
1340: 0x00, 0xe8, 0x8b, 0xdf, 0x80,
1341: 0x60, 0xdf, 0x07, 0xab, 0xff,
1342:
1343: OW,
1344: 0X3D4, 0x005d,
1345:
1346: OW,
1347: 0X3D4, 0x005e,
1348:
1349: EOD
1350: };
1351:
1352:
1353:
1354: USHORT crtc928_800x600x60Hz[] = {
1355:
1356: SELECTACCESSRANGE + SYSTEMCONTROL,
1357:
1358: OW, // Unlock the S3 specific regs
1359: 0x3d4, 0x4838,
1360:
1361: OW, // Unlock the more S3 specific regs
1362: 0x3d4, 0xA039,
1363:
1364: OW, // Data Xfer Execution Position reg
1365: 0x3d4, 0x7a3b,
1366:
1367: OW, // S3R4 - Backwards Compatibility 3
1368: 0x3d4, 0x1034,
1369:
1370: OW, // Unprotect CRTC regs
1371: 0x3d4, 0x0011,
1372:
1373: METAOUT+INDXOUT, // Program the CRTC regs
1374: 0x3d4,
1375: 25, 0,
1376: 0x7f, 0x63, 0x64, 0x82,
1377: 0x6a, 0x1a, 0x74, 0xf0,
1378: 0x00, 0x60, 0x00, 0x00,
1379: 0x00, 0x00, 0xff, 0x00,
1380: 0x58, 0x8c, 0x57, 0x80,
1381: 0x00, 0x57, 0x73, 0xe3,
1382: 0xff,
1383:
1384: OW,
1385: 0X3D4, 0x005d,
1386:
1387: OW,
1388: 0X3D4, 0x005e,
1389:
1390: EOD
1391: };
1392:
1393: USHORT crtc928_800x600x70Hz[] = {
1394:
1395: SELECTACCESSRANGE + SYSTEMCONTROL,
1396:
1397: OW, // Unlock the S3 specific regs
1398: 0x3d4, 0x4838,
1399:
1400: OW, // Unlock the more S3 specific regs
1401: 0x3d4, 0xA039,
1402:
1403: OW, // Data Xfer Execution Position reg
1404: 0x3d4, 0x783b,
1405:
1406: OW, // S3R4 - Backwards Compatibility 3
1407: 0x3d4, 0x1034,
1408:
1409: OW, // Unprotect CRTC regs
1410: 0x3d4, 0x0011,
1411:
1412: METAOUT+INDXOUT, // Program the CRTC regs
1413: 0x3d4,
1414: 25, 0,
1415: 0x7d, 0x63, 0x64, 0x80,
1416: 0x6c, 0x1b, 0x98, 0xf0,
1417: 0x00, 0x60, 0x00, 0x00,
1418: 0x00, 0x00, 0xff, 0x00,
1419: 0x7c, 0xa2, 0x57, 0x80,
1420: 0x00, 0x57, 0x98, 0xe3,
1421: 0xff,
1422:
1423: OW,
1424: 0X3D4, 0x005d,
1425:
1426: OW,
1427: 0X3D4, 0x005e,
1428:
1429: EOD
1430: };
1431:
1432:
1433:
1434: /******************************************************************************
1435: * CRTC values for S3-928 in 1024x768 @ 60Hz
1436: *****************************************************************************/
1437: USHORT crtc928_1024x768x60Hz[] = {
1438:
1439: SELECTACCESSRANGE + SYSTEMCONTROL,
1440:
1441: OW, // S3R4 - Backwards Compatibility 3
1442: 0x3d4, 0x0034,
1443:
1444: OW, // Unprotect CRTC regs
1445: 0x3d4, 0x0011,
1446:
1447: METAOUT+INDXOUT, // Program the CRTC regs
1448: 0x3d4,
1449: 25, 0,
1450: 0xa3, 0x7f, 0x80, 0x86,
1451: 0x84, 0x95, 0x25, 0xf5,
1452: 0x00, 0x60, 0x00, 0x00,
1453: 0x00, 0x00, 0xff, 0x00,
1454: 0x02, 0x07, 0xff, 0x80,
1455: 0x60, 0xff, 0x21, 0xeb,
1456: 0xff,
1457:
1458: OW, // overlfow regs
1459: 0X3D4, 0x005d,
1460:
1461: OW, // more overflow regs
1462: 0X3D4, 0x005e,
1463:
1464: EOD
1465: };
1466:
1467: /******************************************************************************
1468: * CRTC values for S3-928 in 1024x768 @ 70Hz
1469: *****************************************************************************/
1470: USHORT crtc928_1024x768x70Hz[] = {
1471:
1472: SELECTACCESSRANGE + SYSTEMCONTROL,
1473:
1474: OW, // S3R4 - Backwards Compatibility 3
1475: 0x3d4, 0x0034,
1476:
1477: OW, // Unprotect CRTC regs
1478: 0x3d4, 0x0011,
1479:
1480: METAOUT+INDXOUT, // Program the CRTC regs
1481: 0x3d4,
1482: 25, 0,
1483: 0xa1, 0x7f, 0x80, 0x84,
1484: 0x84, 0x95, 0x24, 0xf5,
1485: 0x00, 0x60, 0x00, 0x00,
1486: 0x00, 0x00, 0x0b, 0x00,
1487: 0x02, 0x88, 0xff, 0x80,
1488: 0x60, 0xff, 0x24, 0xeb,
1489: 0xff,
1490:
1491: OW, // overflow regs
1492: 0X3D4, 0x005d,
1493:
1494: OW, // more overflow regs
1495: 0X3D4, 0x405e,
1496:
1497: EOD
1498: };
1499:
1500:
1501: /******************************************************************************
1502: * CRTC values for S3-928 in 1280X1024 @ 60Hz
1503: *****************************************************************************/
1504: USHORT crtc928_1280x1024x60Hz[] = {
1505:
1506: SELECTACCESSRANGE + SYSTEMCONTROL,
1507:
1508: OW, // S3R4 - Backwards Compatibility 3
1509: 0x3d4, 0x0034,
1510:
1511: OW, // Unprotect CRTC regs
1512: 0x3d4, 0x0011,
1513:
1514: METAOUT+INDXOUT, // Program the CRTC regs
1515: 0x3d4,
1516: 25, 0,
1517: 0x30, 0x27, 0x29, 0x96,
1518: 0x29, 0x8d, 0x28, 0x5a,
1519: 0x00, 0x60, 0x00, 0x00,
1520: 0x00, 0x00, 0xff, 0x00,
1521: 0x05, 0x09, 0xff, 0x00, // reg 19 == 50 for packed
1522: 0x00, 0xff, 0x29, 0xe3,
1523: 0xff,
1524:
1525: OW, // overflow regs
1526: 0X3D4, 0x005d,
1527:
1528: OW, // more overflow regs
1529: 0X3D4, 0x515e,
1530:
1531: EOD
1532: };
1533:
1534:
1535: /******************************************************************************
1536: * CRTC values for S3-928 in 1280X1024 @ 70Hz
1537: *****************************************************************************/
1538: USHORT crtc928_1280x1024x70Hz[] = {
1539:
1540: SELECTACCESSRANGE + SYSTEMCONTROL,
1541:
1542: OW, // S3R4 - Backwards Compatibility 3
1543: 0x3d4, 0x0034,
1544:
1545: OW, // Unprotect CRTC regs
1546: 0x3d4, 0x0011,
1547:
1548: METAOUT+INDXOUT, // Program the CRTC regs
1549: 0x3d4,
1550: 25, 0,
1551: 0x2f, 0x27, 0x29, 0x95,
1552: 0x29, 0x8d, 0x28, 0x5a,
1553: 0x00, 0x60, 0x00, 0x00,
1554: 0x00, 0x00, 0xff, 0x00,
1555: 0x05, 0x09, 0xff, 0x00, // reg 19 == 50 for packed
1556: 0x00, 0xff, 0x29, 0xe3,
1557: 0xff,
1558:
1559: OW, // overflow regs
1560: 0X3D4, 0x005d,
1561:
1562: OW, // more overflow regs
1563: 0X3D4, 0x515e,
1564:
1565: EOD
1566:
1567: };
1568:
1569: /****************************************************************************
1570: * Chip & Board Specific Mode Selection Tables
1571: ***************************************************************************/
1572:
1573:
1574: ULONG aulGenericClk[] = {
1575: 0, // 640 x 480 @ 60Hz
1576: 0, // 640 x 480 @ 60Hz
1577: 0, // 640 x 480 @ 60Hz
1578: 0, // 640 x 480 @ 60Hz
1579: 0xB, // 640 x 480 @ 72Hz
1580: 2, // 800 x 600 @ 60Hz
1581: 2, // 800 x 600 @ 60Hz
1582: 2, // 800 x 600 @ 60Hz
1583: 2, // 800 x 600 @ 60Hz
1584: 4, // 800 x 600 @ 72Hz
1585: 0xD, // 1024 x 768 @ 60Hz
1586: 0xD, // 1024 x 768 @ 60Hz
1587: 0xD, // 1024 x 768 @ 60Hz
1588: 0xD, // 1024 x 768 @ 60Hz
1589: 0xE // 1024 x 768 @ 72Hz
1590: };
1591:
1592: ULONG aulOrchidClk[] = {
1593: 0, // 640 x 480 @ 60Hz
1594: 0, // 640 x 480 @ 60Hz
1595: 0, // 640 x 480 @ 60Hz
1596: 0, // 640 x 480 @ 60Hz
1597: 2, // 640 x 480 @ 72Hz
1598: 4, // 800 x 600 @ 60Hz
1599: 4, // 800 x 600 @ 60Hz
1600: 4, // 800 x 600 @ 60Hz
1601: 4, // 800 x 600 @ 60Hz
1602: 6, // 800 x 600 @ 72Hz
1603: 7, // 1024 x 768 @ 60Hz
1604: 7, // 1024 x 768 @ 60Hz
1605: 7, // 1024 x 768 @ 60Hz
1606: 7, // 1024 x 768 @ 60Hz
1607: 0xB // 1024 x 768 @ 72Hz
1608: };
1609:
1610: ULONG aulNumberNineClk[] = {
1611: 25175000, // 640 x 480 @ 60Hz
1612: 25175000, // 640 x 480 @ 60Hz
1613: 25175000, // 640 x 480 @ 60Hz
1614: 25175000, // 640 x 480 @ 60Hz
1615: 31500000, // 640 x 480 @ 72Hz
1616: 40000000, // 800 x 600 @ 60Hz
1617: 40000000, // 800 x 600 @ 60Hz
1618: 40000000, // 800 x 600 @ 60Hz
1619: 40000000, // 800 x 600 @ 60Hz
1620: 50000000, // 800 x 600 @ 72Hz
1621: 65000000, // 1024 x 768 @ 60Hz
1622: 65000000, // 1024 x 768 @ 60Hz
1623: 65000000, // 1024 x 768 @ 60Hz
1624: 65000000, // 1024 x 768 @ 60Hz
1625: 77000000, // 1024 x 768 @ 72Hz
1626: 55000000, // 1280 X 1024 @ 60Hz
1627: 55000000, // 1280 X 1024 @ 60Hz
1628: 55000000, // 1280 X 1024 @ 60Hz
1629: 55000000, // 1280 X 1024 @ 60Hz
1630: 64000000 // 1280 X 1024 @ 72Hz
1631: };
1632:
1633: #endif
1634:
1635: //
1636: // Video mode table - Lists the information about each individual mode
1637: //
1638:
1639: //
1640: // BUGBUG
1641: // Need to create mode table values for 43Hz and 56Hz for all
1642: // resolutions.
1643: //
1644:
1645: S3_VIDEO_MODES S3Modes[] = {
1646: {
1647: FALSE, // Is this mode currently supported
1648: 0x00100000, // Required Video memory for this mode
1649: 0x0201, // Int 10 mode number
1650: NULL, NULL, NULL, // CRTC tables for NON-int10 modes.
1651: {
1652: sizeof(VIDEO_MODE_INFORMATION), // Size of the mode informtion structure
1653: 0, // Mode index used in setting the mode
1654: 640, // X Resolution, in pixels
1655: 480, // Y Resolution, in pixels
1656: 1024, // Screen stride, in bytes (distance
1657: // between the start point of two
1658: // consecutive scan lines, in bytes)
1659: 1, // Number of video memory planes
1660: 8, // Number of bits per plane
1661: 1, // Screen Frequency, in Hertz
1662: 330, // Horizontal size of screen in millimeters
1663: 240, // Vertical size of screen in millimeters
1664: 6, // Number Red pixels in DAC
1665: 6, // Number Green pixels in DAC
1666: 6, // Number Blue pixels in DAC
1667: 0x00000000, // Mask for Red Pixels in non-palette modes
1668: 0x00000000, // Mask for Green Pixels in non-palette modes
1669: 0x00000000, // Mask for Blue Pixels in non-palette modes
1670: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1671: VIDEO_MODE_MANAGED_PALETTE, // Mode description flags.
1672: 1024, // Video Memory Bitmap Width
1673: 1024 // Video Memory Bitmap Height
1674: }
1675: },
1676:
1677: {
1678: FALSE,
1679: 0x00100000,
1680: 0x0201,
1681: NULL, NULL, NULL,
1682: {
1683: sizeof(VIDEO_MODE_INFORMATION),
1684: 0,
1685: 640,
1686: 480,
1687: 1024,
1688: 1,
1689: 8,
1690: 43,
1691: 330,
1692: 240,
1693: 6,
1694: 6,
1695: 6,
1696: 0x00000000,
1697: 0x00000000,
1698: 0x00000000,
1699: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1700: VIDEO_MODE_MANAGED_PALETTE,
1701: 1024,
1702: 1024
1703: }
1704: },
1705:
1706: {
1707: FALSE,
1708: 0x00100000,
1709: 0x0201,
1710: NULL, NULL, NULL,
1711: {
1712: sizeof(VIDEO_MODE_INFORMATION),
1713: 0,
1714: 640,
1715: 480,
1716: 1024,
1717: 1,
1718: 8,
1719: 56,
1720: 330,
1721: 240,
1722: 6,
1723: 6,
1724: 6,
1725: 0x00000000,
1726: 0x00000000,
1727: 0x00000000,
1728: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1729: VIDEO_MODE_MANAGED_PALETTE,
1730: 1024,
1731: 1024
1732: }
1733: },
1734:
1735: {
1736: FALSE,
1737: 0x00100000,
1738: 0x0201,
1739: #ifndef i386
1740: crtc911_640x480x60Hz, crtc801_640x480x60Hz, crtc928_640x480x60Hz,
1741: #else
1742: NULL, NULL, NULL,
1743: #endif
1744: {
1745: sizeof(VIDEO_MODE_INFORMATION),
1746: 0,
1747: 640,
1748: 480,
1749: 1024,
1750: 1,
1751: 8,
1752: 60,
1753: 330,
1754: 240,
1755: 6,
1756: 6,
1757: 6,
1758: 0x00000000,
1759: 0x00000000,
1760: 0x00000000,
1761: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1762: VIDEO_MODE_MANAGED_PALETTE,
1763: 1024,
1764: 1024
1765: }
1766: },
1767:
1768: {
1769: FALSE,
1770: 0x00100000,
1771: 0x0201,
1772: #ifndef i386
1773: crtc911_640x480x70Hz, crtc801_640x480x70Hz, crtc928_640x480x70Hz,
1774: #else
1775: NULL, NULL, NULL,
1776: #endif
1777: {
1778: sizeof(VIDEO_MODE_INFORMATION),
1779: 0,
1780: 640,
1781: 480,
1782: 1024,
1783: 1,
1784: 8,
1785: 72,
1786: 330,
1787: 240,
1788: 6,
1789: 6,
1790: 6,
1791: 0x00000000,
1792: 0x00000000,
1793: 0x00000000,
1794: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1795: VIDEO_MODE_MANAGED_PALETTE,
1796: 1024,
1797: 1024
1798: }
1799: },
1800:
1801: {
1802: FALSE,
1803: 0x00100000,
1804: 0x0203,
1805: NULL, NULL, NULL,
1806: {
1807: sizeof(VIDEO_MODE_INFORMATION),
1808: 0,
1809: 800,
1810: 600,
1811: 1024,
1812: 1,
1813: 8,
1814: 1,
1815: 330,
1816: 240,
1817: 6,
1818: 6,
1819: 6,
1820: 0x00000000,
1821: 0x00000000,
1822: 0x00000000,
1823: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1824: VIDEO_MODE_MANAGED_PALETTE,
1825: 1024,
1826: 1024
1827: }
1828: },
1829:
1830: {
1831: FALSE,
1832: 0x00100000,
1833: 0x0203,
1834: NULL, NULL, NULL,
1835: {
1836: sizeof(VIDEO_MODE_INFORMATION),
1837: 0,
1838: 800,
1839: 600,
1840: 1024,
1841: 1,
1842: 8,
1843: 43,
1844: 330,
1845: 240,
1846: 6,
1847: 6,
1848: 6,
1849: 0x00000000,
1850: 0x00000000,
1851: 0x00000000,
1852: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1853: VIDEO_MODE_MANAGED_PALETTE,
1854: 1024,
1855: 1024
1856: }
1857: },
1858:
1859: {
1860: FALSE,
1861: 0x00100000,
1862: 0x0203,
1863: NULL, NULL, NULL,
1864: {
1865: sizeof(VIDEO_MODE_INFORMATION),
1866: 0,
1867: 800,
1868: 600,
1869: 1024,
1870: 1,
1871: 8,
1872: 56,
1873: 330,
1874: 240,
1875: 6,
1876: 6,
1877: 6,
1878: 0x00000000,
1879: 0x00000000,
1880: 0x00000000,
1881: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1882: VIDEO_MODE_MANAGED_PALETTE,
1883: 1024,
1884: 1024
1885: }
1886: },
1887:
1888: {
1889: FALSE,
1890: 0x00100000,
1891: 0x0203,
1892: #ifndef i386
1893: crtc911_800x600x60Hz, crtc801_800x600x60Hz, crtc928_800x600x60Hz,
1894: #else
1895: NULL, NULL, NULL,
1896: #endif
1897: {
1898: sizeof(VIDEO_MODE_INFORMATION),
1899: 0,
1900: 800,
1901: 600,
1902: 1024,
1903: 1,
1904: 8,
1905: 60,
1906: 330,
1907: 240,
1908: 6,
1909: 6,
1910: 6,
1911: 0x00000000,
1912: 0x00000000,
1913: 0x00000000,
1914: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1915: VIDEO_MODE_MANAGED_PALETTE,
1916: 1024,
1917: 1024
1918: }
1919: },
1920:
1921: {
1922: FALSE,
1923: 0x00100000,
1924: 0x0203,
1925: #ifndef i386
1926: crtc911_800x600x70Hz, crtc801_800x600x70Hz, crtc928_800x600x70Hz,
1927: #else
1928: NULL, NULL, NULL,
1929: #endif
1930: {
1931: sizeof(VIDEO_MODE_INFORMATION),
1932: 0,
1933: 800,
1934: 600,
1935: 1024,
1936: 1,
1937: 8,
1938: 72,
1939: 330,
1940: 240,
1941: 6,
1942: 6,
1943: 6,
1944: 0x00000000,
1945: 0x00000000,
1946: 0x00000000,
1947: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1948: VIDEO_MODE_MANAGED_PALETTE,
1949: 1024,
1950: 1024
1951: }
1952: },
1953:
1954: {
1955: FALSE,
1956: 0x00100000,
1957: 0x0205,
1958: NULL, NULL, NULL,
1959: {
1960: sizeof(VIDEO_MODE_INFORMATION),
1961: 0,
1962: 1024,
1963: 768,
1964: 1024,
1965: 1,
1966: 8,
1967: 1,
1968: 330,
1969: 240,
1970: 6,
1971: 6,
1972: 6,
1973: 0x00000000,
1974: 0x00000000,
1975: 0x00000000,
1976: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
1977: VIDEO_MODE_MANAGED_PALETTE,
1978: 1024,
1979: 1024
1980: }
1981: },
1982:
1983: {
1984: FALSE,
1985: 0x00100000,
1986: 0x0205,
1987: NULL, NULL, NULL,
1988: {
1989: sizeof(VIDEO_MODE_INFORMATION),
1990: 0,
1991: 1024,
1992: 768,
1993: 1024,
1994: 1,
1995: 8,
1996: 43,
1997: 330,
1998: 240,
1999: 6,
2000: 6,
2001: 6,
2002: 0x00000000,
2003: 0x00000000,
2004: 0x00000000,
2005: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2006: VIDEO_MODE_MANAGED_PALETTE,
2007: 1024,
2008: 1024
2009: }
2010: },
2011:
2012: {
2013: FALSE,
2014: 0x00100000,
2015: 0x0205,
2016: NULL, NULL, NULL,
2017: {
2018: sizeof(VIDEO_MODE_INFORMATION),
2019: 0,
2020: 1024,
2021: 768,
2022: 1024,
2023: 1,
2024: 8,
2025: 56,
2026: 330,
2027: 240,
2028: 6,
2029: 6,
2030: 6,
2031: 0x00000000,
2032: 0x00000000,
2033: 0x00000000,
2034: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2035: VIDEO_MODE_MANAGED_PALETTE,
2036: 1024,
2037: 1024
2038: }
2039: },
2040:
2041: {
2042: FALSE,
2043: 0x00100000,
2044: 0x0205,
2045: #ifndef i386
2046: crtc911_1024x768x60Hz, crtc801_1024x768x60Hz, crtc928_1024x768x60Hz,
2047: #else
2048: NULL, NULL, NULL,
2049: #endif
2050: {
2051: sizeof(VIDEO_MODE_INFORMATION),
2052: 0,
2053: 1024,
2054: 768,
2055: 1024,
2056: 1,
2057: 8,
2058: 60,
2059: 330,
2060: 240,
2061: 6,
2062: 6,
2063: 6,
2064: 0x00000000,
2065: 0x00000000,
2066: 0x00000000,
2067: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2068: VIDEO_MODE_MANAGED_PALETTE,
2069: 1024,
2070: 1024
2071: }
2072: },
2073:
2074: {
2075: FALSE,
2076: 0x00100000,
2077: 0x0205,
2078: #ifndef i386
2079: crtc911_1024x768x70Hz, crtc801_1024x768x70Hz, crtc928_1024x768x70Hz,
2080: #else
2081: NULL, NULL, NULL,
2082: #endif
2083: {
2084: sizeof(VIDEO_MODE_INFORMATION),
2085: 0,
2086: 1024,
2087: 768,
2088: 1024,
2089: 1,
2090: 8,
2091: 72,
2092: 330,
2093: 240,
2094: 6,
2095: 6,
2096: 6,
2097: 0x00000000,
2098: 0x00000000,
2099: 0x00000000,
2100: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2101: VIDEO_MODE_MANAGED_PALETTE,
2102: 1024,
2103: 1024
2104: }
2105: },
2106:
2107: {
2108: FALSE,
2109: 0x00300000,
2110: 0x0107,
2111: NULL, NULL, NULL,
2112: {
2113: sizeof(VIDEO_MODE_INFORMATION),
2114: 0,
2115: 1280,
2116: 1024,
2117: 2048,
2118: 1,
2119: 8,
2120: 1,
2121: 330,
2122: 240,
2123: 6,
2124: 6,
2125: 6,
2126: 0x00000000,
2127: 0x00000000,
2128: 0x00000000,
2129: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2130: VIDEO_MODE_MANAGED_PALETTE,
2131: 2048,
2132: 1536
2133: }
2134: },
2135:
2136: {
2137: FALSE,
2138: 0x00300000,
2139: 0x0107,
2140: NULL, NULL, NULL,
2141: {
2142: sizeof(VIDEO_MODE_INFORMATION),
2143: 0,
2144: 1280,
2145: 1024,
2146: 2048,
2147: 1,
2148: 8,
2149: 43,
2150: 330,
2151: 240,
2152: 6,
2153: 6,
2154: 6,
2155: 0x00000000,
2156: 0x00000000,
2157: 0x00000000,
2158: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2159: VIDEO_MODE_MANAGED_PALETTE,
2160: 2048,
2161: 1536
2162: }
2163: },
2164:
2165: {
2166: FALSE,
2167: 0x00300000,
2168: 0x0107,
2169: NULL, NULL, NULL,
2170: {
2171: sizeof(VIDEO_MODE_INFORMATION),
2172: 0,
2173: 1280,
2174: 1024,
2175: 2048,
2176: 1,
2177: 8,
2178: 56,
2179: 330,
2180: 240,
2181: 6,
2182: 6,
2183: 6,
2184: 0x00000000,
2185: 0x00000000,
2186: 0x00000000,
2187: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2188: VIDEO_MODE_MANAGED_PALETTE,
2189: 2048,
2190: 1536
2191: }
2192: },
2193:
2194: {
2195: FALSE,
2196: 0x00300000,
2197: 0x0107,
2198: #ifndef i386
2199: NULL, NULL, crtc928_1280x1024x60Hz,
2200: #else
2201: NULL, NULL, NULL,
2202: #endif
2203: {
2204: sizeof(VIDEO_MODE_INFORMATION),
2205: 0,
2206: 1280,
2207: 1024,
2208: 2048,
2209: 1,
2210: 8,
2211: 60,
2212: 330,
2213: 240,
2214: 6,
2215: 6,
2216: 6,
2217: 0x00000000,
2218: 0x00000000,
2219: 0x00000000,
2220: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2221: VIDEO_MODE_MANAGED_PALETTE,
2222: 2048,
2223: 1536
2224: }
2225: },
2226:
2227: {
2228: FALSE,
2229: 0x00300000,
2230: 0x0107,
2231: #ifndef i386
2232: NULL, NULL, crtc928_1280x1024x70Hz,
2233: #else
2234: NULL, NULL, NULL,
2235: #endif
2236: {
2237: sizeof(VIDEO_MODE_INFORMATION),
2238: 0,
2239: 1280,
2240: 1024,
2241: 2048,
2242: 1,
2243: 8,
2244: 72,
2245: 330,
2246: 240,
2247: 6,
2248: 6,
2249: 6,
2250: 0x00000000,
2251: 0x00000000,
2252: 0x00000000,
2253: VIDEO_MODE_COLOR | VIDEO_MODE_GRAPHICS | VIDEO_MODE_PALETTE_DRIVEN |
2254: VIDEO_MODE_MANAGED_PALETTE,
2255: 2048,
2256: 1536
2257: }
2258: }
2259: };
2260:
2261:
2262: ULONG NumS3VideoModes = sizeof(S3Modes) / sizeof(S3_VIDEO_MODES);
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.