2 // QEMU Cirrus CLGD 54xx VGABIOS Extension.
4 // Copyright (c) 2004 Makoto Suzuki (suzu)
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 //#define CIRRUS_VESA3_PMINFO
23 #undef CIRRUS_VESA3_PMINFO
26 #define PM_BIOSMEM_CURRENT_MODE 0x449
27 #define PM_BIOSMEM_CRTC_ADDRESS 0x463
28 #define PM_BIOSMEM_VBE_MODE 0x4BA
35 unsigned short height
;
38 unsigned short hidden_dac
; /* 0x3c6 */
39 unsigned short *seq
; /* 0x3c4 */
40 unsigned short *graph
; /* 0x3ce */
41 unsigned short *crtc
; /* 0x3d4 */
43 unsigned char bitsperpixel
;
44 unsigned char vesacolortype
;
45 unsigned char vesaredmask
;
46 unsigned char vesaredpos
;
47 unsigned char vesagreenmask
;
48 unsigned char vesagreenpos
;
49 unsigned char vesabluemask
;
50 unsigned char vesabluepos
;
52 unsigned char vesareservedmask
;
53 unsigned char vesareservedpos
;
55 #define CIRRUS_MODE_SIZE 26
58 /* For VESA BIOS 3.0 */
59 #define CIRRUS_PM16INFO_SIZE 20
62 unsigned short cseq_vga
[] = {0x0007,0xffff};
63 unsigned short cgraph_vga
[] = {0x0009,0x000a,0x200b,0xffff};
64 unsigned short ccrtc_vga
[] = {0x001a,0x001b,0x001d,0xffff};
67 unsigned short cgraph_svgacolor
[] = {
68 0x0000,0x0001,0x0002,0x0003,0x0004,0x4005,0x0506,0x0f07,0xff08,
73 unsigned short cseq_640x480x8
[] = {
74 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
75 0x580b,0x580c,0x580d,0x580e,
77 0x331b,0x331c,0x331d,0x331e,
80 unsigned short ccrtc_640x480x8
[] = {
82 0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
84 0xea10,0xdf12,0x5013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
89 unsigned short cseq_640x480x16
[] = {
90 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
91 0x580b,0x580c,0x580d,0x580e,
93 0x331b,0x331c,0x331d,0x331e,
96 unsigned short ccrtc_640x480x16
[] = {
98 0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
100 0xea10,0xdf12,0xa013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
101 0x001a,0x221b,0x001d,
105 unsigned short cseq_640x480x24
[] = {
106 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
107 0x580b,0x580c,0x580d,0x580e,
108 0x0412,0x0013,0x2017,
109 0x331b,0x331c,0x331d,0x331e,
112 unsigned short ccrtc_640x480x24
[] = {
114 0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
115 0x4009,0x000c,0x000d,
116 0xea10,0xdf12,0x0013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
117 0x001a,0x321b,0x001d,
121 unsigned short cseq_800x600x8
[] = {
122 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
123 0x230b,0x230c,0x230d,0x230e,
124 0x0412,0x0013,0x2017,
125 0x141b,0x141c,0x141d,0x141e,
128 unsigned short ccrtc_800x600x8
[] = {
129 0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
130 0x6009,0x000c,0x000d,
131 0x7d10,0x5712,0x6413,0x4014,0x5715,0x9816,0xc317,0xff18,
132 0x001a,0x221b,0x001d,
136 unsigned short cseq_800x600x16
[] = {
137 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
138 0x230b,0x230c,0x230d,0x230e,
139 0x0412,0x0013,0x2017,
140 0x141b,0x141c,0x141d,0x141e,
143 unsigned short ccrtc_800x600x16
[] = {
144 0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
145 0x6009,0x000c,0x000d,
146 0x7d10,0x5712,0xc813,0x4014,0x5715,0x9816,0xc317,0xff18,
147 0x001a,0x221b,0x001d,
151 unsigned short cseq_800x600x24
[] = {
152 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
153 0x230b,0x230c,0x230d,0x230e,
154 0x0412,0x0013,0x2017,
155 0x141b,0x141c,0x141d,0x141e,
158 unsigned short ccrtc_800x600x24
[] = {
159 0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
160 0x6009,0x000c,0x000d,
161 0x7d10,0x5712,0x2c13,0x4014,0x5715,0x9816,0xc317,0xff18,
162 0x001a,0x321b,0x001d,
166 unsigned short cseq_1024x768x8
[] = {
167 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
168 0x760b,0x760c,0x760d,0x760e,
169 0x0412,0x0013,0x2017,
170 0x341b,0x341c,0x341d,0x341e,
173 unsigned short ccrtc_1024x768x8
[] = {
174 0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
175 0x6009,0x000c,0x000d,
176 0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18,
177 0x001a,0x221b,0x001d,
181 unsigned short cseq_1024x768x16
[] = {
182 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
183 0x760b,0x760c,0x760d,0x760e,
184 0x0412,0x0013,0x2017,
185 0x341b,0x341c,0x341d,0x341e,
188 unsigned short ccrtc_1024x768x16
[] = {
189 0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
190 0x6009,0x000c,0x000d,
191 0x0310,0xff12,0x0013,0x4014,0xff15,0x2416,0xc317,0xff18,
192 0x001a,0x321b,0x001d,
196 unsigned short cseq_1024x768x24
[] = {
197 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
198 0x760b,0x760c,0x760d,0x760e,
199 0x0412,0x0013,0x2017,
200 0x341b,0x341c,0x341d,0x341e,
203 unsigned short ccrtc_1024x768x24
[] = {
204 0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
205 0x6009,0x000c,0x000d,
206 0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18,
207 0x001a,0x321b,0x001d,
211 unsigned short cseq_1280x1024x8
[] = {
212 0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
213 0x760b,0x760c,0x760d,0x760e,
214 0x0412,0x0013,0x2017,
215 0x341b,0x341c,0x341d,0x341e,
218 unsigned short ccrtc_1280x1024x8
[] = {
219 0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
220 0x6009,0x000c,0x000d,
221 0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18,
222 0x001a,0x221b,0x001d,
227 cirrus_mode_t cirrus_modes
[] =
229 {0x5f,640,480,8,0x00,
230 cseq_640x480x8
,cgraph_svgacolor
,ccrtc_640x480x8
,8,
232 {0x64,640,480,16,0xe1,
233 cseq_640x480x16
,cgraph_svgacolor
,ccrtc_640x480x16
,16,
235 {0x66,640,480,15,0xf0,
236 cseq_640x480x16
,cgraph_svgacolor
,ccrtc_640x480x16
,16,
237 6,5,10,5,5,5,0,1,15},
238 {0x71,640,480,24,0xe5,
239 cseq_640x480x24
,cgraph_svgacolor
,ccrtc_640x480x24
,24,
242 {0x5c,800,600,8,0x00,
243 cseq_800x600x8
,cgraph_svgacolor
,ccrtc_800x600x8
,8,
245 {0x65,800,600,16,0xe1,
246 cseq_800x600x16
,cgraph_svgacolor
,ccrtc_800x600x16
,16,
248 {0x67,800,600,15,0xf0,
249 cseq_800x600x16
,cgraph_svgacolor
,ccrtc_800x600x16
,16,
250 6,5,10,5,5,5,0,1,15},
252 {0x60,1024,768,8,0x00,
253 cseq_1024x768x8
,cgraph_svgacolor
,ccrtc_1024x768x8
,8,
255 {0x74,1024,768,16,0xe1,
256 cseq_1024x768x16
,cgraph_svgacolor
,ccrtc_1024x768x16
,16,
258 {0x68,1024,768,15,0xf0,
259 cseq_1024x768x16
,cgraph_svgacolor
,ccrtc_1024x768x16
,16,
260 6,5,10,5,5,5,0,1,15},
262 {0x78,800,600,24,0xe5,
263 cseq_800x600x24
,cgraph_svgacolor
,ccrtc_800x600x24
,24,
265 {0x79,1024,768,24,0xe5,
266 cseq_1024x768x24
,cgraph_svgacolor
,ccrtc_1024x768x24
,24,
269 {0x6d,1280,1024,8,0x00,
270 cseq_1280x1024x8
,cgraph_svgacolor
,ccrtc_1280x1024x8
,8,
273 {0xfe,0,0,0,0,cseq_vga
,cgraph_vga
,ccrtc_vga
,0,
274 0xff,0,0,0,0,0,0,0,0},
275 {0xff,0,0,0,0,0,0,0,0,
276 0xff,0,0,0,0,0,0,0,0},
279 unsigned char cirrus_id_table
[] = {
289 unsigned short cirrus_vesa_modelist
[] = {
324 .ascii
"cirrus-compatible VGA is detected"
328 cirrus_not_installed
:
329 .ascii
"cirrus-compatible VGA is not detected"
333 cirrus_vesa_vendorname
:
334 cirrus_vesa_productname
:
336 .ascii
"VGABIOS Cirrus extension"
338 cirrus_vesa_productrevision
:
345 SET_INT_VECTOR(0x10, #0xC000, #cirrus_int10_handler)
346 mov al
, #0x0f ; memory setup
356 mov ax
, #0x0007 ; set vga mode
358 mov ax
, #0x0431 ; reset bitblt
372 mov si
, #cirrus_not_installed
373 jnz cirrus_msgnotinstalled
374 mov si
, #cirrus_installed
376 cirrus_msgnotinstalled
:
396 cirrus_int10_handler
:
399 cmp ah
, #0x00 ;; set video mode
400 jz cirrus_set_video_mode
401 cmp ah
, #0x12 ;; cirrus extension
403 cmp ah
, #0x4F ;; VESA extension
409 jmp vgabios_int10_handler
413 call cirrus_debug_dump
419 cirrus_set_video_mode
:
421 call cirrus_debug_dump
427 #ifdef CIRRUS_VESA3_PMINFO
429 mov si
, [cirrus_vesa_sel0000_data
]
435 mov
[PM_BIOSMEM_VBE_MODE
], bx
438 call cirrus_get_modeentry
439 jnc cirrus_set_video_mode_extended
441 call cirrus_get_modeentry_nomask
442 call cirrus_switch_mode
449 call cirrus_debug_dump
459 mov bp
, cirrus_extbios_handlers
[bx
]
467 call cirrus_debug_dump
470 ja cirrus_vesa_not_handled
476 mov bp
, cirrus_vesa_handlers
[bx
]
482 cirrus_vesa_not_handled
:
483 mov ax
, #0x014F ;; not implemented
493 call _cirrus_debugmsg
500 cirrus_set_video_mode_extended
:
501 call cirrus_switch_mode
506 #ifdef CIRRUS_VESA3_PMINFO
508 mov si
, [cirrus_vesa_sel0000_data
]
513 mov
[PM_BIOSMEM_CURRENT_MODE
], al
521 cirrus_vesa_pmbios_init
:
523 cirrus_vesa_pmbios_entry
:
527 jnz cirrus_vesa_pmbios_unimplemented
529 ja cirrus_vesa_pmbios_unimplemented
535 mov bp
, cirrus_vesa_handlers
[bx
]
537 push
#cirrus_vesa_pmbios_return
540 cirrus_vesa_pmbios_unimplemented
:
542 cirrus_vesa_pmbios_return
:
555 mov bx
, [si
+10] ;; seq
558 out dx
, ax
;; Unlock cirrus special
559 call cirrus_switch_mode_setregs
561 mov bx
, [si
+12] ;; graph
563 call cirrus_switch_mode_setregs
565 mov bx
, [si
+14] ;; crtc
567 call cirrus_switch_mode_setregs
576 mov al
, [si
+8] ;; hidden dac
582 mov bl
, [si
+17] ;; memory model
591 call biosfn_get_single_palette_reg
594 call biosfn_set_single_palette_reg
601 cirrus_enable_dualbank
:
609 or al
, #0x21 ;; enable dual bank
615 cirrus_switch_mode_setregs
:
633 mov bx
, #_cirrus_id_table
653 mov ax
, #0x100 ;; XXX
672 mov al
, #0x0f ;; get DRAM band width
676 ;; al
= 4 << bandwidth
688 mov al
, #0x20 ;; 2 MB
690 mov al
, #0x40 ;; 4 MB
702 call cirrus_get_modeentry
705 mov bx
, cirrus_extbios_A0h_callback
712 cirrus_extbios_A0h_callback
:
713 ;; fatal
: not implemented yet
719 mov bx
, #0x0E00 ;; IBM 8512/8513, color
723 mov al
, #0x07 ;; HSync 31.5 - 64.0 kHz
727 mov al
, #0x01 ;; High Refresh 75Hz
730 cirrus_extbios_unimplemented
:
741 cmp ax
, #0x4256 ;; VB
744 cmp ax
, #0x3245 ;; E2
748 mov ax
, #0x0100 ;; soft ver.
750 mov ax
, # cirrus_vesa_vendorname
754 mov ax
, # cirrus_vesa_productname
758 mov ax
, # cirrus_vesa_productrevision
764 mov ax
, #0x4556 ;; VE
766 mov ax
, #0x4153 ;; SA
768 mov ax
, #0x0200 ;; v2.00
770 mov ax
, # cirrus_vesa_oemname
781 call cirrus_extbios_85h
;; vram in
64k
788 mov si
, #_cirrus_vesa_modelist
805 call cirrus_vesamode_to_mode
807 jnz cirrus_vesa_01h_1
808 jmp cirrus_vesa_unimplemented
819 call cirrus_get_modeentry_nomask
825 stosw
;; clear buffer
828 mov ax
, #0x003b ;; mode
830 mov ax
, #0x0707 ;; attr
832 mov ax
, #0x0010 ;; granularity =16K
834 mov ax
, #0x0020 ;; size =32K
836 mov ax
, #0xA000 ;; segment A
838 mov ax
, #0xA800 ;; segment B
840 mov ax
, #cirrus_vesa_05h_farentry
844 call cirrus_get_line_offset_entry
845 stosw
;; bytes per scan line
846 mov ax
, [si
+2] ;; width
848 mov ax
, [si
+4] ;; height
854 mov al
, #1 ;; count of planes
856 mov al
, [si
+6] ;; bpp
858 mov al
, #0x1 ;; XXX number of banks
861 stosb
;; memory model
862 mov al
, #0x0 ;; XXX size of bank in K
864 call cirrus_get_line_offset_entry
866 mul bx
;; dx
:ax
=vramdisp
871 call cirrus_extbios_85h
;; al
=vram in
64k
877 stosb
;; number of image pages
= vramtotal
/vramdisp
-1
893 rcl al
, #1 ; bit 0=palette flag
894 stosb
;; direct screen mode info
897 ;; 32-bit LFB address
900 call cirrus_get_lfb_addr
908 or ax
, #0x0080 ;; mode bit 7:LFB
926 test cx
, #0x4000 ;; LFB flag
931 cmp cx
, #0x0080 ;; is LFB supported?
932 jnz cirrus_vesa_01h_6
933 mov ax
, #0x014F ;; error - no LFB
940 ;; XXX support CRTC registers
942 jnz cirrus_vesa_02h_2
;; unknown flags
944 and ax
, #0x1ff ;; bit 8-0 mode
945 cmp ax
, #0x100 ;; legacy VGA mode
946 jb cirrus_vesa_02h_legacy
947 call cirrus_vesamode_to_mode
949 jnz cirrus_vesa_02h_1
951 jmp cirrus_vesa_unimplemented
952 cirrus_vesa_02h_legacy
:
953 #ifdef CIRRUS_VESA3_PMINFO
955 cmp byte ptr
[cirrus_vesa_is_protected_mode
], #0
956 jnz cirrus_vesa_02h_2
957 #endif // CIRRUS_VESA3_PMINFO
964 call cirrus_get_modeentry_nomask
965 call cirrus_switch_mode
966 test bx
, #0x4000 ;; LFB
968 call cirrus_enable_dualbank
972 #ifdef CIRRUS_VESA3_PMINFO
974 mov si
, [cirrus_vesa_sel0000_data
]
979 mov
[PM_BIOSMEM_CURRENT_MODE
], al
980 mov
[PM_BIOSMEM_VBE_MODE
], bx
988 #ifdef CIRRUS_VESA3_PMINFO
990 mov ax
, [cirrus_vesa_sel0000_data
]
995 mov bx
, # PM_BIOSMEM_VBE_MODE
999 jnz cirrus_vesa_03h_1
1000 mov bx
, # PM_BIOSMEM_CURRENT_MODE
1009 cirrus_vesa_05h_farentry
:
1010 call cirrus_vesa_05h
1015 ja cirrus_vesa_05h_1
1017 jz cirrus_vesa_05h_setmempage
1019 jz cirrus_vesa_05h_getmempage
1021 jmp cirrus_vesa_unimplemented
1022 cirrus_vesa_05h_setmempage
:
1023 or dh
, dh
; address must be
< 0x100
1024 jnz cirrus_vesa_05h_1
1026 mov al
, bl
;; bl
=bank number
1028 mov ah
, dl
;; dx
=window address in granularity
1034 cirrus_vesa_05h_getmempage
:
1035 mov al
, bl
;; bl
=bank number
1042 mov dl
, al
;; dx
=window address in granularity
1049 je cirrus_vesa_06h_3
1051 je cirrus_vesa_06h_2
1052 jb cirrus_vesa_06h_1
1056 call cirrus_get_bpp_bytes
1062 call cirrus_set_line_offset
1064 call cirrus_get_bpp_bytes
1068 call cirrus_get_line_offset
1073 call cirrus_extbios_85h
;; al
=vram in
64k
1084 je cirrus_vesa_07h_1
1086 je cirrus_vesa_07h_2
1087 jb cirrus_vesa_07h_1
1092 call cirrus_get_bpp_bytes
1099 call cirrus_get_line_offset
1103 jnc cirrus_vesa_07h_3
1112 call cirrus_set_start_addr
1116 call cirrus_get_start_addr
1124 call cirrus_get_line_offset
1130 call cirrus_get_bpp_bytes
1141 cirrus_vesa_unimplemented
:
1142 mov ax
, #0x014F ;; not implemented
1146 ;; in ax
:vesamode
, out ax
:cirrusmode
1147 cirrus_vesamode_to_mode
:
1154 mov si
, #_cirrus_vesa_modelist
1170 ;; NOTE
- may be called in
protected mode
1184 ;; in
- al
:mode
, out
- cflag
:result
, si
:table
, ax
:destroyed
1185 cirrus_get_modeentry
:
1187 cirrus_get_modeentry_nomask
:
1188 mov si
, #_cirrus_modes
1196 add si
, # CIRRUS_MODE_SIZE
1200 stc
;; video mode is
not supported
1203 clc
;; video mode is supported
1208 ; out
- ax
:LFB
address (high
16 bit
)
1209 ;; NOTE
- may be called in
protected mode
1210 cirrus_get_lfb_addr
:
1216 call cirrus_pci_read
1218 jz cirrus_get_lfb_addr_5
1219 cirrus_get_lfb_addr_3
:
1221 call cirrus_pci_read
1222 cmp ax
, #0x1013 ;; cirrus
1223 jz cirrus_get_lfb_addr_4
1225 cmp cx
, #0x200 ;; search bus #0 and #1
1226 jb cirrus_get_lfb_addr_3
1227 cirrus_get_lfb_addr_5
:
1228 xor dx
, dx
;; no LFB
1229 jmp cirrus_get_lfb_addr_6
1230 cirrus_get_lfb_addr_4
:
1231 mov dl
, #0x10 ;; I/O space #0
1232 call cirrus_pci_read
1234 jnz cirrus_get_lfb_addr_5
1236 mov dx
, ax
;; LFB address
1237 cirrus_get_lfb_addr_6
:
1245 mov eax
, #0x00800000
1255 ;; out
- al
:bytes per pixel
1256 cirrus_get_bpp_bytes
:
1265 jne cirrus_get_bpp_bytes_1
1267 cirrus_get_bpp_bytes_1
:
1270 je cirrus_get_bpp_bytes_2
1272 cirrus_get_bpp_bytes_2
:
1276 ;; in
- ax
: new line offset
1277 cirrus_set_line_offset
:
1280 call cirrus_get_crtc
1297 ;; out
- ax
: active line offset
1298 cirrus_get_line_offset
:
1301 call cirrus_get_crtc
1322 ;; out
- ax
: line offset
for mode
1323 cirrus_get_line_offset_entry
:
1325 mov bx
, [si
+14] ;; crtc table
1354 ;; in
- new address in DX
:AX
1355 cirrus_set_start_addr
:
1359 call cirrus_get_crtc
1399 ;; out
- current address in DX
:AX
1400 cirrus_get_start_addr
:
1402 call cirrus_get_crtc
1438 cirrus_extbios_handlers
:
1440 dw cirrus_extbios_80h
1441 dw cirrus_extbios_81h
1442 dw cirrus_extbios_82h
1443 dw cirrus_extbios_unimplemented
1445 dw cirrus_extbios_unimplemented
1446 dw cirrus_extbios_85h
1447 dw cirrus_extbios_unimplemented
1448 dw cirrus_extbios_unimplemented
1450 dw cirrus_extbios_unimplemented
1451 dw cirrus_extbios_unimplemented
1452 dw cirrus_extbios_unimplemented
1453 dw cirrus_extbios_unimplemented
1455 dw cirrus_extbios_unimplemented
1456 dw cirrus_extbios_unimplemented
1457 dw cirrus_extbios_unimplemented
1458 dw cirrus_extbios_unimplemented
1460 dw cirrus_extbios_unimplemented
1461 dw cirrus_extbios_unimplemented
1462 dw cirrus_extbios_unimplemented
1463 dw cirrus_extbios_unimplemented
1465 dw cirrus_extbios_unimplemented
1466 dw cirrus_extbios_unimplemented
1467 dw cirrus_extbios_unimplemented
1468 dw cirrus_extbios_unimplemented
1470 dw cirrus_extbios_unimplemented
1471 dw cirrus_extbios_unimplemented
1472 dw cirrus_extbios_9Ah
1473 dw cirrus_extbios_unimplemented
1475 dw cirrus_extbios_unimplemented
1476 dw cirrus_extbios_unimplemented
1477 dw cirrus_extbios_unimplemented
1478 dw cirrus_extbios_unimplemented
1480 dw cirrus_extbios_A0h
1481 dw cirrus_extbios_A1h
1482 dw cirrus_extbios_A2h
1483 dw cirrus_extbios_unimplemented
1485 dw cirrus_extbios_unimplemented
1486 dw cirrus_extbios_unimplemented
1487 dw cirrus_extbios_unimplemented
1488 dw cirrus_extbios_unimplemented
1490 dw cirrus_extbios_unimplemented
1491 dw cirrus_extbios_unimplemented
1492 dw cirrus_extbios_unimplemented
1493 dw cirrus_extbios_unimplemented
1495 dw cirrus_extbios_unimplemented
1496 dw cirrus_extbios_unimplemented
1497 dw cirrus_extbios_AEh
1498 dw cirrus_extbios_unimplemented
1500 cirrus_vesa_handlers
:
1507 dw cirrus_vesa_unimplemented
1512 dw cirrus_vesa_unimplemented
1513 dw cirrus_vesa_unimplemented
1514 dw cirrus_vesa_unimplemented
1515 dw cirrus_vesa_unimplemented
1517 dw cirrus_vesa_unimplemented
1518 dw cirrus_vesa_unimplemented
1519 dw cirrus_vesa_unimplemented
1520 dw cirrus_vesa_unimplemented
1526 #ifdef CIRRUS_VESA3_PMINFO
1530 .byte
0x50,0x4d,0x49,0x44 ;; signature
[4]
1532 dw cirrus_vesa_pmbios_entry
;; entry_bios
1533 dw cirrus_vesa_pmbios_init
;; entry_init
1535 cirrus_vesa_sel0000_data
:
1536 dw
0x0000 ;; sel_00000
1537 cirrus_vesa_selA000_data
:
1538 dw
0xA000 ;; sel_A0000
1540 cirrus_vesa_selB000_data
:
1541 dw
0xB000 ;; sel_B0000
1542 cirrus_vesa_selB800_data
:
1543 dw
0xB800 ;; sel_B8000
1545 cirrus_vesa_selC000_data
:
1546 dw
0xC000 ;; sel_C0000
1547 cirrus_vesa_is_protected_mode
:
1548 ;; protected mode flag
and checksum
1549 dw (~((0xf2 + (cirrus_vesa_pmbios_entry
>> 8) + (cirrus_vesa_pmbios_entry
) \
1550 + (cirrus_vesa_pmbios_init
>> 8) + (cirrus_vesa_pmbios_init
)) & 0xff) << 8) + 0x01
1552 #endif // CIRRUS_VESA3_PMINFO
1556 static void cirrus_debugmsg(DI
, SI
, BP
, SP
, BX
, DX
, CX
, AX
, DS
, ES
, FLAGS
)
1557 Bit16u DI
, SI
, BP
, SP
, BX
, DX
, CX
, AX
, ES
, DS
, FLAGS
;
1559 if((GET_AH()!=0x0E)&&(GET_AH()!=0x02)&&(GET_AH()!=0x09)&&(AX
!=0x4F05))
1560 printf("vgabios call ah%02x al%02x bx%04x cx%04x dx%04x\n",GET_AH(),GET_AL(),BX
,CX
,DX
);