2 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
\r
3 ³ Programming the Genoa SVGA Chip ³
\r
4 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
6 Written for the PC-GPE by Mark Feldman
\r
7 e-mail address : u914097@student.canberra.edu.au
\r
8 myndale@cairo.anu.edu.au
\r
10 Please read the file SVGINTRO.TXT
\r
11 (Graphics/SVGA/Intro PC-GPE menu option)
\r
13 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
\r
14 ³ THIS FILE MAY NOT BE DISTRIBUTED ³
\r
15 ³ SEPARATE TO THE ENTIRE PC-GPE COLLECTION. ³
\r
16 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
19 ÚÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\r
23 I assume no responsibility whatsoever for any effect that this file, the
\r
24 information contained therein or the use thereof has on you, your sanity,
\r
25 computer, spouse, children, pets or anything else related to you or your
\r
26 existance. No warranty is provided nor implied with this information.
\r
28 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\r
32 Genoa has produced 2 SVGA cards. The earlier Genoa cards were based on the
\r
33 Tseng ET3000 chip, the more recents cards are based on the Genoa chip. This
\r
34 file will deal only with the cards based on the Genoa chip (the GVGA).
\r
36 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\r
37 ³ The Extended Register Set ³
\r
38 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
40 The Genoa uses the same ports as the VGA sequencer register set to access
\r
41 most of it's extended registers, ie the Index Register port for the Genoa
\r
42 is 3C4h and Data port is 3C5h.
\r
44 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\r
45 ³ Identifying the Genoa SVGA Card ³
\r
46 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
48 To identify if a Genoa SVGA is present read the byte at address C000:0000.
\r
49 Let's call this byte SIG_OFFSET. Next read the four bytes at
\r
50 C000:SIG_OFFSET. These four bytes should have the following values :
\r
52 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
\r
53 ³ Memory Address Value ³
\r
54 ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
\r
55 ³ C000:SIG_OFFSET 77h ³
\r
56 ³ C000:SIG_OFFSET + 1 xx ³
\r
57 ³ C000:SIG_OFFSET + 2 66h ³
\r
58 ³ C000:SIG_OFFSET + 3 99h ³
\r
59 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
61 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\r
62 ³ Identifying which Genoa Card is Present ³
\r
63 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
65 The value of the byte at C000:SIG_OFFSET + 1 is the chip identify code. The
\r
66 values for each of the Genoa cards is as follows
\r
68 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
\r
70 ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
\r
71 ³ 33h 5100/5200 Tseng ET3000 ³
\r
72 ³ 55h 5300/5400 Tseng ET3000 ³
\r
73 ³ 22h 6100 Genoa GVGA ³
\r
74 ³ 00h 6200/6300 Genoa GVGA ³
\r
75 ³ 11h 6400/6600 Genoa GVGA ³
\r
76 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
78 There is no method for determining the card revision number.
\r
80 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\r
81 ³ Genoa Graphics Display Modes ³
\r
82 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
84 All Genoa cards support the following graphics modes :
\r
86 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
\r
87 ³ Mode Resolution Colors ³
\r
88 ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´
\r
100 ³ 7Dh 512x512 256 ³
\r
101 ³ 7Eh 640x400 256 ³
\r
103 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
106 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\r
107 ³ Genoa Display Memory ³
\r
108 ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
\r
110 Two banks can be mapped to the segment A000:0000-FFFFh, one for
\r
111 reading and one for writing. The banks can be selected by writing to
\r
112 the Memory Segment Register :
\r
114 Index : 06h at port 3C4h
\r
115 Read/Write at port 3C5h
\r
116 ÚÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄÂÄÄÄ¿
\r
117 ³ 7 ³ 6 ³ 5 ³ 4 ³ 3 ³ 2 ³ 1 ³ 0 ³
\r
118 ÀÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÁÄÄÄÙ
\r
119 MEM ÄÄÙ ÀÄÄÄÂÄÄÄÙ ÀÄÄÄÂÄÄÄÙ
\r
123 The following code can be used to set the write bank:
\r
126 Port[$3C5] := (Port[$3C5] and $C7) or (write_bank_number shl 3);
\r
128 The following code can be used to set the read bank:
\r
131 Port[$3C5] := (Port[$3C5] and $F8) or read_bank_number;
\r
133 There are 8 banks (numbered 0 -7). Each bank is 64K long, has a 64K
\r
134 granularity and is mapped to host memory A000:0000-FFFFh.
\r