summaryrefslogtreecommitdiffstats
path: root/qemu/roms/vgabios/clext.c
diff options
context:
space:
mode:
authorRajithaY <rajithax.yerrumsetty@intel.com>2017-04-25 03:31:15 -0700
committerRajitha Yerrumchetty <rajithax.yerrumsetty@intel.com>2017-05-22 06:48:08 +0000
commitbb756eebdac6fd24e8919e2c43f7d2c8c4091f59 (patch)
treeca11e03542edf2d8f631efeca5e1626d211107e3 /qemu/roms/vgabios/clext.c
parenta14b48d18a9ed03ec191cf16b162206998a895ce (diff)
Adding qemu as a submodule of KVMFORNFV
This Patch includes the changes to add qemu as a submodule to kvmfornfv repo and make use of the updated latest qemu for the execution of all testcase Change-Id: I1280af507a857675c7f81d30c95255635667bdd7 Signed-off-by:RajithaY<rajithax.yerrumsetty@intel.com>
Diffstat (limited to 'qemu/roms/vgabios/clext.c')
-rw-r--r--qemu/roms/vgabios/clext.c1641
1 files changed, 0 insertions, 1641 deletions
diff --git a/qemu/roms/vgabios/clext.c b/qemu/roms/vgabios/clext.c
deleted file mode 100644
index b0b6834e7..000000000
--- a/qemu/roms/vgabios/clext.c
+++ /dev/null
@@ -1,1641 +0,0 @@
-//
-// QEMU Cirrus CLGD 54xx VGABIOS Extension.
-//
-// Copyright (c) 2004 Makoto Suzuki (suzu)
-//
-// This library is free software; you can redistribute it and/or
-// modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either
-// version 2 of the License, or (at your option) any later version.
-//
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Lesser General Public
-// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-//
-
-//#define CIRRUS_VESA3_PMINFO
-#ifdef VBE
-#undef CIRRUS_VESA3_PMINFO
-#endif
-
-#define PM_BIOSMEM_CURRENT_MODE 0x449
-#define PM_BIOSMEM_CRTC_ADDRESS 0x463
-#define PM_BIOSMEM_VBE_MODE 0x4BA
-
-typedef struct
-{
- /* + 0 */
- unsigned short mode;
- unsigned short width;
- unsigned short height;
- unsigned short depth;
- /* + 8 */
- unsigned short hidden_dac; /* 0x3c6 */
- unsigned short *seq; /* 0x3c4 */
- unsigned short *graph; /* 0x3ce */
- unsigned short *crtc; /* 0x3d4 */
- /* +16 */
- unsigned char bitsperpixel;
- unsigned char vesacolortype;
- unsigned char vesaredmask;
- unsigned char vesaredpos;
- unsigned char vesagreenmask;
- unsigned char vesagreenpos;
- unsigned char vesabluemask;
- unsigned char vesabluepos;
- /* +24 */
- unsigned char vesareservedmask;
- unsigned char vesareservedpos;
-} cirrus_mode_t;
-#define CIRRUS_MODE_SIZE 26
-
-
-/* For VESA BIOS 3.0 */
-#define CIRRUS_PM16INFO_SIZE 20
-
-/* VGA */
-unsigned short cseq_vga[] = {0x0007,0xffff};
-unsigned short cgraph_vga[] = {0x0009,0x000a,0x000b,0xffff};
-unsigned short ccrtc_vga[] = {0x001a,0x001b,0x001d,0xffff};
-
-/* extensions */
-unsigned short cgraph_svgacolor[] = {
-0x0000,0x0001,0x0002,0x0003,0x0004,0x4005,0x0506,0x0f07,0xff08,
-0x0009,0x000a,0x000b,
-0xffff
-};
-/* 640x480x8 */
-unsigned short cseq_640x480x8[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
-0x580b,0x580c,0x580d,0x580e,
-0x0412,0x0013,0x2017,
-0x331b,0x331c,0x331d,0x331e,
-0xffff
-};
-unsigned short ccrtc_640x480x8[] = {
-0x2c11,
-0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
-0x4009,0x000c,0x000d,
-0xea10,0xdf12,0x5013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
-0x001a,0x221b,0x001d,
-0xffff
-};
-/* 640x480x16 */
-unsigned short cseq_640x480x16[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
-0x580b,0x580c,0x580d,0x580e,
-0x0412,0x0013,0x2017,
-0x331b,0x331c,0x331d,0x331e,
-0xffff
-};
-unsigned short ccrtc_640x480x16[] = {
-0x2c11,
-0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
-0x4009,0x000c,0x000d,
-0xea10,0xdf12,0xa013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
-0x001a,0x221b,0x001d,
-0xffff
-};
-/* 640x480x24 */
-unsigned short cseq_640x480x24[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
-0x580b,0x580c,0x580d,0x580e,
-0x0412,0x0013,0x2017,
-0x331b,0x331c,0x331d,0x331e,
-0xffff
-};
-unsigned short ccrtc_640x480x24[] = {
-0x2c11,
-0x5f00,0x4f01,0x4f02,0x8003,0x5204,0x1e05,0x0b06,0x3e07,
-0x4009,0x000c,0x000d,
-0xea10,0xdf12,0x0013,0x4014,0xdf15,0x0b16,0xc317,0xff18,
-0x001a,0x321b,0x001d,
-0xffff
-};
-/* 800x600x8 */
-unsigned short cseq_800x600x8[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
-0x230b,0x230c,0x230d,0x230e,
-0x0412,0x0013,0x2017,
-0x141b,0x141c,0x141d,0x141e,
-0xffff
-};
-unsigned short ccrtc_800x600x8[] = {
-0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
-0x6009,0x000c,0x000d,
-0x7d10,0x5712,0x6413,0x4014,0x5715,0x9816,0xc317,0xff18,
-0x001a,0x221b,0x001d,
-0xffff
-};
-/* 800x600x16 */
-unsigned short cseq_800x600x16[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
-0x230b,0x230c,0x230d,0x230e,
-0x0412,0x0013,0x2017,
-0x141b,0x141c,0x141d,0x141e,
-0xffff
-};
-unsigned short ccrtc_800x600x16[] = {
-0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
-0x6009,0x000c,0x000d,
-0x7d10,0x5712,0xc813,0x4014,0x5715,0x9816,0xc317,0xff18,
-0x001a,0x221b,0x001d,
-0xffff
-};
-/* 800x600x24 */
-unsigned short cseq_800x600x24[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
-0x230b,0x230c,0x230d,0x230e,
-0x0412,0x0013,0x2017,
-0x141b,0x141c,0x141d,0x141e,
-0xffff
-};
-unsigned short ccrtc_800x600x24[] = {
-0x2311,0x7d00,0x6301,0x6302,0x8003,0x6b04,0x1a05,0x9806,0xf007,
-0x6009,0x000c,0x000d,
-0x7d10,0x5712,0x2c13,0x4014,0x5715,0x9816,0xc317,0xff18,
-0x001a,0x321b,0x001d,
-0xffff
-};
-/* 1024x768x8 */
-unsigned short cseq_1024x768x8[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
-0x760b,0x760c,0x760d,0x760e,
-0x0412,0x0013,0x2017,
-0x341b,0x341c,0x341d,0x341e,
-0xffff
-};
-unsigned short ccrtc_1024x768x8[] = {
-0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
-0x6009,0x000c,0x000d,
-0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18,
-0x001a,0x221b,0x001d,
-0xffff
-};
-/* 1024x768x16 */
-unsigned short cseq_1024x768x16[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
-0x760b,0x760c,0x760d,0x760e,
-0x0412,0x0013,0x2017,
-0x341b,0x341c,0x341d,0x341e,
-0xffff
-};
-unsigned short ccrtc_1024x768x16[] = {
-0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
-0x6009,0x000c,0x000d,
-0x0310,0xff12,0x0013,0x4014,0xff15,0x2416,0xc317,0xff18,
-0x001a,0x321b,0x001d,
-0xffff
-};
-/* 1024x768x24 */
-unsigned short cseq_1024x768x24[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1507,
-0x760b,0x760c,0x760d,0x760e,
-0x0412,0x0013,0x2017,
-0x341b,0x341c,0x341d,0x341e,
-0xffff
-};
-unsigned short ccrtc_1024x768x24[] = {
-0x2911,0xa300,0x7f01,0x7f02,0x8603,0x8304,0x9405,0x2406,0xf507,
-0x6009,0x000c,0x000d,
-0x0310,0xff12,0x8013,0x4014,0xff15,0x2416,0xc317,0xff18,
-0x001a,0x321b,0x001d,
-0xffff
-};
-/* 1280x1024x8 */
-unsigned short cseq_1280x1024x8[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
-0x760b,0x760c,0x760d,0x760e,
-0x0412,0x0013,0x2017,
-0x341b,0x341c,0x341d,0x341e,
-0xffff
-};
-unsigned short ccrtc_1280x1024x8[] = {
-0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
-0x6009,0x000c,0x000d,
-0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18,
-0x001a,0x221b,0x001d,
-0xffff
-};
-/* 1280x1024x16 */
-unsigned short cseq_1280x1024x16[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1707,
-0x760b,0x760c,0x760d,0x760e,
-0x0412,0x0013,0x2017,
-0x341b,0x341c,0x341d,0x341e,
-0xffff
-};
-unsigned short ccrtc_1280x1024x16[] = {
-0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
-0x6009,0x000c,0x000d,
-0x0310,0xff12,0x4013,0x4014,0xff15,0x2416,0xc317,0xff18,
-0x001a,0x321b,0x001d,
-0xffff
-};
-
-/* 1600x1200x8 */
-unsigned short cseq_1600x1200x8[] = {
-0x0300,0x2101,0x0f02,0x0003,0x0e04,0x1107,
-0x760b,0x760c,0x760d,0x760e,
-0x0412,0x0013,0x2017,
-0x341b,0x341c,0x341d,0x341e,
-0xffff
-};
-unsigned short ccrtc_1600x1200x8[] = {
-0x2911,0xc300,0x9f01,0x9f02,0x8603,0x8304,0x9405,0x2406,0xf707,
-0x6009,0x000c,0x000d,
-0x0310,0xff12,0xa013,0x4014,0xff15,0x2416,0xc317,0xff18,
-0x001a,0x221b,0x001d,
-0xffff
-};
-
-cirrus_mode_t cirrus_modes[] =
-{
- {0x5f,640,480,8,0x00,
- cseq_640x480x8,cgraph_svgacolor,ccrtc_640x480x8,8,
- 4,0,0,0,0,0,0,0,0},
- {0x64,640,480,16,0xe1,
- cseq_640x480x16,cgraph_svgacolor,ccrtc_640x480x16,16,
- 6,5,11,6,5,5,0,0,0},
- {0x66,640,480,15,0xf0,
- cseq_640x480x16,cgraph_svgacolor,ccrtc_640x480x16,16,
- 6,5,10,5,5,5,0,1,15},
- {0x71,640,480,24,0xe5,
- cseq_640x480x24,cgraph_svgacolor,ccrtc_640x480x24,24,
- 6,8,16,8,8,8,0,0,0},
-
- {0x5c,800,600,8,0x00,
- cseq_800x600x8,cgraph_svgacolor,ccrtc_800x600x8,8,
- 4,0,0,0,0,0,0,0,0},
- {0x65,800,600,16,0xe1,
- cseq_800x600x16,cgraph_svgacolor,ccrtc_800x600x16,16,
- 6,5,11,6,5,5,0,0,0},
- {0x67,800,600,15,0xf0,
- cseq_800x600x16,cgraph_svgacolor,ccrtc_800x600x16,16,
- 6,5,10,5,5,5,0,1,15},
-
- {0x60,1024,768,8,0x00,
- cseq_1024x768x8,cgraph_svgacolor,ccrtc_1024x768x8,8,
- 4,0,0,0,0,0,0,0,0},
- {0x74,1024,768,16,0xe1,
- cseq_1024x768x16,cgraph_svgacolor,ccrtc_1024x768x16,16,
- 6,5,11,6,5,5,0,0,0},
- {0x68,1024,768,15,0xf0,
- cseq_1024x768x16,cgraph_svgacolor,ccrtc_1024x768x16,16,
- 6,5,10,5,5,5,0,1,15},
-
- {0x78,800,600,24,0xe5,
- cseq_800x600x24,cgraph_svgacolor,ccrtc_800x600x24,24,
- 6,8,16,8,8,8,0,0,0},
- {0x79,1024,768,24,0xe5,
- cseq_1024x768x24,cgraph_svgacolor,ccrtc_1024x768x24,24,
- 6,8,16,8,8,8,0,0,0},
-
- {0x6d,1280,1024,8,0x00,
- cseq_1280x1024x8,cgraph_svgacolor,ccrtc_1280x1024x8,8,
- 4,0,0,0,0,0,0,0,0},
- {0x69,1280,1024,15,0xf0,
- cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16,16,
- 6,5,10,5,5,5,0,1,15},
- {0x75,1280,1024,16,0xe1,
- cseq_1280x1024x16,cgraph_svgacolor,ccrtc_1280x1024x16,16,
- 6,5,11,6,5,5,0,0,0},
-
- {0x7b,1600,1200,8,0x00,
- cseq_1600x1200x8,cgraph_svgacolor,ccrtc_1600x1200x8,8,
- 4,0,0,0,0,0,0,0,0},
-
- {0xfe,0,0,0,0,cseq_vga,cgraph_vga,ccrtc_vga,0,
- 0xff,0,0,0,0,0,0,0,0},
- {0xff,0,0,0,0,0,0,0,0,
- 0xff,0,0,0,0,0,0,0,0},
-};
-
-unsigned char cirrus_id_table[] = {
- // 5430
- 0xA0, 0x32,
- // 5446
- 0xB8, 0x39,
-
- 0xff, 0xff
-};
-
-
-unsigned short cirrus_vesa_modelist[] = {
-// 640x480x8
- 0x101, 0x5f,
-// 640x480x15
- 0x110, 0x66,
-// 640x480x16
- 0x111, 0x64,
-// 640x480x24
- 0x112, 0x71,
-// 800x600x8
- 0x103, 0x5c,
-// 800x600x15
- 0x113, 0x67,
-// 800x600x16
- 0x114, 0x65,
-// 800x600x24
- 0x115, 0x78,
-// 1024x768x8
- 0x105, 0x60,
-// 1024x768x15
- 0x116, 0x68,
-// 1024x768x16
- 0x117, 0x74,
-// 1024x768x24
- 0x118, 0x79,
-// 1280x1024x8
- 0x107, 0x6d,
-// 1280x1024x15
- 0x119, 0x69,
-// 1280x1024x16
- 0x11a, 0x75,
-// invalid
- 0xffff,0xffff
-};
-
-
-ASM_START
-
-cirrus_installed:
-.ascii "cirrus-compatible VGA is detected"
-.byte 0x0d,0x0a
-.byte 0x0d,0x0a,0x00
-
-cirrus_not_installed:
-.ascii "cirrus-compatible VGA is not detected"
-.byte 0x0d,0x0a
-.byte 0x0d,0x0a,0x00
-
-cirrus_vesa_vendorname:
-cirrus_vesa_productname:
-cirrus_vesa_oemname:
-.ascii "VGABIOS Cirrus extension"
-.byte 0
-cirrus_vesa_productrevision:
-.ascii "1.0"
-.byte 0
-
-cirrus_init:
- call cirrus_check
- jnz no_cirrus
- SET_INT_VECTOR(0x10, #0xC000, #cirrus_int10_handler)
- mov al, #0x0f ; memory setup
- mov dx, #0x3C4
- out dx, al
- inc dx
- in al, dx
- and al, #0x18
- mov ah, al
- mov al, #0x0a
- dec dx
- out dx, ax
- mov ax, #0x0007 ; set vga mode
- out dx, ax
- mov ax, #0x0431 ; reset bitblt
- mov dx, #0x3CE
- out dx, ax
- mov ax, #0x0031
- out dx, ax
-no_cirrus:
- ret
-
-cirrus_display_info:
- push ds
- push si
- push cs
- pop ds
- call cirrus_check
- mov si, #cirrus_not_installed
- jnz cirrus_msgnotinstalled
- mov si, #cirrus_installed
-
-cirrus_msgnotinstalled:
- call _display_string
- pop si
- pop ds
- ret
-
-cirrus_check:
- push ax
- push dx
- mov ax, #0x9206
- mov dx, #0x3C4
- out dx, ax
- inc dx
- in al, dx
- cmp al, #0x12
- pop dx
- pop ax
- ret
-
-
-cirrus_int10_handler:
- pushf
- push bp
- cmp ah, #0x00 ;; set video mode
- jz cirrus_set_video_mode
- cmp ah, #0x12 ;; cirrus extension
- jz cirrus_extbios
- cmp ah, #0x4F ;; VESA extension
- jz cirrus_vesa
-
-cirrus_unhandled:
- pop bp
- popf
- jmp vgabios_int10_handler
-
-cirrus_return:
-#ifdef CIRRUS_DEBUG
- call cirrus_debug_dump
-#endif
- pop bp
- popf
- iret
-
-cirrus_set_video_mode:
-#ifdef CIRRUS_DEBUG
- call cirrus_debug_dump
-#endif
- push si
- push ax
- push bx
- push ds
-#ifdef CIRRUS_VESA3_PMINFO
- db 0x2e ;; cs:
- mov si, [cirrus_vesa_sel0000_data]
-#else
- xor si, si
-#endif
- mov ds, si
- xor bx, bx
- mov [PM_BIOSMEM_VBE_MODE], bx
- pop ds
- pop bx
- call cirrus_get_modeentry
- jnc cirrus_set_video_mode_extended
- mov al, #0xfe
- call cirrus_get_modeentry_nomask
- call cirrus_switch_mode
- pop ax
- pop si
- jmp cirrus_unhandled
-
-cirrus_extbios:
-#ifdef CIRRUS_DEBUG
- call cirrus_debug_dump
-#endif
- cmp bl, #0x80
- jb cirrus_unhandled
- cmp bl, #0xAF
- ja cirrus_unhandled
- push bx
- and bx, #0x7F
- shl bx, 1
- db 0x2e ;; cs:
- mov bp, cirrus_extbios_handlers[bx]
- pop bx
- push #cirrus_return
- push bp
- ret
-
-cirrus_vesa:
-#ifdef CIRRUS_DEBUG
- call cirrus_debug_dump
-#endif
- cmp al, #0x10
- ja cirrus_vesa_not_handled
- push bx
- xor bx, bx
- mov bl, al
- shl bx, 1
- db 0x2e ;; cs:
- mov bp, cirrus_vesa_handlers[bx]
- pop bx
- push #cirrus_return
- push bp
- ret
-
-cirrus_vesa_not_handled:
- mov ax, #0x014F ;; not implemented
- jmp cirrus_return
-
-#ifdef CIRRUS_DEBUG
-cirrus_debug_dump:
- push es
- push ds
- pusha
- push cs
- pop ds
- call _cirrus_debugmsg
- popa
- pop ds
- pop es
- ret
-#endif
-
-cirrus_set_video_mode_extended:
- call cirrus_switch_mode
- pop ax ;; mode
- test al, #0x80
- jnz cirrus_set_video_mode_extended_1
- push ax
- mov ax, #0xffff ; set to 0xff to keep win 2K happy
- call cirrus_clear_vram
- pop ax
-cirrus_set_video_mode_extended_1:
- and al, #0x7f
-
- push ds
-#ifdef CIRRUS_VESA3_PMINFO
- db 0x2e ;; cs:
- mov si, [cirrus_vesa_sel0000_data]
-#else
- xor si, si
-#endif
- mov ds, si
- mov [PM_BIOSMEM_CURRENT_MODE], al
- pop ds
-
- mov al, #0x20
-
- pop si
- jmp cirrus_return
-
-cirrus_vesa_pmbios_init:
- retf
-cirrus_vesa_pmbios_entry:
- pushf
- push bp
- cmp ah, #0x4F
- jnz cirrus_vesa_pmbios_unimplemented
- cmp al, #0x0F
- ja cirrus_vesa_pmbios_unimplemented
- push bx
- xor bx, bx
- mov bl, al
- shl bx, 1
- db 0x2e ;; cs:
- mov bp, cirrus_vesa_handlers[bx]
- pop bx
- push #cirrus_vesa_pmbios_return
- push bp
- ret
-cirrus_vesa_pmbios_unimplemented:
- mov ax, #0x014F
-cirrus_vesa_pmbios_return:
- pop bp
- popf
- retf
-
-; in si:mode table
-cirrus_switch_mode:
- push ds
- push bx
- push dx
- push cs
- pop ds
-
- mov bx, [si+10] ;; seq
- mov dx, #0x3c4
- mov ax, #0x1206
- out dx, ax ;; Unlock cirrus special
- call cirrus_switch_mode_setregs
-
- mov bx, [si+12] ;; graph
- mov dx, #0x3ce
- call cirrus_switch_mode_setregs
-
- mov bx, [si+14] ;; crtc
- call cirrus_get_crtc
- call cirrus_switch_mode_setregs
-
- mov dx, #0x3c6
- mov al, #0x00
- out dx, al
- in al, dx
- in al, dx
- in al, dx
- in al, dx
- mov al, [si+8] ;; hidden dac
- out dx, al
- mov al, #0xff
- out dx, al
-
- mov al, #0x00
- mov bl, [si+17] ;; memory model
- or bl, bl
- jz is_text_mode
- mov al, #0x01
- cmp bl, #0x03
- jnz is_text_mode
- or al, #0x40
-is_text_mode:
- mov bl, #0x10
- call biosfn_get_single_palette_reg
- and bh, #0xfe
- or bh, al
- call biosfn_set_single_palette_reg
-
- pop dx
- pop bx
- pop ds
- ret
-
-cirrus_enable_16k_granularity:
- push ax
- push dx
- mov dx, #0x3ce
- mov al, #0x0b
- out dx, al
- inc dx
- in al, dx
- or al, #0x20 ;; enable 16k
- out dx, al
- pop dx
- pop ax
- ret
-
-cirrus_switch_mode_setregs:
-csms_1:
- mov ax, [bx]
- cmp ax, #0xffff
- jz csms_2
- out dx, ax
- add bx, #0x2
- jmp csms_1
-csms_2:
- ret
-
-cirrus_extbios_80h:
- push dx
- call cirrus_get_crtc
- mov al, #0x27
- out dx, al
- inc dx
- in al, dx
- mov bx, #_cirrus_id_table
-c80h_1:
- db 0x2e ;; cs:
- mov ah, [bx]
- cmp ah, al
- jz c80h_2
- cmp ah, #0xff
- jz c80h_2
- inc bx
- inc bx
- jmp c80h_1
-c80h_2:
- db 0x2e ;; cs:
- mov al, 0x1[bx]
- pop dx
- mov ah, #0x00
- xor bx, bx
- ret
-
-cirrus_extbios_81h:
- mov ax, #0x100 ;; XXX
- ret
-cirrus_extbios_82h:
- push dx
- call cirrus_get_crtc
- xor ax, ax
- mov al, #0x27
- out dx, al
- inc dx
- in al, dx
- and al, #0x03
- mov ah, #0xAF
- pop dx
- ret
-
-cirrus_extbios_85h:
- push cx
- push dx
- mov dx, #0x3C4
- mov al, #0x0f ;; get DRAM band width
- out dx, al
- inc dx
- in al, dx
- ;; al = 4 << bandwidth
- mov cl, al
- shr cl, #0x03
- and cl, #0x03
- cmp cl, #0x03
- je c85h2
- mov al, #0x04
- shl al, cl
- jmp c85h3
-c85h2:
-;; 4MB or 2MB
- and al, #0x80
- mov al, #0x20 ;; 2 MB
- je c85h3
- mov al, #0x40 ;; 4 MB
-c85h3:
- pop dx
- pop cx
- ret
-
-cirrus_extbios_9Ah:
- mov ax, #0x4060
- mov cx, #0x1132
- ret
-
-cirrus_extbios_A0h:
- call cirrus_get_modeentry
- mov ah, #0x01
- sbb ah, #0x00
- mov bx, cirrus_extbios_A0h_callback
- mov si, #0xffff
- mov di, bx
- mov ds, bx
- mov es, bx
- ret
-
-cirrus_extbios_A0h_callback:
- ;; fatal: not implemented yet
- cli
- hlt
- retf
-
-cirrus_extbios_A1h:
- mov bx, #0x0E00 ;; IBM 8512/8513, color
- ret
-
-cirrus_extbios_A2h:
- mov al, #0x07 ;; HSync 31.5 - 64.0 kHz
- ret
-
-cirrus_extbios_AEh:
- mov al, #0x01 ;; High Refresh 75Hz
- ret
-
-cirrus_extbios_unimplemented:
- ret
-
-cirrus_vesa_00h:
- push ds
- push si
- mov bp, di
- push es
- pop ds
- cld
- mov ax, [di]
- cmp ax, #0x4256 ;; VB
- jnz cv00_1
- mov ax, [di+2]
- cmp ax, #0x3245 ;; E2
- jnz cv00_1
- ;; VBE2
- lea di, 0x14[bp]
- mov ax, #0x0100 ;; soft ver.
- stosw
- mov ax, # cirrus_vesa_vendorname
- stosw
- mov ax, cs
- stosw
- mov ax, # cirrus_vesa_productname
- stosw
- mov ax, cs
- stosw
- mov ax, # cirrus_vesa_productrevision
- stosw
- mov ax, cs
- stosw
-cv00_1:
- mov di, bp
- mov ax, #0x4556 ;; VE
- stosw
- mov ax, #0x4153 ;; SA
- stosw
- mov ax, #0x0200 ;; v2.00
- stosw
- mov ax, # cirrus_vesa_oemname
- stosw
- mov ax, cs
- stosw
- xor ax, ax ;; caps
- stosw
- stosw
- lea ax, 0x40[bp]
- stosw
- mov ax, es
- stosw
- call cirrus_extbios_85h ;; vram in 64k
- mov ah, #0x00
- stosw
-
- push cs
- pop ds
- lea di, 0x40[bp]
- mov si, #_cirrus_vesa_modelist
-cv00_2:
- lodsw
- stosw
- add si, #2
- cmp ax, #0xffff
- jnz cv00_2
-
- mov ax, #0x004F
- mov di, bp
- pop si
- pop ds
- ret
-
-cirrus_vesa_01h:
- mov ax, cx
- and ax, #0x3fff
- call cirrus_vesamode_to_mode
- cmp ax, #0xffff
- jnz cirrus_vesa_01h_1
- jmp cirrus_vesa_unimplemented
-cirrus_vesa_01h_1:
- push ds
- push si
- push cx
- push dx
- push bx
- mov bp, di
- cld
- push cs
- pop ds
- call cirrus_get_modeentry_nomask
-
- push di
- xor ax, ax
- mov cx, #0x80
- rep
- stosw ;; clear buffer
- pop di
-
- mov ax, #0x003b ;; mode
- stosw
- mov ax, #0x0007 ;; attr
- stosw
- mov ax, #0x0010 ;; granularity =16K
- stosw
- mov ax, #0x0040 ;; size =64K
- stosw
- mov ax, #0xA000 ;; segment A
- stosw
- xor ax, ax ;; no segment B
- stosw
- mov ax, #cirrus_vesa_05h_farentry
- stosw
- mov ax, cs
- stosw
- call cirrus_get_line_offset_entry
- stosw ;; bytes per scan line
- mov ax, [si+2] ;; width
- stosw
- mov ax, [si+4] ;; height
- stosw
- mov ax, #0x08
- stosb
- mov ax, #0x10
- stosb
- mov al, #1 ;; count of planes
- stosb
- mov al, [si+6] ;; bpp
- stosb
- mov al, #0x1 ;; XXX number of banks
- stosb
- mov al, [si+17]
- stosb ;; memory model
- mov al, #0x0 ;; XXX size of bank in K
- stosb
- call cirrus_get_line_offset_entry
- mov bx, [si+4]
- mul bx ;; dx:ax=vramdisp
- or ax, ax
- jz cirrus_vesa_01h_3
- inc dx
-cirrus_vesa_01h_3:
- call cirrus_extbios_85h ;; al=vram in 64k
- mov ah, #0x00
- mov cx, dx
- xor dx, dx
- div cx
- dec ax
- stosb ;; number of image pages = vramtotal/vramdisp-1
- mov al, #0x00
- stosb
-
- ;; v1.2+ stuffs
- push si
- add si, #18
- movsw
- movsw
- movsw
- movsw
- pop si
-
- mov ah, [si+16]
- mov al, #0x0
- sub ah, #9
- rcl al, #1 ; bit 0=palette flag
- stosb ;; direct screen mode info
-
- ;; v2.0+ stuffs
- ;; 32-bit LFB address
- xor ax, ax
- stosw
- mov ax, #0x1013 ;; vendor Cirrus
- call _pci_get_lfb_addr
- stosw
- or ax, ax
- jz cirrus_vesa_01h_4
- push di
- mov di, bp
- db 0x26 ;; es:
- mov ax, [di]
- or ax, #0x0080 ;; mode bit 7:LFB
- stosw
- pop di
-cirrus_vesa_01h_4:
-
- xor ax, ax
- stosw ; reserved
- stosw ; reserved
- stosw ; reserved
-
- mov ax, #0x004F
- mov di, bp
- pop bx
- pop dx
- pop cx
- pop si
- pop ds
-
- test cx, #0x4000 ;; LFB flag
- jz cirrus_vesa_01h_5
- push cx
- db 0x26 ;; es:
- mov cx, [di]
- cmp cx, #0x0080 ;; is LFB supported?
- jnz cirrus_vesa_01h_6
- mov ax, #0x014F ;; error - no LFB
-cirrus_vesa_01h_6:
- pop cx
-cirrus_vesa_01h_5:
- ret
-
-cirrus_vesa_02h:
- ;; XXX support CRTC registers
- test bx, #0x3e00
- jnz cirrus_vesa_02h_2 ;; unknown flags
- mov ax, bx
- and ax, #0x1ff ;; bit 8-0 mode
- cmp ax, #0x100 ;; legacy VGA mode
- jb cirrus_vesa_02h_legacy
- call cirrus_vesamode_to_mode
- cmp ax, #0xffff
- jnz cirrus_vesa_02h_1
-cirrus_vesa_02h_2:
- jmp cirrus_vesa_unimplemented
-cirrus_vesa_02h_legacy:
-#ifdef CIRRUS_VESA3_PMINFO
- db 0x2e ;; cs:
- cmp byte ptr [cirrus_vesa_is_protected_mode], #0
- jnz cirrus_vesa_02h_2
-#endif // CIRRUS_VESA3_PMINFO
- int #0x10
- mov ax, #0x004F
- ret
-cirrus_vesa_02h_1:
- push si
- push ax
- call cirrus_get_modeentry_nomask
- call cirrus_switch_mode
- test bx, #0x4000 ;; LFB
- jnz cirrus_vesa_02h_3
- call cirrus_enable_16k_granularity
-cirrus_vesa_02h_3:
- test bx, #0x8000 ;; no clear
- jnz cirrus_vesa_02h_4
- push ax
- xor ax,ax
- call cirrus_clear_vram
- pop ax
-cirrus_vesa_02h_4:
- pop ax
- push ds
-#ifdef CIRRUS_VESA3_PMINFO
- db 0x2e ;; cs:
- mov si, [cirrus_vesa_sel0000_data]
-#else
- xor si, si
-#endif
- mov ds, si
- mov [PM_BIOSMEM_CURRENT_MODE], al
- mov [PM_BIOSMEM_VBE_MODE], bx
- pop ds
- pop si
- mov ax, #0x004F
- ret
-
-cirrus_vesa_03h:
- push ds
-#ifdef CIRRUS_VESA3_PMINFO
- db 0x2e ;; cs:
- mov ax, [cirrus_vesa_sel0000_data]
-#else
- xor ax, ax
-#endif
- mov ds, ax
- mov bx, # PM_BIOSMEM_VBE_MODE
- mov ax, [bx]
- mov bx, ax
- test bx, bx
- jnz cirrus_vesa_03h_1
- mov bx, # PM_BIOSMEM_CURRENT_MODE
- mov al, [bx]
- mov bl, al
- xor bh, bh
-cirrus_vesa_03h_1:
- mov ax, #0x004f
- pop ds
- ret
-
-cirrus_vesa_05h_farentry:
- call cirrus_vesa_05h
- retf
-
-cirrus_vesa_05h:
- cmp bl, #0x01
- ja cirrus_vesa_05h_1
- cmp bh, #0x00
- jz cirrus_vesa_05h_setmempage
- cmp bh, #0x01
- jz cirrus_vesa_05h_getmempage
-cirrus_vesa_05h_1:
- jmp cirrus_vesa_unimplemented
-cirrus_vesa_05h_setmempage:
- or dh, dh ; address must be < 0x100
- jnz cirrus_vesa_05h_1
- push dx
- mov al, bl ;; bl=bank number
- add al, #0x09
- mov ah, dl ;; dx=window address in granularity
- mov dx, #0x3ce
- out dx, ax
- pop dx
- mov ax, #0x004F
- ret
-cirrus_vesa_05h_getmempage:
- mov al, bl ;; bl=bank number
- add al, #0x09
- mov dx, #0x3ce
- out dx, al
- inc dx
- in al, dx
- xor dx, dx
- mov dl, al ;; dx=window address in granularity
- mov ax, #0x004F
- ret
-
-cirrus_vesa_06h:
- mov ax, cx
- cmp bl, #0x01
- je cirrus_vesa_06h_3
- cmp bl, #0x02
- je cirrus_vesa_06h_2
- jb cirrus_vesa_06h_1
- mov ax, #0x0100
- ret
-cirrus_vesa_06h_1:
- call cirrus_get_bpp_bytes
- mov bl, al
- xor bh, bh
- mov ax, cx
- mul bx
-cirrus_vesa_06h_2:
- call cirrus_set_line_offset
-cirrus_vesa_06h_3:
- call cirrus_get_bpp_bytes
- mov bl, al
- xor bh, bh
- xor dx, dx
- call cirrus_get_line_offset
- push ax
- div bx
- mov cx, ax
- pop bx
- call cirrus_extbios_85h ;; al=vram in 64k
- xor dx, dx
- mov dl, al
- xor ax, ax
- div bx
- mov dx, ax
- mov ax, #0x004f
- ret
-
-cirrus_vesa_07h:
- cmp bl, #0x80
- je cirrus_vesa_07h_1
- cmp bl, #0x01
- je cirrus_vesa_07h_2
- jb cirrus_vesa_07h_1
- mov ax, #0x0100
- ret
-cirrus_vesa_07h_1:
- push dx
- call cirrus_get_bpp_bytes
- mov bl, al
- xor bh, bh
- mov ax, cx
- mul bx
- pop bx
- push ax
- call cirrus_get_line_offset
- mul bx
- pop bx
- add ax, bx
- jnc cirrus_vesa_07h_3
- inc dx
-cirrus_vesa_07h_3:
- push dx
- and dx, #0x0003
- mov bx, #0x04
- div bx
- pop dx
- shr dx, #2
- call cirrus_set_start_addr
- mov ax, #0x004f
- ret
-cirrus_vesa_07h_2:
- call cirrus_get_start_addr
- shl dx, #2
- push dx
- mov bx, #0x04
- mul bx
- pop bx
- or dx, bx
- push ax
- call cirrus_get_line_offset
- mov bx, ax
- pop ax
- div bx
- push ax
- push dx
- call cirrus_get_bpp_bytes
- mov bl, al
- xor bh, bh
- pop ax
- xor dx, dx
- div bx
- mov cx, ax
- pop dx
- mov ax, #0x004f
- ret
-
-cirrus_vesa_10h:
- cmp bl, #0x00
- jne cirrus_vesa_10h_01
- mov bx, #0x0f30
- mov ax, #0x004f
- ret
-cirrus_vesa_10h_01:
- cmp bl, #0x01
- jne cirrus_vesa_10h_02
- push dx
- push ds
- mov dx, #0x40
- mov ds, dx
- mov [0xb9], bh
- pop ds
- pop dx
- mov ax, #0x004f
- ret
-cirrus_vesa_10h_02:
- cmp bl, #0x02
- jne cirrus_vesa_unimplemented
- push dx
- push ds
- mov dx, #0x40
- mov ds, dx
- mov bh, [0xb9]
- pop ds
- pop dx
- mov ax, #0x004f
- ret
-
-cirrus_vesa_unimplemented:
- mov ax, #0x014F ;; not implemented
- ret
-
-
-;; in ax:vesamode, out ax:cirrusmode
-cirrus_vesamode_to_mode:
- push ds
- push cx
- push si
- push cs
- pop ds
- mov cx, #0xffff
- mov si, #_cirrus_vesa_modelist
-cvtm_1:
- cmp [si],ax
- jz cvtm_2
- cmp [si],cx
- jz cvtm_2
- add si, #4
- jmp cvtm_1
-cvtm_2:
- mov ax,[si+2]
- pop si
- pop cx
- pop ds
- ret
-
- ; cirrus_get_crtc
- ;; NOTE - may be called in protected mode
-cirrus_get_crtc:
- push ds
- push ax
- mov dx, #0x3cc
- in al, dx
- and al, #0x01
- shl al, #5
- mov dx, #0x3b4
- add dl, al
- pop ax
- pop ds
- ret
-
-;; in - al:mode, out - cflag:result, si:table, ax:destroyed
-cirrus_get_modeentry:
- and al, #0x7f
-cirrus_get_modeentry_nomask:
- mov si, #_cirrus_modes
-cgm_1:
- db 0x2e ;; cs:
- mov ah, [si]
- cmp al, ah
- jz cgm_2
- cmp ah, #0xff
- jz cgm_4
- add si, # CIRRUS_MODE_SIZE
- jmp cgm_1
-cgm_4:
- xor si, si
- stc ;; video mode is not supported
- jmp cgm_3
-cgm_2:
- clc ;; video mode is supported
-cgm_3:
- ret
-
-;; out - al:bytes per pixel
-cirrus_get_bpp_bytes:
- push dx
- mov dx, #0x03c4
- mov al, #0x07
- out dx, al
- inc dx
- in al, dx
- and al, #0x0e
- cmp al, #0x06
- jne cirrus_get_bpp_bytes_1
- and al, #0x02
-cirrus_get_bpp_bytes_1:
- shr al, #1
- cmp al, #0x04
- je cirrus_get_bpp_bytes_2
- inc al
-cirrus_get_bpp_bytes_2:
- pop dx
- ret
-
-;; in - ax: new line offset
-cirrus_set_line_offset:
- shr ax, #3
- push ax
- call cirrus_get_crtc
- mov al, #0x13
- out dx, al
- inc dx
- pop ax
- out dx, al
- dec dx
- mov al, #0x1b
- out dx, al
- inc dx
- shl ah, #4
- in al, dx
- and al, #ef
- or al, ah
- out dx, al
- ret
-
-;; out - ax: active line offset
-cirrus_get_line_offset:
- push dx
- push bx
- call cirrus_get_crtc
- mov al, #0x13
- out dx, al
- inc dx
- in al, dx
- mov bl, al
- dec dx
- mov al, #0x1b
- out dx, al
- inc dx
- in al, dx
- mov ah, al
- shr ah, #4
- and ah, #0x01
- mov al, bl
- shl ax, #3
- pop bx
- pop dx
- ret
-
-;; in - si: table
-;; out - ax: line offset for mode
-cirrus_get_line_offset_entry:
- push bx
- mov bx, [si+14] ;; crtc table
- push bx
-offset_loop1:
- mov ax, [bx]
- cmp al, #0x13
- je offset_found1
- inc bx
- inc bx
- jnz offset_loop1
-offset_found1:
- xor al, al
- shr ax, #5
- pop bx
- push ax
-offset_loop2:
- mov ax, [bx]
- cmp al, #0x1b
- je offset_found2
- inc bx
- inc bx
- jnz offset_loop2
-offset_found2:
- pop bx
- and ax, #0x1000
- shr ax, #1
- or ax, bx
- pop bx
- ret
-
-;; in - new address in DX:AX
-cirrus_set_start_addr:
- push bx
- push dx
- push ax
- call cirrus_get_crtc
- mov al, #0x0d
- out dx, al
- inc dx
- pop ax
- out dx, al
- dec dx
- mov al, #0x0c
- out dx, al
- inc dx
- mov al, ah
- out dx, al
- dec dx
- mov al, #0x1d
- out dx, al
- inc dx
- in al, dx
- and al, #0x7f
- pop bx
- mov ah, bl
- shl bl, #4
- and bl, #0x80
- or al, bl
- out dx, al
- dec dx
- mov bl, ah
- and ah, #0x01
- shl bl, #1
- and bl, #0x0c
- or ah, bl
- mov al, #0x1b
- out dx, al
- inc dx
- in al, dx
- and al, #0xf2
- or al, ah
- out dx, al
- pop bx
- ret
-
-;; out - current address in DX:AX
-cirrus_get_start_addr:
- push bx
- call cirrus_get_crtc
- mov al, #0x0c
- out dx, al
- inc dx
- in al, dx
- mov ah, al
- dec dx
- mov al, #0x0d
- out dx, al
- inc dx
- in al, dx
- push ax
- dec dx
- mov al, #0x1b
- out dx, al
- inc dx
- in al, dx
- dec dx
- mov bl, al
- and al, #0x01
- and bl, #0x0c
- shr bl, #1
- or bl, al
- mov al, #0x1d
- out dx, al
- inc dx
- in al, dx
- and al, #0x80
- shr al, #4
- or bl, al
- mov dl, bl
- xor dh, dh
- pop ax
- pop bx
- ret
-
-cirrus_clear_vram:
- pusha
- push es
- mov si, ax
-
- call cirrus_enable_16k_granularity
- call cirrus_extbios_85h
- shl al, #2
- mov bl, al
- xor ah,ah
-cirrus_clear_vram_1:
- mov al, #0x09
- mov dx, #0x3ce
- out dx, ax
- push ax
- mov cx, #0xa000
- mov es, cx
- xor di, di
- mov ax, si
- mov cx, #8192
- cld
- rep
- stosw
- pop ax
- inc ah
- cmp ah, bl
- jne cirrus_clear_vram_1
-
- xor ah,ah
- mov dx, #0x3ce
- out dx, ax
-
- pop es
- popa
- ret
-
-cirrus_extbios_handlers:
- ;; 80h
- dw cirrus_extbios_80h
- dw cirrus_extbios_81h
- dw cirrus_extbios_82h
- dw cirrus_extbios_unimplemented
- ;; 84h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_85h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; 88h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; 8Ch
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; 90h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; 94h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; 98h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_9Ah
- dw cirrus_extbios_unimplemented
- ;; 9Ch
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; A0h
- dw cirrus_extbios_A0h
- dw cirrus_extbios_A1h
- dw cirrus_extbios_A2h
- dw cirrus_extbios_unimplemented
- ;; A4h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; A8h
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- ;; ACh
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_unimplemented
- dw cirrus_extbios_AEh
- dw cirrus_extbios_unimplemented
-
-cirrus_vesa_handlers:
- ;; 00h
- dw cirrus_vesa_00h
- dw cirrus_vesa_01h
- dw cirrus_vesa_02h
- dw cirrus_vesa_03h
- ;; 04h
- dw cirrus_vesa_unimplemented
- dw cirrus_vesa_05h
- dw cirrus_vesa_06h
- dw cirrus_vesa_07h
- ;; 08h
- dw cirrus_vesa_unimplemented
- dw cirrus_vesa_unimplemented
- dw cirrus_vesa_unimplemented
- dw cirrus_vesa_unimplemented
- ;; 0Ch
- dw cirrus_vesa_unimplemented
- dw cirrus_vesa_unimplemented
- dw cirrus_vesa_unimplemented
- dw cirrus_vesa_unimplemented
- ;; 10h
- dw cirrus_vesa_10h
-
-
-ASM_END
-
-#ifdef CIRRUS_VESA3_PMINFO
-ASM_START
-cirrus_vesa_pminfo:
- /* + 0 */
- .byte 0x50,0x4d,0x49,0x44 ;; signature[4]
- /* + 4 */
- dw cirrus_vesa_pmbios_entry ;; entry_bios
- dw cirrus_vesa_pmbios_init ;; entry_init
- /* + 8 */
-cirrus_vesa_sel0000_data:
- dw 0x0000 ;; sel_00000
-cirrus_vesa_selA000_data:
- dw 0xA000 ;; sel_A0000
- /* +12 */
-cirrus_vesa_selB000_data:
- dw 0xB000 ;; sel_B0000
-cirrus_vesa_selB800_data:
- dw 0xB800 ;; sel_B8000
- /* +16 */
-cirrus_vesa_selC000_data:
- dw 0xC000 ;; sel_C0000
-cirrus_vesa_is_protected_mode:
- ;; protected mode flag and checksum
- dw (~((0xf2 + (cirrus_vesa_pmbios_entry >> 8) + (cirrus_vesa_pmbios_entry) \
- + (cirrus_vesa_pmbios_init >> 8) + (cirrus_vesa_pmbios_init)) & 0xff) << 8) + 0x01
-ASM_END
-#endif // CIRRUS_VESA3_PMINFO
-
-
-#ifdef CIRRUS_DEBUG
-static void cirrus_debugmsg(DI, SI, BP, SP, BX, DX, CX, AX, DS, ES, FLAGS)
- Bit16u DI, SI, BP, SP, BX, DX, CX, AX, ES, DS, FLAGS;
-{
- if((GET_AH()!=0x0E)&&(GET_AH()!=0x02)&&(GET_AH()!=0x09)&&(AX!=0x4F05))
- printf("vgabios call ah%02x al%02x bx%04x cx%04x dx%04x\n",GET_AH(),GET_AL(),BX,CX,DX);
-}
-#endif