root / pc-bios / vgabios.diff @ 89fc88da
History | View | Annotate | Download (28 kB)
1 | 9d0869b6 | bellard | Index: Makefile
|
---|---|---|---|
2 | 9d0869b6 | bellard | ===================================================================
|
3 | 9d0869b6 | bellard | RCS file: /sources/vgabios/vgabios/Makefile,v
|
4 | 9d0869b6 | bellard | retrieving revision 1.17
|
5 | 9d0869b6 | bellard | diff -u -w -r1.17 Makefile
|
6 | 9d0869b6 | bellard | --- Makefile 6 Mar 2005 13:06:47 -0000 1.17
|
7 | 9d0869b6 | bellard | +++ Makefile 14 Jun 2006 00:51:06 -0000
|
8 | 9d0869b6 | bellard | @@ -22,7 +22,7 @@
|
9 | 9d0869b6 | bellard | cirrus-bios: vgabios-cirrus.bin vgabios-cirrus.debug.bin |
10 | 9d0869b6 | bellard | |
11 | 9d0869b6 | bellard | clean: |
12 | 9d0869b6 | bellard | - /bin/rm -f biossums *.o *.s *.ld86 \
|
13 | 9d0869b6 | bellard | + /bin/rm -f biossums vbetables-gen vbetables.h *.o *.s *.ld86 \
|
14 | 9d0869b6 | bellard | temp.awk.* vgabios*.orig _vgabios_* _vgabios-debug_* core vgabios*.bin vgabios*.txt $(RELEASE).bin *.bak |
15 | 9d0869b6 | bellard | |
16 | 9d0869b6 | bellard | dist-clean: clean |
17 | 9d0869b6 | bellard | @@ -79,3 +79,9 @@
|
18 | 9d0869b6 | bellard | |
19 | 9d0869b6 | bellard | biossums: biossums.c |
20 | 9d0869b6 | bellard | $(CC) -o biossums biossums.c |
21 | 9d0869b6 | bellard | +
|
22 | 9d0869b6 | bellard | +vbetables-gen: vbetables-gen.c
|
23 | 9d0869b6 | bellard | + $(CC) -o vbetables-gen vbetables-gen.c
|
24 | 9d0869b6 | bellard | +
|
25 | 9d0869b6 | bellard | +vbetables.h: vbetables-gen
|
26 | 9d0869b6 | bellard | + ./vbetables-gen > $@
|
27 | 02cfb0b4 | bellard | Index: clext.c
|
28 | 02cfb0b4 | bellard | ===================================================================
|
29 | 26f69dc0 | bellard | RCS file: /sources/vgabios/vgabios/clext.c,v
|
30 | 1c46d713 | bellard | retrieving revision 1.10
|
31 | 1c46d713 | bellard | diff -u -w -r1.10 clext.c
|
32 | 1c46d713 | bellard | --- clext.c 25 Mar 2006 10:19:15 -0000 1.10
|
33 | 9d0869b6 | bellard | +++ clext.c 14 Jun 2006 00:51:06 -0000
|
34 | 1c46d713 | bellard | @@ -544,6 +544,13 @@
|
35 | 1c46d713 | bellard | cirrus_set_video_mode_extended:
|
36 | 1c46d713 | bellard | call cirrus_switch_mode |
37 | 1c46d713 | bellard | pop ax ;; mode |
38 | 1c46d713 | bellard | + test al, #0x80
|
39 | 1c46d713 | bellard | + jnz cirrus_set_video_mode_extended_1
|
40 | 1c46d713 | bellard | + push ax
|
41 | 1c46d713 | bellard | + mov ax, #0xffff ; set to 0xff to keep win 2K happy
|
42 | 1c46d713 | bellard | + call cirrus_clear_vram
|
43 | 1c46d713 | bellard | + pop ax
|
44 | 1c46d713 | bellard | +cirrus_set_video_mode_extended_1:
|
45 | 1c46d713 | bellard | and al, #0x7f
|
46 | 1c46d713 | bellard | |
47 | 1c46d713 | bellard | push ds |
48 | 1c46d713 | bellard | @@ -1011,6 +1018,13 @@
|
49 | 1c46d713 | bellard | jnz cirrus_vesa_02h_3 |
50 | 1c46d713 | bellard | call cirrus_enable_16k_granularity |
51 | 1c46d713 | bellard | cirrus_vesa_02h_3:
|
52 | 1c46d713 | bellard | + test bx, #0x8000 ;; no clear
|
53 | 1c46d713 | bellard | + jnz cirrus_vesa_02h_4
|
54 | 1c46d713 | bellard | + push ax
|
55 | 1c46d713 | bellard | + xor ax,ax
|
56 | 1c46d713 | bellard | + call cirrus_clear_vram
|
57 | 1c46d713 | bellard | + pop ax
|
58 | 1c46d713 | bellard | +cirrus_vesa_02h_4:
|
59 | 1c46d713 | bellard | pop ax |
60 | 1c46d713 | bellard | push ds |
61 | 1c46d713 | bellard | #ifdef CIRRUS_VESA3_PMINFO
|
62 | 1c46d713 | bellard | @@ -1479,6 +1493,38 @@
|
63 | 1c46d713 | bellard | pop bx |
64 | 26f69dc0 | bellard | ret |
65 | 26f69dc0 | bellard | |
66 | 1c46d713 | bellard | +cirrus_clear_vram:
|
67 | 1c46d713 | bellard | + pusha
|
68 | 1c46d713 | bellard | + push es
|
69 | 1c46d713 | bellard | + mov si, ax
|
70 | 26f69dc0 | bellard | +
|
71 | 1c46d713 | bellard | + call cirrus_enable_16k_granularity
|
72 | 1c46d713 | bellard | + call cirrus_extbios_85h
|
73 | 1c46d713 | bellard | + shl al, #2
|
74 | 1c46d713 | bellard | + mov bl, al
|
75 | 1c46d713 | bellard | + xor ah,ah
|
76 | 1c46d713 | bellard | +cirrus_clear_vram_1:
|
77 | 1c46d713 | bellard | + mov al, #0x09
|
78 | 1c46d713 | bellard | + mov dx, #0x3ce
|
79 | 1c46d713 | bellard | + out dx, ax
|
80 | 1c46d713 | bellard | + push ax
|
81 | 1c46d713 | bellard | + mov cx, #0xa000
|
82 | 1c46d713 | bellard | + mov es, cx
|
83 | 1c46d713 | bellard | + xor di, di
|
84 | 1c46d713 | bellard | + mov ax, si
|
85 | 1c46d713 | bellard | + mov cx, #8192
|
86 | 1c46d713 | bellard | + cld
|
87 | 1c46d713 | bellard | + rep
|
88 | 1c46d713 | bellard | + stosw
|
89 | 1c46d713 | bellard | + pop ax
|
90 | 1c46d713 | bellard | + inc ah
|
91 | 1c46d713 | bellard | + cmp ah, bl
|
92 | 1c46d713 | bellard | + jne cirrus_clear_vram_1
|
93 | 26f69dc0 | bellard | +
|
94 | 1c46d713 | bellard | + pop es
|
95 | 1c46d713 | bellard | + popa
|
96 | 1c46d713 | bellard | + ret
|
97 | 26f69dc0 | bellard | +
|
98 | 1c46d713 | bellard | cirrus_extbios_handlers:
|
99 | 1c46d713 | bellard | ;; 80h
|
100 | 1c46d713 | bellard | dw cirrus_extbios_80h |
101 | 9d0869b6 | bellard | Index: vbe.c
|
102 | 9d0869b6 | bellard | ===================================================================
|
103 | 9d0869b6 | bellard | RCS file: /sources/vgabios/vgabios/vbe.c,v
|
104 | 9d0869b6 | bellard | retrieving revision 1.48
|
105 | 9d0869b6 | bellard | diff -u -w -r1.48 vbe.c
|
106 | 9d0869b6 | bellard | --- vbe.c 26 Dec 2005 19:50:26 -0000 1.48
|
107 | 9d0869b6 | bellard | +++ vbe.c 14 Jun 2006 00:51:07 -0000
|
108 | 9d0869b6 | bellard | @@ -118,21 +118,114 @@
|
109 | 9d0869b6 | bellard | .word VBE_VESA_MODE_END_OF_LIST |
110 | 9d0869b6 | bellard | #endif
|
111 | 9d0869b6 | bellard | |
112 | 9d0869b6 | bellard | + .align 2
|
113 | 9d0869b6 | bellard | vesa_pm_start:
|
114 | 9d0869b6 | bellard | dw vesa_pm_set_window - vesa_pm_start |
115 | 9d0869b6 | bellard | - dw vesa_pm_set_display_strt - vesa_pm_start
|
116 | 9d0869b6 | bellard | + dw vesa_pm_set_display_start - vesa_pm_start
|
117 | 9d0869b6 | bellard | dw vesa_pm_unimplemented - vesa_pm_start |
118 | 9d0869b6 | bellard | - dw 0
|
119 | 9d0869b6 | bellard | + dw vesa_pm_io_ports_table - vesa_pm_start
|
120 | 9d0869b6 | bellard | +vesa_pm_io_ports_table:
|
121 | 9d0869b6 | bellard | + dw VBE_DISPI_IOPORT_INDEX
|
122 | 9d0869b6 | bellard | + dw VBE_DISPI_IOPORT_INDEX + 1
|
123 | 9d0869b6 | bellard | + dw VBE_DISPI_IOPORT_DATA
|
124 | 9d0869b6 | bellard | + dw VBE_DISPI_IOPORT_DATA + 1
|
125 | 9d0869b6 | bellard | + dw 0xffff
|
126 | 9d0869b6 | bellard | + dw 0xffff
|
127 | 9d0869b6 | bellard | |
128 | 9d0869b6 | bellard | USE32 |
129 | 9d0869b6 | bellard | vesa_pm_set_window:
|
130 | 9d0869b6 | bellard | - mov ax, #0x4f05
|
131 | 9d0869b6 | bellard | - int #0x10
|
132 | 9d0869b6 | bellard | + cmp bx, #0x00
|
133 | 9d0869b6 | bellard | + je vesa_pm_set_display_window1
|
134 | 9d0869b6 | bellard | + mov ax, #0x0100
|
135 | 9d0869b6 | bellard | + ret
|
136 | 9d0869b6 | bellard | +vesa_pm_set_display_window1:
|
137 | 9d0869b6 | bellard | + mov ax, dx
|
138 | 9d0869b6 | bellard | + push dx
|
139 | 9d0869b6 | bellard | + push ax
|
140 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_INDEX
|
141 | 9d0869b6 | bellard | + mov ax, # VBE_DISPI_INDEX_BANK
|
142 | 9d0869b6 | bellard | + out dx, ax
|
143 | 9d0869b6 | bellard | + pop ax
|
144 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_DATA
|
145 | 9d0869b6 | bellard | + out dx, ax
|
146 | 9d0869b6 | bellard | + pop dx
|
147 | 9d0869b6 | bellard | + mov ax, #0x004f
|
148 | 9d0869b6 | bellard | ret |
149 | 9d0869b6 | bellard | |
150 | 9d0869b6 | bellard | vesa_pm_set_display_start:
|
151 | 9d0869b6 | bellard | - mov ax, #0x4f07
|
152 | 9d0869b6 | bellard | - int #0x10
|
153 | 9d0869b6 | bellard | + cmp bl, #0x80
|
154 | 9d0869b6 | bellard | + je vesa_pm_set_display_start1
|
155 | 9d0869b6 | bellard | + cmp bl, #0x00
|
156 | 9d0869b6 | bellard | + je vesa_pm_set_display_start1
|
157 | 9d0869b6 | bellard | + mov ax, #0x0100
|
158 | 9d0869b6 | bellard | + ret
|
159 | 9d0869b6 | bellard | +vesa_pm_set_display_start1:
|
160 | 9d0869b6 | bellard | +; convert offset to (X, Y) coordinate
|
161 | 9d0869b6 | bellard | +; (would be simpler to change Bochs VBE API...)
|
162 | 9d0869b6 | bellard | + push eax
|
163 | 9d0869b6 | bellard | + push ecx
|
164 | 9d0869b6 | bellard | + push edx
|
165 | 9d0869b6 | bellard | + push esi
|
166 | 9d0869b6 | bellard | + push edi
|
167 | 9d0869b6 | bellard | + shl edx, #16
|
168 | 9d0869b6 | bellard | + and ecx, #0xffff
|
169 | 9d0869b6 | bellard | + or ecx, edx
|
170 | 9d0869b6 | bellard | + shl ecx, #2
|
171 | 9d0869b6 | bellard | + mov eax, ecx
|
172 | 9d0869b6 | bellard | +
|
173 | 9d0869b6 | bellard | + push eax
|
174 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_INDEX
|
175 | 9d0869b6 | bellard | + mov ax, # VBE_DISPI_INDEX_VIRT_WIDTH
|
176 | 9d0869b6 | bellard | + out dx, ax
|
177 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_DATA
|
178 | 9d0869b6 | bellard | + in ax, dx
|
179 | 9d0869b6 | bellard | + movzx ecx, ax
|
180 | 9d0869b6 | bellard | +
|
181 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_INDEX
|
182 | 9d0869b6 | bellard | + mov ax, # VBE_DISPI_INDEX_BPP
|
183 | 9d0869b6 | bellard | + out dx, ax
|
184 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_DATA
|
185 | 9d0869b6 | bellard | + in ax, dx
|
186 | 9d0869b6 | bellard | + movzx esi, ax
|
187 | 9d0869b6 | bellard | + pop eax
|
188 | 9d0869b6 | bellard | +
|
189 | 9d0869b6 | bellard | + add esi, #7
|
190 | 9d0869b6 | bellard | + shr esi, #3
|
191 | 9d0869b6 | bellard | + imul ecx, esi
|
192 | 9d0869b6 | bellard | + xor edx, edx
|
193 | 9d0869b6 | bellard | + div ecx
|
194 | 9d0869b6 | bellard | + mov edi, eax
|
195 | 9d0869b6 | bellard | + mov eax, edx
|
196 | 9d0869b6 | bellard | + xor edx, edx
|
197 | 9d0869b6 | bellard | + div esi
|
198 | 9d0869b6 | bellard | +
|
199 | 9d0869b6 | bellard | + push dx
|
200 | 9d0869b6 | bellard | + push ax
|
201 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_INDEX
|
202 | 9d0869b6 | bellard | + mov ax, # VBE_DISPI_INDEX_X_OFFSET
|
203 | 9d0869b6 | bellard | + out dx, ax
|
204 | 9d0869b6 | bellard | + pop ax
|
205 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_DATA
|
206 | 9d0869b6 | bellard | + out dx, ax
|
207 | 9d0869b6 | bellard | + pop dx
|
208 | 9d0869b6 | bellard | +
|
209 | 9d0869b6 | bellard | + mov ax, di
|
210 | 9d0869b6 | bellard | + push dx
|
211 | 9d0869b6 | bellard | + push ax
|
212 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_INDEX
|
213 | 9d0869b6 | bellard | + mov ax, # VBE_DISPI_INDEX_Y_OFFSET
|
214 | 9d0869b6 | bellard | + out dx, ax
|
215 | 9d0869b6 | bellard | + pop ax
|
216 | 9d0869b6 | bellard | + mov dx, # VBE_DISPI_IOPORT_DATA
|
217 | 9d0869b6 | bellard | + out dx, ax
|
218 | 9d0869b6 | bellard | + pop dx
|
219 | 9d0869b6 | bellard | +
|
220 | 9d0869b6 | bellard | + pop edi
|
221 | 9d0869b6 | bellard | + pop esi
|
222 | 9d0869b6 | bellard | + pop edx
|
223 | 9d0869b6 | bellard | + pop ecx
|
224 | 9d0869b6 | bellard | + pop eax
|
225 | 9d0869b6 | bellard | + mov ax, #0x004f
|
226 | 9d0869b6 | bellard | ret |
227 | 9d0869b6 | bellard | |
228 | 9d0869b6 | bellard | vesa_pm_unimplemented:
|
229 | 9d0869b6 | bellard | @@ -835,6 +928,64 @@
|
230 | 9d0869b6 | bellard | ASM_END |
231 | 9d0869b6 | bellard | |
232 | 9d0869b6 | bellard | |
233 | 9d0869b6 | bellard | +Bit16u vbe_biosfn_read_video_state_size()
|
234 | 9d0869b6 | bellard | +{
|
235 | 9d0869b6 | bellard | + return 9 * 2;
|
236 | 9d0869b6 | bellard | +}
|
237 | 9d0869b6 | bellard | +
|
238 | 9d0869b6 | bellard | +void vbe_biosfn_save_video_state(ES, BX)
|
239 | 9d0869b6 | bellard | + Bit16u ES; Bit16u BX;
|
240 | 9d0869b6 | bellard | +{
|
241 | 9d0869b6 | bellard | + Bit16u enable, i;
|
242 | 9d0869b6 | bellard | +
|
243 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
|
244 | 9d0869b6 | bellard | + enable = inw(VBE_DISPI_IOPORT_DATA);
|
245 | 9d0869b6 | bellard | + write_word(ES, BX, enable);
|
246 | 9d0869b6 | bellard | + BX += 2;
|
247 | 9d0869b6 | bellard | + if (!(enable & VBE_DISPI_ENABLED))
|
248 | 9d0869b6 | bellard | + return;
|
249 | 9d0869b6 | bellard | + for(i = VBE_DISPI_INDEX_XRES; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
|
250 | 9d0869b6 | bellard | + if (i != VBE_DISPI_INDEX_ENABLE) {
|
251 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX, i);
|
252 | 9d0869b6 | bellard | + write_word(ES, BX, inw(VBE_DISPI_IOPORT_DATA));
|
253 | 9d0869b6 | bellard | + BX += 2;
|
254 | 9d0869b6 | bellard | + }
|
255 | 9d0869b6 | bellard | + }
|
256 | 9d0869b6 | bellard | +}
|
257 | 9d0869b6 | bellard | +
|
258 | 9d0869b6 | bellard | +
|
259 | 9d0869b6 | bellard | +void vbe_biosfn_restore_video_state(ES, BX)
|
260 | 9d0869b6 | bellard | + Bit16u ES; Bit16u BX;
|
261 | 9d0869b6 | bellard | +{
|
262 | 9d0869b6 | bellard | + Bit16u enable, i;
|
263 | 9d0869b6 | bellard | +
|
264 | 9d0869b6 | bellard | + enable = read_word(ES, BX);
|
265 | 9d0869b6 | bellard | + BX += 2;
|
266 | 9d0869b6 | bellard | +
|
267 | 9d0869b6 | bellard | + if (!(enable & VBE_DISPI_ENABLED)) {
|
268 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
|
269 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_DATA, enable);
|
270 | 9d0869b6 | bellard | + } else {
|
271 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_XRES);
|
272 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
|
273 | 9d0869b6 | bellard | + BX += 2;
|
274 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_YRES);
|
275 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
|
276 | 9d0869b6 | bellard | + BX += 2;
|
277 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_BPP);
|
278 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
|
279 | 9d0869b6 | bellard | + BX += 2;
|
280 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE);
|
281 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_DATA, enable);
|
282 | 9d0869b6 | bellard | +
|
283 | 9d0869b6 | bellard | + for(i = VBE_DISPI_INDEX_BANK; i <= VBE_DISPI_INDEX_Y_OFFSET; i++) {
|
284 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_INDEX, i);
|
285 | 9d0869b6 | bellard | + outw(VBE_DISPI_IOPORT_DATA, read_word(ES, BX));
|
286 | 9d0869b6 | bellard | + BX += 2;
|
287 | 9d0869b6 | bellard | + }
|
288 | 9d0869b6 | bellard | + }
|
289 | 9d0869b6 | bellard | +}
|
290 | 9d0869b6 | bellard | +
|
291 | 9d0869b6 | bellard | /** Function 04h - Save/Restore State
|
292 | 9d0869b6 | bellard | * |
293 | 9d0869b6 | bellard | * Input: |
294 | 9d0869b6 | bellard | @@ -849,10 +1000,48 @@
|
295 | 9d0869b6 | bellard | * BX = Number of 64-byte blocks to hold the state buffer (if DL=00h) |
296 | 9d0869b6 | bellard | * |
297 | 9d0869b6 | bellard | */ |
298 | 9d0869b6 | bellard | -void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX)
|
299 | 9d0869b6 | bellard | +void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX)
|
300 | 9d0869b6 | bellard | +Bit16u *AX; Bit16u CX; Bit16u DX; Bit16u ES; Bit16u *BX;
|
301 | 9d0869b6 | bellard | { |
302 | 9d0869b6 | bellard | -}
|
303 | 9d0869b6 | bellard | + Bit16u ss=get_SS();
|
304 | 9d0869b6 | bellard | + Bit16u result, val;
|
305 | 9d0869b6 | bellard | |
306 | 9d0869b6 | bellard | + result = 0x4f;
|
307 | 9d0869b6 | bellard | + switch(GET_DL()) {
|
308 | 9d0869b6 | bellard | + case 0x00:
|
309 | 9d0869b6 | bellard | + val = biosfn_read_video_state_size2(CX);
|
310 | 9d0869b6 | bellard | +#ifdef DEBUG
|
311 | 9d0869b6 | bellard | + printf("VGA state size=%x\n", val);
|
312 | 9d0869b6 | bellard | +#endif
|
313 | 9d0869b6 | bellard | + if (CX & 8)
|
314 | 9d0869b6 | bellard | + val += vbe_biosfn_read_video_state_size();
|
315 | 9d0869b6 | bellard | + write_word(ss, BX, val);
|
316 | 9d0869b6 | bellard | + break;
|
317 | 9d0869b6 | bellard | + case 0x01:
|
318 | 9d0869b6 | bellard | + val = read_word(ss, BX);
|
319 | 9d0869b6 | bellard | + val = biosfn_save_video_state(CX, ES, val);
|
320 | 9d0869b6 | bellard | +#ifdef DEBUG
|
321 | 9d0869b6 | bellard | + printf("VGA save_state offset=%x\n", val);
|
322 | 9d0869b6 | bellard | +#endif
|
323 | 9d0869b6 | bellard | + if (CX & 8)
|
324 | 9d0869b6 | bellard | + vbe_biosfn_save_video_state(ES, val);
|
325 | 9d0869b6 | bellard | + break;
|
326 | 9d0869b6 | bellard | + case 0x02:
|
327 | 9d0869b6 | bellard | + val = read_word(ss, BX);
|
328 | 9d0869b6 | bellard | + val = biosfn_restore_video_state(CX, ES, val);
|
329 | 9d0869b6 | bellard | +#ifdef DEBUG
|
330 | 9d0869b6 | bellard | + printf("VGA restore_state offset=%x\n", val);
|
331 | 9d0869b6 | bellard | +#endif
|
332 | 9d0869b6 | bellard | + if (CX & 8)
|
333 | 9d0869b6 | bellard | + vbe_biosfn_restore_video_state(ES, val);
|
334 | 9d0869b6 | bellard | + break;
|
335 | 9d0869b6 | bellard | + default:
|
336 | 9d0869b6 | bellard | + // function failed
|
337 | 9d0869b6 | bellard | + result = 0x100;
|
338 | 9d0869b6 | bellard | + break;
|
339 | 9d0869b6 | bellard | + }
|
340 | 9d0869b6 | bellard | + write_word(ss, AX, result);
|
341 | 9d0869b6 | bellard | +}
|
342 | 9d0869b6 | bellard | |
343 | 9d0869b6 | bellard | /** Function 05h - Display Window Control
|
344 | 9d0869b6 | bellard | * |
345 | 9d0869b6 | bellard | @@ -1090,7 +1279,7 @@
|
346 | 9d0869b6 | bellard | */ |
347 | 9d0869b6 | bellard | ASM_START |
348 | 9d0869b6 | bellard | vbe_biosfn_return_protected_mode_interface:
|
349 | 9d0869b6 | bellard | - test bx, bx
|
350 | 9d0869b6 | bellard | + test bl, bl
|
351 | 9d0869b6 | bellard | jnz _fail |
352 | 9d0869b6 | bellard | mov di, #0xc000
|
353 | 9d0869b6 | bellard | mov es, di |
354 | 8fa00e0f | bellard | Index: vbe.h
|
355 | 8fa00e0f | bellard | ===================================================================
|
356 | 8fa00e0f | bellard | RCS file: /sources/vgabios/vgabios/vbe.h,v
|
357 | 8fa00e0f | bellard | retrieving revision 1.24
|
358 | 8fa00e0f | bellard | diff -u -w -r1.24 vbe.h
|
359 | 8fa00e0f | bellard | --- vbe.h 9 May 2004 20:31:31 -0000 1.24
|
360 | 9d0869b6 | bellard | +++ vbe.h 14 Jun 2006 00:51:07 -0000
|
361 | 9d0869b6 | bellard | @@ -14,7 +14,7 @@
|
362 | 9d0869b6 | bellard | void vbe_biosfn_return_controller_information(AX, ES, DI);
|
363 | 9d0869b6 | bellard | void vbe_biosfn_return_mode_information(AX, CX, ES, DI);
|
364 | 9d0869b6 | bellard | void vbe_biosfn_set_mode(AX, BX, ES, DI);
|
365 | 9d0869b6 | bellard | -void vbe_biosfn_save_restore_state(AX, DL, CX, ES, BX);
|
366 | 9d0869b6 | bellard | +void vbe_biosfn_save_restore_state(AX, CX, DX, ES, BX);
|
367 | 9d0869b6 | bellard | void vbe_biosfn_set_get_palette_data(AX);
|
368 | 9d0869b6 | bellard | void vbe_biosfn_return_protected_mode_interface(AX);
|
369 | 9d0869b6 | bellard | |
370 | 9d0869b6 | bellard | @@ -151,6 +151,12 @@
|
371 | 9d0869b6 | bellard | Bit8u Reserved[189];
|
372 | 9d0869b6 | bellard | } ModeInfoBlock; |
373 | 9d0869b6 | bellard | |
374 | 9d0869b6 | bellard | +typedef struct ModeInfoListItem
|
375 | 9d0869b6 | bellard | +{
|
376 | 9d0869b6 | bellard | + Bit16u mode;
|
377 | 9d0869b6 | bellard | + ModeInfoBlockCompact info;
|
378 | 9d0869b6 | bellard | +} ModeInfoListItem;
|
379 | 9d0869b6 | bellard | +
|
380 | 9d0869b6 | bellard | // VBE Return Status Info
|
381 | 9d0869b6 | bellard | // AL
|
382 | 9d0869b6 | bellard | #define VBE_RETURN_STATUS_SUPPORTED 0x4F |
383 | 9d0869b6 | bellard | @@ -193,6 +199,10 @@
|
384 | 8fa00e0f | bellard | #define VBE_VESA_MODE_1280X1024X1555 0x119 |
385 | 8fa00e0f | bellard | #define VBE_VESA_MODE_1280X1024X565 0x11A |
386 | 8fa00e0f | bellard | #define VBE_VESA_MODE_1280X1024X888 0x11B |
387 | 8fa00e0f | bellard | +#define VBE_VESA_MODE_1600X1200X8 0x11C
|
388 | 8fa00e0f | bellard | +#define VBE_VESA_MODE_1600X1200X1555 0x11D
|
389 | 8fa00e0f | bellard | +#define VBE_VESA_MODE_1600X1200X565 0x11E
|
390 | 8fa00e0f | bellard | +#define VBE_VESA_MODE_1600X1200X888 0x11F
|
391 | 8fa00e0f | bellard | |
392 | 8fa00e0f | bellard | // BOCHS/PLEX86 'own' mode numbers
|
393 | 8fa00e0f | bellard | #define VBE_OWN_MODE_320X200X8888 0x140 |
394 | 9d0869b6 | bellard | @@ -202,6 +212,12 @@
|
395 | 8fa00e0f | bellard | #define VBE_OWN_MODE_1024X768X8888 0x144 |
396 | 8fa00e0f | bellard | #define VBE_OWN_MODE_1280X1024X8888 0x145 |
397 | 8fa00e0f | bellard | #define VBE_OWN_MODE_320X200X8 0x146 |
398 | 8fa00e0f | bellard | +#define VBE_OWN_MODE_1600X1200X8888 0x147
|
399 | 8fa00e0f | bellard | +#define VBE_OWN_MODE_1152X864X8 0x148
|
400 | 8fa00e0f | bellard | +#define VBE_OWN_MODE_1152X864X1555 0x149
|
401 | 8fa00e0f | bellard | +#define VBE_OWN_MODE_1152X864X565 0x14a
|
402 | 8fa00e0f | bellard | +#define VBE_OWN_MODE_1152X864X888 0x14b
|
403 | 8fa00e0f | bellard | +#define VBE_OWN_MODE_1152X864X8888 0x14c
|
404 | 8fa00e0f | bellard | |
405 | 8fa00e0f | bellard | #define VBE_VESA_MODE_END_OF_LIST 0xFFFF |
406 | 8fa00e0f | bellard | |
407 | 9d0869b6 | bellard | @@ -259,7 +275,7 @@
|
408 | 8fa00e0f | bellard | // like 0xE0000000
|
409 | 8fa00e0f | bellard | |
410 | 8fa00e0f | bellard | |
411 | 8fa00e0f | bellard | - #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 4
|
412 | 8fa00e0f | bellard | + #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8
|
413 | 8fa00e0f | bellard | |
414 | 8fa00e0f | bellard | #define VBE_DISPI_BANK_ADDRESS 0xA0000 |
415 | 8fa00e0f | bellard | #define VBE_DISPI_BANK_SIZE_KB 64 |
416 | 9d0869b6 | bellard | Index: vgabios.c
|
417 | 8fa00e0f | bellard | ===================================================================
|
418 | 9d0869b6 | bellard | RCS file: /sources/vgabios/vgabios/vgabios.c,v
|
419 | 9d0869b6 | bellard | retrieving revision 1.64
|
420 | 9d0869b6 | bellard | diff -u -w -r1.64 vgabios.c
|
421 | 9d0869b6 | bellard | --- vgabios.c 25 Mar 2006 10:19:16 -0000 1.64
|
422 | 9d0869b6 | bellard | +++ vgabios.c 14 Jun 2006 00:51:07 -0000
|
423 | 9d0869b6 | bellard | @@ -109,8 +109,8 @@
|
424 | 9d0869b6 | bellard | static void biosfn_write_string(); |
425 | 9d0869b6 | bellard | static void biosfn_read_state_info(); |
426 | 9d0869b6 | bellard | static void biosfn_read_video_state_size(); |
427 | 9d0869b6 | bellard | -static void biosfn_save_video_state();
|
428 | 9d0869b6 | bellard | -static void biosfn_restore_video_state();
|
429 | 9d0869b6 | bellard | +static Bit16u biosfn_save_video_state();
|
430 | 9d0869b6 | bellard | +static Bit16u biosfn_restore_video_state();
|
431 | 9d0869b6 | bellard | extern Bit8u video_save_pointer_table[];
|
432 | 9d0869b6 | bellard | |
433 | 9d0869b6 | bellard | // This is for compiling with gcc2 and gcc3
|
434 | 9d0869b6 | bellard | @@ -748,12 +748,7 @@
|
435 | 9d0869b6 | bellard | vbe_biosfn_set_mode(&AX,BX,ES,DI); |
436 | 9d0869b6 | bellard | break;
|
437 | 9d0869b6 | bellard | case 0x04: |
438 | 9d0869b6 | bellard | - //FIXME
|
439 | 9d0869b6 | bellard | -#ifdef DEBUG
|
440 | 9d0869b6 | bellard | - unimplemented();
|
441 | 9d0869b6 | bellard | -#endif
|
442 | 9d0869b6 | bellard | - // function failed
|
443 | 9d0869b6 | bellard | - AX=0x100;
|
444 | 9d0869b6 | bellard | + vbe_biosfn_save_restore_state(&AX, CX, DX, ES, &BX);
|
445 | 9d0869b6 | bellard | break;
|
446 | 9d0869b6 | bellard | case 0x09: |
447 | 9d0869b6 | bellard | //FIXME
|
448 | 9d0869b6 | bellard | @@ -3138,23 +3133,215 @@
|
449 | 9d0869b6 | bellard | } |
450 | 8fa00e0f | bellard | |
451 | 9d0869b6 | bellard | // --------------------------------------------------------------------------------------------
|
452 | 9d0869b6 | bellard | -static void biosfn_read_video_state_size (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
|
453 | 9d0869b6 | bellard | +// --------------------------------------------------------------------------------------------
|
454 | 9d0869b6 | bellard | +static Bit16u biosfn_read_video_state_size2 (CX)
|
455 | 9d0869b6 | bellard | + Bit16u CX;
|
456 | 8fa00e0f | bellard | { |
457 | 9d0869b6 | bellard | -#ifdef DEBUG
|
458 | 9d0869b6 | bellard | - unimplemented();
|
459 | 9d0869b6 | bellard | -#endif
|
460 | 9d0869b6 | bellard | + Bit16u size;
|
461 | 9d0869b6 | bellard | + size = 0;
|
462 | 9d0869b6 | bellard | + if (CX & 1) {
|
463 | 9d0869b6 | bellard | + size += 0x46;
|
464 | 9d0869b6 | bellard | + }
|
465 | 9d0869b6 | bellard | + if (CX & 2) {
|
466 | 9d0869b6 | bellard | + size += (5 + 8 + 5) * 2 + 6;
|
467 | 9d0869b6 | bellard | + }
|
468 | 9d0869b6 | bellard | + if (CX & 4) {
|
469 | 9d0869b6 | bellard | + size += 3 + 256 * 3 + 1;
|
470 | 9d0869b6 | bellard | } |
471 | 9d0869b6 | bellard | -static void biosfn_save_video_state (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
|
472 | 9d0869b6 | bellard | + return size;
|
473 | 9d0869b6 | bellard | +}
|
474 | 9d0869b6 | bellard | +
|
475 | 9d0869b6 | bellard | +static void biosfn_read_video_state_size (CX, BX)
|
476 | 9d0869b6 | bellard | + Bit16u CX; Bit16u *BX;
|
477 | 9d0869b6 | bellard | { |
478 | 9d0869b6 | bellard | -#ifdef DEBUG
|
479 | 9d0869b6 | bellard | - unimplemented();
|
480 | 8fa00e0f | bellard | -#endif
|
481 | 9d0869b6 | bellard | + Bit16u ss=get_SS();
|
482 | 9d0869b6 | bellard | + write_word(ss, BX, biosfn_read_video_state_size2(CX));
|
483 | 9d0869b6 | bellard | } |
484 | 9d0869b6 | bellard | -static void biosfn_restore_video_state (CX,ES,BX) Bit16u CX;Bit16u ES;Bit16u BX;
|
485 | 9d0869b6 | bellard | +
|
486 | 9d0869b6 | bellard | +static Bit16u biosfn_save_video_state (CX,ES,BX)
|
487 | 9d0869b6 | bellard | + Bit16u CX;Bit16u ES;Bit16u BX;
|
488 | 9d0869b6 | bellard | { |
489 | 9d0869b6 | bellard | -#ifdef DEBUG
|
490 | 9d0869b6 | bellard | - unimplemented();
|
491 | 8fa00e0f | bellard | -#endif
|
492 | 9d0869b6 | bellard | + Bit16u i, v, crtc_addr, ar_index;
|
493 | 9d0869b6 | bellard | +
|
494 | 9d0869b6 | bellard | + crtc_addr = read_word(BIOSMEM_SEG, BIOSMEM_CRTC_ADDRESS);
|
495 | 9d0869b6 | bellard | + if (CX & 1) {
|
496 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_SEQU_ADDRESS)); BX++;
|
497 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(crtc_addr)); BX++;
|
498 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_GRDC_ADDRESS)); BX++;
|
499 | 9d0869b6 | bellard | + inb(VGAREG_ACTL_RESET);
|
500 | 9d0869b6 | bellard | + ar_index = inb(VGAREG_ACTL_ADDRESS);
|
501 | 9d0869b6 | bellard | + write_byte(ES, BX, ar_index); BX++;
|
502 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_READ_FEATURE_CTL)); BX++;
|
503 | 9d0869b6 | bellard | +
|
504 | 9d0869b6 | bellard | + for(i=1;i<=4;i++){
|
505 | 9d0869b6 | bellard | + outb(VGAREG_SEQU_ADDRESS, i);
|
506 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
|
507 | 9d0869b6 | bellard | + }
|
508 | 9d0869b6 | bellard | + outb(VGAREG_SEQU_ADDRESS, 0);
|
509 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_SEQU_DATA)); BX++;
|
510 | 9d0869b6 | bellard | +
|
511 | 9d0869b6 | bellard | + for(i=0;i<=0x18;i++) {
|
512 | 9d0869b6 | bellard | + outb(crtc_addr,i);
|
513 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(crtc_addr+1)); BX++;
|
514 | 9d0869b6 | bellard | + }
|
515 | 9d0869b6 | bellard | +
|
516 | 9d0869b6 | bellard | + for(i=0;i<=0x13;i++) {
|
517 | 9d0869b6 | bellard | + inb(VGAREG_ACTL_RESET);
|
518 | 9d0869b6 | bellard | + outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
|
519 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_ACTL_READ_DATA)); BX++;
|
520 | 9d0869b6 | bellard | + }
|
521 | 9d0869b6 | bellard | + inb(VGAREG_ACTL_RESET);
|
522 | 9d0869b6 | bellard | +
|
523 | 9d0869b6 | bellard | + for(i=0;i<=8;i++) {
|
524 | 9d0869b6 | bellard | + outb(VGAREG_GRDC_ADDRESS,i);
|
525 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_GRDC_DATA)); BX++;
|
526 | 9d0869b6 | bellard | + }
|
527 | 9d0869b6 | bellard | +
|
528 | 9d0869b6 | bellard | + write_word(ES, BX, crtc_addr); BX+= 2;
|
529 | 9d0869b6 | bellard | +
|
530 | 9d0869b6 | bellard | + /* XXX: read plane latches */
|
531 | 9d0869b6 | bellard | + write_byte(ES, BX, 0); BX++;
|
532 | 9d0869b6 | bellard | + write_byte(ES, BX, 0); BX++;
|
533 | 9d0869b6 | bellard | + write_byte(ES, BX, 0); BX++;
|
534 | 9d0869b6 | bellard | + write_byte(ES, BX, 0); BX++;
|
535 | 9d0869b6 | bellard | + }
|
536 | 9d0869b6 | bellard | + if (CX & 2) {
|
537 | 9d0869b6 | bellard | + write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE)); BX++;
|
538 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_NB_COLS)); BX += 2;
|
539 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE)); BX += 2;
|
540 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS)); BX += 2;
|
541 | 9d0869b6 | bellard | + write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS)); BX++;
|
542 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT)); BX += 2;
|
543 | 9d0869b6 | bellard | + write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL)); BX++;
|
544 | 9d0869b6 | bellard | + write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES)); BX++;
|
545 | 9d0869b6 | bellard | + write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL)); BX++;
|
546 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE)); BX += 2;
|
547 | 9d0869b6 | bellard | + for(i=0;i<8;i++) {
|
548 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i));
|
549 | 9d0869b6 | bellard | + BX += 2;
|
550 | 9d0869b6 | bellard | + }
|
551 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START)); BX += 2;
|
552 | 9d0869b6 | bellard | + write_byte(ES, BX, read_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE)); BX++;
|
553 | 9d0869b6 | bellard | + /* current font */
|
554 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(0, 0x1f * 4)); BX += 2;
|
555 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(0, 0x1f * 4 + 2)); BX += 2;
|
556 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(0, 0x43 * 4)); BX += 2;
|
557 | 9d0869b6 | bellard | + write_word(ES, BX, read_word(0, 0x43 * 4 + 2)); BX += 2;
|
558 | 9d0869b6 | bellard | + }
|
559 | 9d0869b6 | bellard | + if (CX & 4) {
|
560 | 9d0869b6 | bellard | + /* XXX: check this */
|
561 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_DAC_STATE)); BX++; /* read/write mode dac */
|
562 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_DAC_WRITE_ADDRESS)); BX++; /* pix address */
|
563 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_PEL_MASK)); BX++;
|
564 | 9d0869b6 | bellard | + // Set the whole dac always, from 0
|
565 | 9d0869b6 | bellard | + outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
|
566 | 9d0869b6 | bellard | + for(i=0;i<256*3;i++) {
|
567 | 9d0869b6 | bellard | + write_byte(ES, BX, inb(VGAREG_DAC_DATA)); BX++;
|
568 | 9d0869b6 | bellard | + }
|
569 | 9d0869b6 | bellard | + write_byte(ES, BX, 0); BX++; /* color select register */
|
570 | 9d0869b6 | bellard | + }
|
571 | 9d0869b6 | bellard | + return BX;
|
572 | 9d0869b6 | bellard | +}
|
573 | 9d0869b6 | bellard | +
|
574 | 9d0869b6 | bellard | +static Bit16u biosfn_restore_video_state (CX,ES,BX)
|
575 | 9d0869b6 | bellard | + Bit16u CX;Bit16u ES;Bit16u BX;
|
576 | 9d0869b6 | bellard | +{
|
577 | 9d0869b6 | bellard | + Bit16u i, crtc_addr, v, addr1, ar_index;
|
578 | 9d0869b6 | bellard | +
|
579 | 9d0869b6 | bellard | + if (CX & 1) {
|
580 | 9d0869b6 | bellard | + // Reset Attribute Ctl flip-flop
|
581 | 9d0869b6 | bellard | + inb(VGAREG_ACTL_RESET);
|
582 | 9d0869b6 | bellard | +
|
583 | 9d0869b6 | bellard | + crtc_addr = read_word(ES, BX + 0x40);
|
584 | 9d0869b6 | bellard | + addr1 = BX;
|
585 | 9d0869b6 | bellard | + BX += 5;
|
586 | 9d0869b6 | bellard | +
|
587 | 9d0869b6 | bellard | + for(i=1;i<=4;i++){
|
588 | 9d0869b6 | bellard | + outb(VGAREG_SEQU_ADDRESS, i);
|
589 | 9d0869b6 | bellard | + outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
|
590 | 9d0869b6 | bellard | + }
|
591 | 9d0869b6 | bellard | + outb(VGAREG_SEQU_ADDRESS, 0);
|
592 | 9d0869b6 | bellard | + outb(VGAREG_SEQU_DATA, read_byte(ES, BX)); BX++;
|
593 | 9d0869b6 | bellard | +
|
594 | 9d0869b6 | bellard | + // Disable CRTC write protection
|
595 | 9d0869b6 | bellard | + outw(crtc_addr,0x0011);
|
596 | 9d0869b6 | bellard | + // Set CRTC regs
|
597 | 9d0869b6 | bellard | + for(i=0;i<=0x18;i++) {
|
598 | 9d0869b6 | bellard | + if (i != 0x11) {
|
599 | 9d0869b6 | bellard | + outb(crtc_addr,i);
|
600 | 9d0869b6 | bellard | + outb(crtc_addr+1, read_byte(ES, BX));
|
601 | 9d0869b6 | bellard | + }
|
602 | 9d0869b6 | bellard | + BX++;
|
603 | 9d0869b6 | bellard | + }
|
604 | 9d0869b6 | bellard | + // select crtc base address
|
605 | 9d0869b6 | bellard | + v = inb(VGAREG_READ_MISC_OUTPUT) & ~0x01;
|
606 | 9d0869b6 | bellard | + if (crtc_addr = 0x3d4)
|
607 | 9d0869b6 | bellard | + v |= 0x01;
|
608 | 9d0869b6 | bellard | + outb(VGAREG_WRITE_MISC_OUTPUT, v);
|
609 | 9d0869b6 | bellard | +
|
610 | 9d0869b6 | bellard | + // enable write protection if needed
|
611 | 9d0869b6 | bellard | + outb(crtc_addr, 0x11);
|
612 | 9d0869b6 | bellard | + outb(crtc_addr+1, read_byte(ES, BX - 0x18 + 0x11));
|
613 | 9d0869b6 | bellard | +
|
614 | 9d0869b6 | bellard | + // Set Attribute Ctl
|
615 | 9d0869b6 | bellard | + ar_index = read_byte(ES, addr1 + 0x03);
|
616 | 9d0869b6 | bellard | + inb(VGAREG_ACTL_RESET);
|
617 | 9d0869b6 | bellard | + for(i=0;i<=0x13;i++) {
|
618 | 9d0869b6 | bellard | + outb(VGAREG_ACTL_ADDRESS, i | (ar_index & 0x20));
|
619 | 9d0869b6 | bellard | + outb(VGAREG_ACTL_WRITE_DATA, read_byte(ES, BX)); BX++;
|
620 | 9d0869b6 | bellard | + }
|
621 | 9d0869b6 | bellard | + outb(VGAREG_ACTL_ADDRESS, ar_index);
|
622 | 9d0869b6 | bellard | + inb(VGAREG_ACTL_RESET);
|
623 | 9d0869b6 | bellard | +
|
624 | 9d0869b6 | bellard | + for(i=0;i<=8;i++) {
|
625 | 9d0869b6 | bellard | + outb(VGAREG_GRDC_ADDRESS,i);
|
626 | 9d0869b6 | bellard | + outb(VGAREG_GRDC_DATA, read_byte(ES, BX)); BX++;
|
627 | 9d0869b6 | bellard | + }
|
628 | 9d0869b6 | bellard | + BX += 2; /* crtc_addr */
|
629 | 9d0869b6 | bellard | + BX += 4; /* plane latches */
|
630 | 9d0869b6 | bellard | +
|
631 | 9d0869b6 | bellard | + outb(VGAREG_SEQU_ADDRESS, read_byte(ES, addr1)); addr1++;
|
632 | 9d0869b6 | bellard | + outb(crtc_addr, read_byte(ES, addr1)); addr1++;
|
633 | 9d0869b6 | bellard | + outb(VGAREG_GRDC_ADDRESS, read_byte(ES, addr1)); addr1++;
|
634 | 9d0869b6 | bellard | + addr1++;
|
635 | 9d0869b6 | bellard | + outb(crtc_addr - 0x4 + 0xa, read_byte(ES, addr1)); addr1++;
|
636 | 9d0869b6 | bellard | + }
|
637 | 9d0869b6 | bellard | + if (CX & 2) {
|
638 | 9d0869b6 | bellard | + write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_MODE, read_byte(ES, BX)); BX++;
|
639 | 9d0869b6 | bellard | + write_word(BIOSMEM_SEG,BIOSMEM_NB_COLS, read_word(ES, BX)); BX += 2;
|
640 | 9d0869b6 | bellard | + write_word(BIOSMEM_SEG,BIOSMEM_PAGE_SIZE, read_word(ES, BX)); BX += 2;
|
641 | 9d0869b6 | bellard | + write_word(BIOSMEM_SEG,BIOSMEM_CRTC_ADDRESS, read_word(ES, BX)); BX += 2;
|
642 | 9d0869b6 | bellard | + write_byte(BIOSMEM_SEG,BIOSMEM_NB_ROWS, read_byte(ES, BX)); BX++;
|
643 | 9d0869b6 | bellard | + write_word(BIOSMEM_SEG,BIOSMEM_CHAR_HEIGHT, read_word(ES, BX)); BX += 2;
|
644 | 9d0869b6 | bellard | + write_byte(BIOSMEM_SEG,BIOSMEM_VIDEO_CTL, read_byte(ES, BX)); BX++;
|
645 | 9d0869b6 | bellard | + write_byte(BIOSMEM_SEG,BIOSMEM_SWITCHES, read_byte(ES, BX)); BX++;
|
646 | 9d0869b6 | bellard | + write_byte(BIOSMEM_SEG,BIOSMEM_MODESET_CTL, read_byte(ES, BX)); BX++;
|
647 | 9d0869b6 | bellard | + write_word(BIOSMEM_SEG,BIOSMEM_CURSOR_TYPE, read_word(ES, BX)); BX += 2;
|
648 | 9d0869b6 | bellard | + for(i=0;i<8;i++) {
|
649 | 9d0869b6 | bellard | + write_word(BIOSMEM_SEG, BIOSMEM_CURSOR_POS+2*i, read_word(ES, BX));
|
650 | 9d0869b6 | bellard | + BX += 2;
|
651 | 9d0869b6 | bellard | + }
|
652 | 9d0869b6 | bellard | + write_word(BIOSMEM_SEG,BIOSMEM_CURRENT_START, read_word(ES, BX)); BX += 2;
|
653 | 9d0869b6 | bellard | + write_byte(BIOSMEM_SEG,BIOSMEM_CURRENT_PAGE, read_byte(ES, BX)); BX++;
|
654 | 9d0869b6 | bellard | + /* current font */
|
655 | 9d0869b6 | bellard | + write_word(0, 0x1f * 4, read_word(ES, BX)); BX += 2;
|
656 | 9d0869b6 | bellard | + write_word(0, 0x1f * 4 + 2, read_word(ES, BX)); BX += 2;
|
657 | 9d0869b6 | bellard | + write_word(0, 0x43 * 4, read_word(ES, BX)); BX += 2;
|
658 | 9d0869b6 | bellard | + write_word(0, 0x43 * 4 + 2, read_word(ES, BX)); BX += 2;
|
659 | 9d0869b6 | bellard | + }
|
660 | 9d0869b6 | bellard | + if (CX & 4) {
|
661 | 9d0869b6 | bellard | + BX++;
|
662 | 9d0869b6 | bellard | + v = read_byte(ES, BX); BX++;
|
663 | 9d0869b6 | bellard | + outb(VGAREG_PEL_MASK, read_byte(ES, BX)); BX++;
|
664 | 9d0869b6 | bellard | + // Set the whole dac always, from 0
|
665 | 9d0869b6 | bellard | + outb(VGAREG_DAC_WRITE_ADDRESS,0x00);
|
666 | 9d0869b6 | bellard | + for(i=0;i<256*3;i++) {
|
667 | 9d0869b6 | bellard | + outb(VGAREG_DAC_DATA, read_byte(ES, BX)); BX++;
|
668 | 9d0869b6 | bellard | + }
|
669 | 9d0869b6 | bellard | + BX++;
|
670 | 9d0869b6 | bellard | + outb(VGAREG_DAC_WRITE_ADDRESS, v);
|
671 | 9d0869b6 | bellard | + }
|
672 | 9d0869b6 | bellard | + return BX;
|
673 | 9d0869b6 | bellard | } |
674 | 8fa00e0f | bellard | |
675 | 9d0869b6 | bellard | // ============================================================================================
|
676 | 9d0869b6 | bellard | diff -u -w vbetables-gen.c
|
677 | 9d0869b6 | bellard | --- vbetables-gen.c 1970-01-01 01:00:00.000000000 +0100
|
678 | 9d0869b6 | bellard | +++ vbetables-gen.c 2006-06-14 00:52:18.000000000 +0200
|
679 | 9d0869b6 | bellard | @@ -0,0 +1,217 @@
|
680 | 9d0869b6 | bellard | +/* Generate the VGABIOS VBE Tables */
|
681 | 9d0869b6 | bellard | +#include <stdlib.h>
|
682 | 9d0869b6 | bellard | +#include <stdio.h>
|
683 | 9d0869b6 | bellard | +
|
684 | 9d0869b6 | bellard | +typedef struct {
|
685 | 9d0869b6 | bellard | + int width;
|
686 | 9d0869b6 | bellard | + int height;
|
687 | 9d0869b6 | bellard | + int depth;
|
688 | 9d0869b6 | bellard | + int mode;
|
689 | 9d0869b6 | bellard | +} ModeInfo;
|
690 | 9d0869b6 | bellard | +
|
691 | 9d0869b6 | bellard | +ModeInfo modes[] = {
|
692 | 9d0869b6 | bellard | + /* standard VESA modes */
|
693 | 9d0869b6 | bellard | +{ 640, 400, 8 , 0x100},
|
694 | 9d0869b6 | bellard | +{ 640, 480, 8 , 0x101},
|
695 | 9d0869b6 | bellard | +{ 800, 600, 4 , 0x102},
|
696 | 9d0869b6 | bellard | +{ 800, 600, 8 , 0x103},
|
697 | 9d0869b6 | bellard | + //{ 1024, 768, 4 , 0x104},
|
698 | 9d0869b6 | bellard | +{ 1024, 768, 8 , 0x105},
|
699 | 9d0869b6 | bellard | + //{ 1280, 1024, 4 , 0x106},
|
700 | 9d0869b6 | bellard | +{ 1280, 1024, 8 , 0x107},
|
701 | 9d0869b6 | bellard | +{ 320, 200, 15 , 0x10D},
|
702 | 9d0869b6 | bellard | +{ 320, 200, 16 , 0x10E},
|
703 | 9d0869b6 | bellard | +{ 320, 200, 24 , 0x10F},
|
704 | 9d0869b6 | bellard | +{ 640, 480, 15 , 0x110},
|
705 | 9d0869b6 | bellard | +{ 640, 480, 16 , 0x111},
|
706 | 9d0869b6 | bellard | +{ 640, 480, 24 , 0x112},
|
707 | 9d0869b6 | bellard | +{ 800, 600, 15 , 0x113},
|
708 | 9d0869b6 | bellard | +{ 800, 600, 16 , 0x114},
|
709 | 9d0869b6 | bellard | +{ 800, 600, 24 , 0x115},
|
710 | 9d0869b6 | bellard | +{ 1024, 768, 15 , 0x116},
|
711 | 9d0869b6 | bellard | +{ 1024, 768, 16 , 0x117},
|
712 | 9d0869b6 | bellard | +{ 1024, 768, 24 , 0x118},
|
713 | 9d0869b6 | bellard | +{ 1280, 1024, 15 , 0x119},
|
714 | 9d0869b6 | bellard | +{ 1280, 1024, 16 , 0x11A},
|
715 | 9d0869b6 | bellard | +{ 1280, 1024, 24 , 0x11B},
|
716 | 9d0869b6 | bellard | +{ 1600, 1200, 8 , 0x11C},
|
717 | 9d0869b6 | bellard | +{ 1600, 1200, 15 , 0x11D},
|
718 | 9d0869b6 | bellard | +{ 1600, 1200, 16 , 0x11E},
|
719 | 9d0869b6 | bellard | +{ 1600, 1200, 24 , 0x11F},
|
720 | 9d0869b6 | bellard | +
|
721 | 9d0869b6 | bellard | + /* BOCHS/PLE, 86 'own' mode numbers */
|
722 | 9d0869b6 | bellard | +{ 320, 200, 32 , 0x140},
|
723 | 9d0869b6 | bellard | +{ 640, 400, 32 , 0x141},
|
724 | 9d0869b6 | bellard | +{ 640, 480, 32 , 0x142},
|
725 | 9d0869b6 | bellard | +{ 800, 600, 32 , 0x143},
|
726 | 9d0869b6 | bellard | +{ 1024, 768, 32 , 0x144},
|
727 | 9d0869b6 | bellard | +{ 1280, 1024, 32 , 0x145},
|
728 | 9d0869b6 | bellard | +{ 320, 200, 8 , 0x146},
|
729 | 9d0869b6 | bellard | +{ 1600, 1200, 32 , 0x147},
|
730 | 9d0869b6 | bellard | +{ 1152, 864, 8 , 0x148},
|
731 | 9d0869b6 | bellard | +{ 1152, 864, 15 , 0x149},
|
732 | 9d0869b6 | bellard | +{ 1152, 864, 16 , 0x14a},
|
733 | 9d0869b6 | bellard | +{ 1152, 864, 24 , 0x14b},
|
734 | 9d0869b6 | bellard | +{ 1152, 864, 32 , 0x14c},
|
735 | 9d0869b6 | bellard | +{ 0, },
|
736 | 9d0869b6 | bellard | +};
|
737 | 9d0869b6 | bellard | +
|
738 | 9d0869b6 | bellard | +int main(int argc, char **argv)
|
739 | 9d0869b6 | bellard | +{
|
740 | 9d0869b6 | bellard | + const ModeInfo *pm;
|
741 | 9d0869b6 | bellard | + int pitch, r_size, r_pos, g_size, g_pos, b_size, b_pos, a_size, a_pos;
|
742 | 9d0869b6 | bellard | + const char *str;
|
743 | 9d0869b6 | bellard | +
|
744 | 9d0869b6 | bellard | + printf("/* THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT */\n");
|
745 | 9d0869b6 | bellard | + printf("static ModeInfoListItem mode_info_list[]=\n");
|
746 | 9d0869b6 | bellard | + printf("{\n");
|
747 | 9d0869b6 | bellard | + for(pm = modes; pm->mode != 0; pm++) {
|
748 | 9d0869b6 | bellard | + printf("{ 0x%04x, /* %dx%dx%d */\n",
|
749 | 9d0869b6 | bellard | + pm->mode, pm->width, pm->height, pm->depth);
|
750 | 9d0869b6 | bellard | + printf("{ /*Bit16u ModeAttributes*/ %s,\n",
|
751 | 9d0869b6 | bellard | + "VBE_MODE_ATTRIBUTE_SUPPORTED | "
|
752 | 9d0869b6 | bellard | + "VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE | "
|
753 | 9d0869b6 | bellard | + "VBE_MODE_ATTRIBUTE_COLOR_MODE | "
|
754 | 9d0869b6 | bellard | + "VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE | "
|
755 | 9d0869b6 | bellard | + "VBE_MODE_ATTRIBUTE_GRAPHICS_MODE");
|
756 | 9d0869b6 | bellard | +
|
757 | 9d0869b6 | bellard | + printf("/*Bit8u WinAAttributes*/ %s,\n",
|
758 | 9d0869b6 | bellard | + "VBE_WINDOW_ATTRIBUTE_RELOCATABLE | "
|
759 | 9d0869b6 | bellard | + "VBE_WINDOW_ATTRIBUTE_READABLE | "
|
760 | 9d0869b6 | bellard | + "VBE_WINDOW_ATTRIBUTE_WRITEABLE");
|
761 | 9d0869b6 | bellard | +
|
762 | 9d0869b6 | bellard | + printf("/*Bit8u WinBAttributes*/ %d,\n", 0);
|
763 | 9d0869b6 | bellard | +
|
764 | 9d0869b6 | bellard | + printf("/*Bit16u WinGranularity*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
|
765 | 9d0869b6 | bellard | +
|
766 | 9d0869b6 | bellard | + printf("/*Bit16u WinSize*/ %s,\n", "VBE_DISPI_BANK_SIZE_KB");
|
767 | 9d0869b6 | bellard | +
|
768 | 9d0869b6 | bellard | + printf("/*Bit16u WinASegment*/ %s,\n", "VGAMEM_GRAPH");
|
769 | 9d0869b6 | bellard | +
|
770 | 9d0869b6 | bellard | + printf("/*Bit16u WinBSegment*/ 0x%04x,\n", 0);
|
771 | 9d0869b6 | bellard | +
|
772 | 9d0869b6 | bellard | + printf("/*Bit32u WinFuncPtr*/ %d,\n", 0);
|
773 | 9d0869b6 | bellard | +
|
774 | 9d0869b6 | bellard | + if (pm->depth == 4)
|
775 | 9d0869b6 | bellard | + pitch = (pm->width + 7) / 8;
|
776 | 9d0869b6 | bellard | + else
|
777 | 9d0869b6 | bellard | + pitch = pm->width * ((pm->depth + 7) / 8);
|
778 | 9d0869b6 | bellard | + printf("/*Bit16u BytesPerScanLine*/ %d,\n", pitch);
|
779 | 9d0869b6 | bellard | +
|
780 | 9d0869b6 | bellard | + // Mandatory information for VBE 1.2 and above
|
781 | 9d0869b6 | bellard | + printf("/*Bit16u XResolution*/ %d,\n", pm->width);
|
782 | 9d0869b6 | bellard | + printf("/*Bit16u YResolution*/ %d,\n", pm->height);
|
783 | 9d0869b6 | bellard | + printf("/*Bit8u XCharSize*/ %d,\n", 8);
|
784 | 9d0869b6 | bellard | + printf("/*Bit8u YCharSize*/ %d,\n", 16);
|
785 | 9d0869b6 | bellard | + if (pm->depth == 4) {
|
786 | 9d0869b6 | bellard | + printf("/*Bit8u NumberOfPlanes*/ %d,\n", 4);
|
787 | 9d0869b6 | bellard | + printf("/*Bit8u BitsPerPixel*/ %d,\n", pm->depth);
|
788 | 9d0869b6 | bellard | + } else {
|
789 | 9d0869b6 | bellard | + printf("/*Bit8u NumberOfPlanes*/ %d,\n", 1);
|
790 | 9d0869b6 | bellard | + printf("/*Bit8u BitsPerPixel*/ %d,\n", pm->depth);
|
791 | 9d0869b6 | bellard | + }
|
792 | 9d0869b6 | bellard | + printf("/*Bit8u NumberOfBanks*/ %d,\n",
|
793 | 9d0869b6 | bellard | + (pm->height * pitch + 65535) / 65536);
|
794 | 9d0869b6 | bellard | +
|
795 | 9d0869b6 | bellard | + if (pm->depth == 4)
|
796 | 9d0869b6 | bellard | + str = "VBE_MEMORYMODEL_PLANAR";
|
797 | 9d0869b6 | bellard | + else if (pm->depth == 8)
|
798 | 9d0869b6 | bellard | + str = "VBE_MEMORYMODEL_PACKED_PIXEL";
|
799 | 9d0869b6 | bellard | + else
|
800 | 9d0869b6 | bellard | + str = "VBE_MEMORYMODEL_DIRECT_COLOR";
|
801 | 9d0869b6 | bellard | + printf("/*Bit8u MemoryModel*/ %s,\n", str);
|
802 | 9d0869b6 | bellard | + printf("/*Bit8u BankSize*/ %d,\n", 0);
|
803 | 9d0869b6 | bellard | + /* XXX: check */
|
804 | 9d0869b6 | bellard | + printf("/*Bit8u NumberOfImagePages*/ %d,\n", 0);
|
805 | 9d0869b6 | bellard | + printf("/*Bit8u Reserved_page*/ %d,\n", 0);
|
806 | 9d0869b6 | bellard | +
|
807 | 9d0869b6 | bellard | + // Direct Color fields (required for direct/6 and YUV/7 memory models)
|
808 | 9d0869b6 | bellard | + switch(pm->depth) {
|
809 | 9d0869b6 | bellard | + case 15:
|
810 | 9d0869b6 | bellard | + r_size = 5;
|
811 | 9d0869b6 | bellard | + r_pos = 10;
|
812 | 9d0869b6 | bellard | + g_size = 5;
|
813 | 9d0869b6 | bellard | + g_pos = 5;
|
814 | 9d0869b6 | bellard | + b_size = 5;
|
815 | 9d0869b6 | bellard | + b_pos = 0;
|
816 | 9d0869b6 | bellard | + a_size = 1;
|
817 | 9d0869b6 | bellard | + a_pos = 15;
|
818 | 9d0869b6 | bellard | + break;
|
819 | 9d0869b6 | bellard | + case 16:
|
820 | 9d0869b6 | bellard | + r_size = 5;
|
821 | 9d0869b6 | bellard | + r_pos = 11;
|
822 | 9d0869b6 | bellard | + g_size = 6;
|
823 | 9d0869b6 | bellard | + g_pos = 5;
|
824 | 9d0869b6 | bellard | + b_size = 5;
|
825 | 9d0869b6 | bellard | + b_pos = 0;
|
826 | 9d0869b6 | bellard | + a_size = 0;
|
827 | 9d0869b6 | bellard | + a_pos = 0;
|
828 | 9d0869b6 | bellard | + break;
|
829 | 9d0869b6 | bellard | + case 24:
|
830 | 9d0869b6 | bellard | + r_size = 8;
|
831 | 9d0869b6 | bellard | + r_pos = 16;
|
832 | 9d0869b6 | bellard | + g_size = 8;
|
833 | 9d0869b6 | bellard | + g_pos = 8;
|
834 | 9d0869b6 | bellard | + b_size = 8;
|
835 | 9d0869b6 | bellard | + b_pos = 0;
|
836 | 9d0869b6 | bellard | + a_size = 0;
|
837 | 9d0869b6 | bellard | + a_pos = 0;
|
838 | 9d0869b6 | bellard | + break;
|
839 | 9d0869b6 | bellard | + case 32:
|
840 | 9d0869b6 | bellard | + r_size = 8;
|
841 | 9d0869b6 | bellard | + r_pos = 16;
|
842 | 9d0869b6 | bellard | + g_size = 8;
|
843 | 9d0869b6 | bellard | + g_pos = 8;
|
844 | 9d0869b6 | bellard | + b_size = 8;
|
845 | 9d0869b6 | bellard | + b_pos = 0;
|
846 | 9d0869b6 | bellard | + a_size = 8;
|
847 | 9d0869b6 | bellard | + a_pos = 24;
|
848 | 9d0869b6 | bellard | + break;
|
849 | 9d0869b6 | bellard | + default:
|
850 | 9d0869b6 | bellard | + r_size = 0;
|
851 | 9d0869b6 | bellard | + r_pos = 0;
|
852 | 9d0869b6 | bellard | + g_size = 0;
|
853 | 9d0869b6 | bellard | + g_pos = 0;
|
854 | 9d0869b6 | bellard | + b_size = 0;
|
855 | 9d0869b6 | bellard | + b_pos = 0;
|
856 | 9d0869b6 | bellard | + a_size = 0;
|
857 | 9d0869b6 | bellard | + a_pos = 0;
|
858 | 9d0869b6 | bellard | + break;
|
859 | 9d0869b6 | bellard | + }
|
860 | 9d0869b6 | bellard | +
|
861 | 9d0869b6 | bellard | + printf("/*Bit8u RedMaskSize*/ %d,\n", r_size);
|
862 | 9d0869b6 | bellard | + printf("/*Bit8u RedFieldPosition*/ %d,\n", r_pos);
|
863 | 9d0869b6 | bellard | + printf("/*Bit8u GreenMaskSize*/ %d,\n", g_size);
|
864 | 9d0869b6 | bellard | + printf("/*Bit8u GreenFieldPosition*/ %d,\n", g_pos);
|
865 | 9d0869b6 | bellard | + printf("/*Bit8u BlueMaskSize*/ %d,\n", b_size);
|
866 | 9d0869b6 | bellard | + printf("/*Bit8u BlueFieldPosition*/ %d,\n", b_pos);
|
867 | 9d0869b6 | bellard | + printf("/*Bit8u RsvdMaskSize*/ %d,\n", a_size);
|
868 | 9d0869b6 | bellard | + printf("/*Bit8u RsvdFieldPosition*/ %d,\n", a_pos);
|
869 | 9d0869b6 | bellard | + printf("/*Bit8u DirectColorModeInfo*/ %d,\n", 0);
|
870 | 9d0869b6 | bellard | +
|
871 | 9d0869b6 | bellard | +// Mandatory information for VBE 2.0 and above
|
872 | 9d0869b6 | bellard | + printf("/*Bit32u PhysBasePtr*/ %s,\n",
|
873 | 9d0869b6 | bellard | + "VBE_DISPI_LFB_PHYSICAL_ADDRESS");
|
874 | 9d0869b6 | bellard | + printf("/*Bit32u OffScreenMemOffset*/ %d,\n", 0);
|
875 | 9d0869b6 | bellard | + printf("/*Bit16u OffScreenMemSize*/ %d,\n", 0);
|
876 | 9d0869b6 | bellard | + // Mandatory information for VBE 3.0 and above
|
877 | 9d0869b6 | bellard | + printf("/*Bit16u LinBytesPerScanLine*/ %d,\n", pitch);
|
878 | 9d0869b6 | bellard | + printf("/*Bit8u BnkNumberOfPages*/ %d,\n", 0);
|
879 | 9d0869b6 | bellard | + printf("/*Bit8u LinNumberOfPages*/ %d,\n", 0);
|
880 | 9d0869b6 | bellard | + printf("/*Bit8u LinRedMaskSize*/ %d,\n", r_size);
|
881 | 9d0869b6 | bellard | + printf("/*Bit8u LinRedFieldPosition*/ %d,\n", r_pos);
|
882 | 9d0869b6 | bellard | + printf("/*Bit8u LinGreenMaskSize*/ %d,\n", g_size);
|
883 | 9d0869b6 | bellard | + printf("/*Bit8u LinGreenFieldPosition*/ %d,\n", g_pos);
|
884 | 9d0869b6 | bellard | + printf("/*Bit8u LinBlueMaskSize*/ %d,\n", b_size);
|
885 | 9d0869b6 | bellard | + printf("/*Bit8u LinBlueFieldPosition*/ %d,\n", b_pos);
|
886 | 9d0869b6 | bellard | + printf("/*Bit8u LinRsvdMaskSize*/ %d,\n", a_size);
|
887 | 9d0869b6 | bellard | + printf("/*Bit8u LinRsvdFieldPosition*/ %d,\n", a_pos);
|
888 | 9d0869b6 | bellard | + printf("/*Bit32u MaxPixelClock*/ %d,\n", 0);
|
889 | 9d0869b6 | bellard | + printf("} },\n");
|
890 | 9d0869b6 | bellard | + }
|
891 | 9d0869b6 | bellard | + printf("{ VBE_VESA_MODE_END_OF_LIST,\n");
|
892 | 9d0869b6 | bellard | + printf("{ 0,\n");
|
893 | 9d0869b6 | bellard | + printf("} },\n");
|
894 | 9d0869b6 | bellard | + printf("};\n");
|
895 | 9d0869b6 | bellard | + return 0;
|
896 | 9d0869b6 | bellard | +} |