aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Ruppert <info@vruppert.de>2003-07-01 17:00:33 +0000
committerVolker Ruppert <info@vruppert.de>2003-07-01 17:00:33 +0000
commitf40a5a63a27ae86945fb72247d1c1ed79f82d4dd (patch)
treea3ef0138553fcd690a75afbb90816b0586234bc2
parent125eba8089e5780bc15ad269da0accd03a71e17e (diff)
downloadvgabios-f40a5a63a27ae86945fb72247d1c1ed79f82d4dd.tar.gz
- VBE preserve display memory feature implemented
- VBE mode entries 0x117 and 0x118 added
-rw-r--r--vbe.c12
-rw-r--r--vbe.h1
-rw-r--r--vbetables.h140
3 files changed, 149 insertions, 4 deletions
diff --git a/vbe.c b/vbe.c
index 71c171b..63679ce 100644
--- a/vbe.c
+++ b/vbe.c
@@ -106,6 +106,8 @@ _vbebios_mode_list:
.word VBE_VESA_MODE_640X480X888
.word VBE_VESA_MODE_800X600X565
.word VBE_VESA_MODE_800X600X888
+.word VBE_VESA_MODE_1024X768X565
+.word VBE_VESA_MODE_1024X768X888
.word VBE_OWN_MODE_800X600X8888
.word VBE_OWN_MODE_1024X768X8888
.word VBE_OWN_MODE_320X200X8
@@ -580,11 +582,13 @@ Bit16u *AX;Bit16u BX; Bit16u ES;Bit16u DI;
Bit16u result;
ModeInfoListItem *cur_info;
Boolean using_lfb;
-
+ Bit8u no_clear;
+
using_lfb=((BX & VBE_MODE_LINEAR_FRAME_BUFFER) == VBE_MODE_LINEAR_FRAME_BUFFER);
-
+ no_clear=((BX & VBE_MODE_PRESERVE_DISPLAY_MEMORY) == VBE_MODE_PRESERVE_DISPLAY_MEMORY)?VBE_DISPI_NOCLEARMEM:0;
+
BX = (BX & 0x1ff);
-
+
//result=read_word(ss,AX);
// check for non vesa mode
@@ -625,7 +629,7 @@ Bit16u *AX;Bit16u BX; Bit16u ES;Bit16u DI;
dispi_set_yres(cur_info->info.YResolution);
dispi_set_bpp(cur_info->info.BitsPerPixel);
dispi_set_bank(0);
- dispi_set_enable(VBE_DISPI_ENABLED);
+ dispi_set_enable(VBE_DISPI_ENABLED | no_clear);
// FIXME: store current mode in BIOS data area
diff --git a/vbe.h b/vbe.h
index 6067034..2edda29 100644
--- a/vbe.h
+++ b/vbe.h
@@ -296,6 +296,7 @@ typedef struct ModeInfoBlock
#define VBE_DISPI_DISABLED 0x00
#define VBE_DISPI_ENABLED 0x01
+ #define VBE_DISPI_NOCLEARMEM 0x80
#define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000
diff --git a/vbetables.h b/vbetables.h
index 0c7f99b..ba7c663 100644
--- a/vbetables.h
+++ b/vbetables.h
@@ -570,6 +570,76 @@ static ModeInfoListItem mode_info_list[]=
},
{
+ VBE_VESA_MODE_1024X768X565,
+ {
+/*typedef struct ModeInfoBlock
+{*/
+// Mandatory information for all VBE revisions
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
+ 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_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,
+ /*Bit16u WinASegment*/ VGAMEM_GRAPH,
+ /*Bit16u WinBSegment*/ 0,
+ /*Bit32u WinFuncPtr*/ 0,
+ /*Bit16u BytesPerScanLine*/ 1024*2,
+// Mandatory information for VBE 1.2 and above
+ /*Bit16u XResolution*/ 1024,
+ /*Bit16u YResolution*/ 768,
+ /*Bit8u XCharSize*/ 8,
+ /*Bit8u YCharSize*/ 16,
+ /*Bit8u NumberOfPlanes*/ 1,
+ /*Bit8u BitsPerPixel*/ 16,
+ /*Bit8u NumberOfBanks*/ 1,
+ /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+ /*Bit8u BankSize*/ 0,
+ /*Bit8u NumberOfImagePages*/ 0,
+ /*Bit8u Reserved_page*/ 0,
+// Direct Color fields (required for direct/6 and YUV/7 memory models)
+ /*Bit8u RedMaskSize*/ 5,
+ /*Bit8u RedFieldPosition*/ 11,
+ /*Bit8u GreenMaskSize*/ 6,
+ /*Bit8u GreenFieldPosition*/ 5,
+ /*Bit8u BlueMaskSize*/ 5,
+ /*Bit8u BlueFieldPosition*/ 0,
+ /*Bit8u RsvdMaskSize*/ 0,
+ /*Bit8u RsvdFieldPosition*/ 0,
+ /*Bit8u DirectColorModeInfo*/ 0,
+// Mandatory information for VBE 2.0 and above
+#ifdef VBE_HAVE_LFB
+ /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+#else
+ /*Bit32u PhysBasePtr*/ 0,
+#endif
+ /*Bit32u OffScreenMemOffset*/ 0,
+ /*Bit16u OffScreenMemSize*/ 0,
+// Mandatory information for VBE 3.0 and above
+ /*Bit16u LinBytesPerScanLine*/ 1024*2,
+ /*Bit8u BnkNumberOfPages*/ 0,
+ /*Bit8u LinNumberOfPages*/ 0,
+ /*Bit8u LinRedMaskSize*/ 5,
+ /*Bit8u LinRedFieldPosition*/ 11,
+ /*Bit8u LinGreenMaskSize*/ 6,
+ /*Bit8u LinGreenFieldPosition*/ 5,
+ /*Bit8u LinBlueMaskSize*/ 5,
+ /*Bit8u LinBlueFieldPosition*/ 0,
+ /*Bit8u LinRsvdMaskSize*/ 0,
+ /*Bit8u LinRsvdFieldPosition*/ 0,
+ /*Bit32u MaxPixelClock*/ 0,
+/*} ModeInfoBlock;*/
+ }
+ },
+
+ {
VBE_VESA_MODE_640X480X888,
{
/*typedef struct ModeInfoBlock
@@ -710,6 +780,76 @@ static ModeInfoListItem mode_info_list[]=
},
{
+ VBE_VESA_MODE_1024X768X888,
+ {
+/*typedef struct ModeInfoBlock
+{*/
+// Mandatory information for all VBE revisions
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_EXTENDED_INFORMATION_AVAILABLE |
+ 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_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,
+ /*Bit16u WinASegment*/ VGAMEM_GRAPH,
+ /*Bit16u WinBSegment*/ 0,
+ /*Bit32u WinFuncPtr*/ 0,
+ /*Bit16u BytesPerScanLine*/ 1024*3,
+// Mandatory information for VBE 1.2 and above
+ /*Bit16u XResolution*/ 1024,
+ /*Bit16u YResolution*/ 768,
+ /*Bit8u XCharSize*/ 8,
+ /*Bit8u YCharSize*/ 16,
+ /*Bit8u NumberOfPlanes*/ 1,
+ /*Bit8u BitsPerPixel*/ 24,
+ /*Bit8u NumberOfBanks*/ 1,
+ /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR,
+ /*Bit8u BankSize*/ 0,
+ /*Bit8u NumberOfImagePages*/ 0,
+ /*Bit8u Reserved_page*/ 0,
+// Direct Color fields (required for direct/6 and YUV/7 memory models)
+ /*Bit8u RedMaskSize*/ 8,
+ /*Bit8u RedFieldPosition*/ 16,
+ /*Bit8u GreenMaskSize*/ 8,
+ /*Bit8u GreenFieldPosition*/ 8,
+ /*Bit8u BlueMaskSize*/ 8,
+ /*Bit8u BlueFieldPosition*/ 0,
+ /*Bit8u RsvdMaskSize*/ 0,
+ /*Bit8u RsvdFieldPosition*/ 0,
+ /*Bit8u DirectColorModeInfo*/ 0,
+// Mandatory information for VBE 2.0 and above
+#ifdef VBE_HAVE_LFB
+ /*Bit32u PhysBasePtr*/ VBE_DISPI_LFB_PHYSICAL_ADDRESS,
+#else
+ /*Bit32u PhysBasePtr*/ 0,
+#endif
+ /*Bit32u OffScreenMemOffset*/ 0,
+ /*Bit16u OffScreenMemSize*/ 0,
+// Mandatory information for VBE 3.0 and above
+ /*Bit16u LinBytesPerScanLine*/ 1024*3,
+ /*Bit8u BnkNumberOfPages*/ 0,
+ /*Bit8u LinNumberOfPages*/ 0,
+ /*Bit8u LinRedMaskSize*/ 8,
+ /*Bit8u LinRedFieldPosition*/ 16,
+ /*Bit8u LinGreenMaskSize*/ 8,
+ /*Bit8u LinGreenFieldPosition*/ 8,
+ /*Bit8u LinBlueMaskSize*/ 8,
+ /*Bit8u LinBlueFieldPosition*/ 0,
+ /*Bit8u LinRsvdMaskSize*/ 0,
+ /*Bit8u LinRsvdFieldPosition*/ 0,
+ /*Bit32u MaxPixelClock*/ 0,
+/*} ModeInfoBlock;*/
+ }
+ },
+
+ {
VBE_OWN_MODE_800X600X8888,
{
/*typedef struct ModeInfoBlock