aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeroen Janssen <japj@xs4all.nl>2002-03-06 17:00:57 +0000
committerJeroen Janssen <japj@xs4all.nl>2002-03-06 17:00:57 +0000
commite4d18dfab132aa282f74c9e4208faadc414564ee (patch)
tree8835dcdf05fdd0bd0a7a55cf43121094d13692e2
parent4fbc1220df38aa9559886c04e145a0d18c99e486 (diff)
downloadvgabios-e4d18dfab132aa282f74c9e4208faadc414564ee.tar.gz
- implemented banked & lfb support for 320x200x8bpp
(some fixes for vbetest program not displaying anything)
-rw-r--r--vbe.c2
-rw-r--r--vbe.h3
-rw-r--r--vbetables.h57
3 files changed, 44 insertions, 18 deletions
diff --git a/vbe.c b/vbe.c
index 2ebef08..ba8b82a 100644
--- a/vbe.c
+++ b/vbe.c
@@ -70,6 +70,7 @@ _vbebios_product_revision:
// FIXME: for each new mode add a statement here
// at least until dynamic list creation is working
_vbebios_mode_list:
+#ifdef LIST_UNSUPPORTED_MODI
.word VBE_VESA_MODE_640X400X8
.word VBE_VESA_MODE_640X480X8
.word VBE_VESA_MODE_640X480X565
@@ -78,6 +79,7 @@ _vbebios_mode_list:
.word VBE_VESA_MODE_800X600X888
.word VBE_OWN_MODE_800X600X8888
.word VBE_OWN_MODE_1024X768X8888
+#endif
.word VBE_OWN_MODE_320X200X8
.word VBE_VESA_MODE_END_OF_LIST
#endif
diff --git a/vbe.h b/vbe.h
index d12f426..680b50a 100644
--- a/vbe.h
+++ b/vbe.h
@@ -262,6 +262,9 @@ typedef struct ModeInfoBlock
// like 0xE0000000
#define VBE_PHYSICAL_BASE_ADDRESS 0x3b00000
+#define VGAMEM_GRAPH_PHYSICAL_ADDRESS 0xA0000
+#define VBE_BANK_SIZE_KB 64
+
// FIXME: Add actual host <-> guest IOPORT
#define VBE_BIOS_CALLBACK_IOPORT 0xFF00
#define VBE_TOTAL_VIDEO_MEMORY_DIV_64K (4*1024/64)
diff --git a/vbetables.h b/vbetables.h
index c6ad88c..fc39fbb 100644
--- a/vbetables.h
+++ b/vbetables.h
@@ -14,6 +14,7 @@ typedef struct ModeInfoListItem
ModeInfoBlockCompact info;
} ModeInfoListItem;
+//#define LIST_UNSUPPORTED_MODI
// FIXME: check all member variables to be correct for the different modi
// FIXME: add more modi
@@ -25,16 +26,21 @@ static ModeInfoListItem mode_info_list[]=
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTRIBUTE_COLOR_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
- /*Bit8u WinAAttributes*/ 0,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTRIBUTE_COLOR_MODE |
+ VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE,
+ /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE |
+ VBE_WINDOW_ATTRIBUTE_WRITEABLE,
/*Bit8u WinBAttributes*/ 0,
- /*Bit16u WinGranularity*/ 0,
- /*Bit16u WinSize*/ 0,
- /*Bit16u WinASegment*/ 0,
+ /*Bit16u WinGranularity*/ VBE_BANK_SIZE_KB,
+ /*Bit16u WinSize*/ VBE_BANK_SIZE_KB,
+ /*Bit16u WinASegment*/ VGAMEM_GRAPH,
/*Bit16u WinBSegment*/ 0,
/*Bit32u WinFuncPtr*/ 0,
/*Bit16u BytesPerScanLine*/ 320,
-// Mandatory information for VBE 1.2 and above
+// Mandatory information for VBE 1.2 and above
/*Bit16u XResolution*/ 320,
/*Bit16u YResolution*/ 200,
/*Bit8u XCharSize*/ 8,
@@ -57,10 +63,10 @@ static ModeInfoListItem mode_info_list[]=
/*Bit8u RsvdFieldPosition*/ 0,
/*Bit8u DirectColorModeInfo*/ 0,
// Mandatory information for VBE 2.0 and above
- /*Bit32u PhysBasePtr*/ 0xa0000, //FIXME: this allows this mode to be displayed using the standard 320x200x8 vga mode
+ /*Bit32u PhysBasePtr*/ VGAMEM_GRAPH_PHYSICAL_ADDRESS, //FIXME: this allows this mode to be displayed using the standard 320x200x8 vga mode
/*Bit32u OffScreenMemOffset*/ 0,
/*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
+// Mandatory information for VBE 3.0 and above
/*Bit16u LinBytesPerScanLine*/ 320,
/*Bit8u BnkNumberOfPages*/ 0,
/*Bit8u LinNumberOfPages*/ 0,
@@ -76,14 +82,16 @@ static ModeInfoListItem mode_info_list[]=
/*} ModeInfoBlock;*/
}
},
-
+#ifdef LIST_UNSUPPORTED_MODI
{
VBE_VESA_MODE_640X400X8,
{
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTTRIBUTE_LFB_ONLY,
/*Bit8u WinAAttributes*/ 0,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ 0,
@@ -92,7 +100,7 @@ static ModeInfoListItem mode_info_list[]=
/*Bit16u WinBSegment*/ 0,
/*Bit32u WinFuncPtr*/ 0,
/*Bit16u BytesPerScanLine*/ 640,
-// Mandatory information for VBE 1.2 and above
+// Mandatory information for VBE 1.2 and above
/*Bit16u XResolution*/ 640,
/*Bit16u YResolution*/ 400,
/*Bit8u XCharSize*/ 8,
@@ -118,7 +126,7 @@ static ModeInfoListItem mode_info_list[]=
/*Bit32u PhysBasePtr*/ VBE_PHYSICAL_BASE_ADDRESS,
/*Bit32u OffScreenMemOffset*/ 0,
/*Bit16u OffScreenMemSize*/ 0,
-// Mandatory information for VBE 3.0 and above
+// Mandatory information for VBE 3.0 and above
/*Bit16u LinBytesPerScanLine*/ 640,
/*Bit8u BnkNumberOfPages*/ 0,
/*Bit8u LinNumberOfPages*/ 0,
@@ -141,7 +149,9 @@ static ModeInfoListItem mode_info_list[]=
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTTRIBUTE_LFB_ONLY,
/*Bit8u WinAAttributes*/ 0,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ 0,
@@ -199,7 +209,9 @@ static ModeInfoListItem mode_info_list[]=
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTTRIBUTE_LFB_ONLY,
/*Bit8u WinAAttributes*/ 0,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ 0,
@@ -315,7 +327,9 @@ static ModeInfoListItem mode_info_list[]=
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTTRIBUTE_LFB_ONLY,
/*Bit8u WinAAttributes*/ 0,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ 0,
@@ -373,7 +387,9 @@ static ModeInfoListItem mode_info_list[]=
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTTRIBUTE_LFB_ONLY,
/*Bit8u WinAAttributes*/ 0,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ 0,
@@ -431,7 +447,9 @@ static ModeInfoListItem mode_info_list[]=
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTTRIBUTE_LFB_ONLY,
/*Bit8u WinAAttributes*/ 0,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ 0,
@@ -489,7 +507,9 @@ static ModeInfoListItem mode_info_list[]=
/*typedef struct ModeInfoBlock
{*/
// Mandatory information for all VBE revisions
- /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED | VBE_MODE_ATTRIBUTE_GRAPHICS_MODE | VBE_MODE_ATTTRIBUTE_LFB_ONLY,
+ /*Bit16u ModeAttributes*/ VBE_MODE_ATTRIBUTE_SUPPORTED |
+ VBE_MODE_ATTRIBUTE_GRAPHICS_MODE |
+ VBE_MODE_ATTTRIBUTE_LFB_ONLY,
/*Bit8u WinAAttributes*/ 0,
/*Bit8u WinBAttributes*/ 0,
/*Bit16u WinGranularity*/ 0,
@@ -540,6 +560,7 @@ static ModeInfoListItem mode_info_list[]=
/*} ModeInfoBlock;*/
}
},
+#endif
/** END OF THE LIST **/
{