aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Ruppert <info@vruppert.de>2003-04-18 07:23:36 +0000
committerVolker Ruppert <info@vruppert.de>2003-04-18 07:23:36 +0000
commitc58361bc320f285829cfe898fdb3e8760fb2c916 (patch)
tree59bd7498473bdde49b10b856f066a83091f6a988
parenta0154ee941433e9c04ffc058cf54eaa513eaf34c (diff)
downloadvgabios-c58361bc320f285829cfe898fdb3e8760fb2c916.tar.gz
- applied patch #1331
* new function dispi_set_bank_farcall() * VBE mode info item WinFuncPtr points to the new function if the flag VBE_WINDOW_ATTRIBUTE_RELOCATABLE is set * flag VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE added
-rw-r--r--vbe.c33
-rw-r--r--vbe.h1
-rw-r--r--vbetables.h26
3 files changed, 54 insertions, 6 deletions
diff --git a/vbe.c b/vbe.c
index 6a9b7f0..a952daa 100644
--- a/vbe.c
+++ b/vbe.c
@@ -192,6 +192,35 @@ static void dispi_set_bank(bank)
outw(VBE_DISPI_IOPORT_DATA,bank);
}
+static void dispi_set_bank_farcall()
+{
+ASM_START
+ cmp bx,#0x0100
+ je dispi_set_bank_farcall_get
+ or bx,bx
+ jnz dispi_set_bank_farcall_error
+ push dx
+ mov ax,# VBE_DISPI_INDEX_BANK
+ mov dx,# VBE_DISPI_IOPORT_INDEX
+ out dx,ax
+ pop ax
+ mov dx,# VBE_DISPI_IOPORT_DATA
+ out dx,ax
+ retf
+dispi_set_bank_farcall_get:
+ mov ax,# VBE_DISPI_INDEX_BANK
+ mov dx,# VBE_DISPI_IOPORT_INDEX
+ out dx,ax
+ mov dx,# VBE_DISPI_IOPORT_DATA
+ in ax,dx
+ mov dx,ax
+ retf
+dispi_set_bank_farcall_error:
+ mov ax,#0x014F
+ retf
+ASM_END
+}
+
static void dispi_set_x_offset(offset)
Bit16u offset;
{
@@ -510,6 +539,10 @@ Bit16u *AX;Bit16u CX; Bit16u ES;Bit16u DI;
#endif
memsetb(ss, &info, 0, sizeof(ModeInfoBlock));
memcpyb(ss, &info, 0xc000, &(cur_info->info), sizeof(ModeInfoBlockCompact));
+ if (info.WinAAttributes & VBE_WINDOW_ATTRIBUTE_RELOCATABLE) {
+ info.WinFuncPtr = 0xC0000000UL;
+ *(Bit16u *)&(info.WinFuncPtr) = (Bit16u)(dispi_set_bank_farcall);
+ }
result = 0x4f;
}
diff --git a/vbe.h b/vbe.h
index 2ca0d11..09a27f8 100644
--- a/vbe.h
+++ b/vbe.h
@@ -225,6 +225,7 @@ typedef struct ModeInfoBlock
// Mode Attributes
#define VBE_MODE_ATTRIBUTE_SUPPORTED 0x0001
+#define VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE 0x0002
#define VBE_MODE_ATTRIBUTE_TTY_BIOS_SUPPORT 0x0004
#define VBE_MODE_ATTRIBUTE_COLOR_MODE 0x0008
#define VBE_MODE_ATTRIBUTE_GRAPHICS_MODE 0x0010
diff --git a/vbetables.h b/vbetables.h
index 2f2e5c5..326977d 100644
--- a/vbetables.h
+++ b/vbetables.h
@@ -27,6 +27,7 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
#ifdef VBE_HAVE_LFB
@@ -96,13 +97,15 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
#ifdef VBE_HAVE_LFB
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
#endif
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |
+ /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
+ VBE_WINDOW_ATTRIBUTE_READABLE |
VBE_WINDOW_ATTRIBUTE_WRITEABLE,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
@@ -165,6 +168,7 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
#ifdef VBE_HAVE_LFB
@@ -234,12 +238,13 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |
- VBE_WINDOW_ATTRIBUTE_WRITEABLE |
- VBE_WINDOW_ATTRIBUTE_RELOCATABLE,
+ /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
+ VBE_WINDOW_ATTRIBUTE_READABLE |
+ VBE_WINDOW_ATTRIBUTE_WRITEABLE,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
/*Bit16u WinSize*/ VBE_DISPI_BANK_SIZE_KB,
@@ -297,13 +302,15 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
#ifdef VBE_HAVE_LFB
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
#endif
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |
+ /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
+ VBE_WINDOW_ATTRIBUTE_READABLE |
VBE_WINDOW_ATTRIBUTE_WRITEABLE,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
@@ -366,13 +373,15 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
#ifdef VBE_HAVE_LFB
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
#endif
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
- /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |
+ /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_RELOCATABLE |
+ VBE_WINDOW_ATTRIBUTE_READABLE |
VBE_WINDOW_ATTRIBUTE_WRITEABLE,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ VBE_DISPI_BANK_SIZE_KB,
@@ -436,6 +445,7 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
@@ -560,6 +570,7 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
@@ -622,6 +633,7 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
@@ -684,6 +696,7 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
@@ -746,6 +759,7 @@ static ModeInfoListItem mode_info_list[]=
{*/
// Mandatory information for all VBE revisions
/*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
VBE_MODE_ATTRIBUTE_COLOR_MODE |
VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |