diff options
author | Volker Ruppert <info@vruppert.de> | 2003-02-09 10:02:45 +0000 |
---|---|---|
committer | Volker Ruppert <info@vruppert.de> | 2003-02-09 10:02:45 +0000 |
commit | f93afc8d0eb415d19e81a1c64233cae9f9986b64 (patch) | |
tree | fa51418049b595779e4f01434c04c13db1961324 | |
parent | 5468a07ad6645416fd441ba929151fe81f654df3 (diff) | |
download | vgabios-f93afc8d0eb415d19e81a1c64233cae9f9986b64.tar.gz |
- VESA mode 0x102 added (uses existing SVGA mode 0x6a)
- all VESA modes with the LFB flag set removed from the list (Linux doesn't
like mode numbers > 0x07ff)
-rw-r--r-- | vbe.c | 24 | ||||
-rw-r--r-- | vbe.h | 1 | ||||
-rw-r--r-- | vbetables.h | 63 |
3 files changed, 74 insertions, 14 deletions
@@ -102,28 +102,19 @@ _vbebios_mode_list: #ifdef LIST_UNSUPPORTED_MODI .word VBE_VESA_MODE_640X480X565 -.word VBE_VESA_MODE_640X480X565 + 0x4000 .word VBE_VESA_MODE_800X600X565 -.word VBE_VESA_MODE_800X600X565 + 0x4000 .word VBE_VESA_MODE_640X480X888 -.word VBE_VESA_MODE_640X480X888 + 0x4000 .word VBE_VESA_MODE_800X600X888 -.word VBE_VESA_MODE_800X600X888 + 0x4000 .word VBE_OWN_MODE_800X600X8888 -.word VBE_OWN_MODE_800X600X8888 + 0x4000 .word VBE_OWN_MODE_1024X768X8888 -.word VBE_OWN_MODE_1024X768X8888 + 0x4000 #endif -.word VBE_OWN_MODE_320X200X8 .word VBE_VESA_MODE_640X400X8 -.word VBE_VESA_MODE_640X400X8 + 0x4000 .word VBE_VESA_MODE_640X480X8 -.word VBE_VESA_MODE_640X480X8 + 0x4000 +.word VBE_VESA_MODE_800X600X4 .word VBE_VESA_MODE_800X600X8 -.word VBE_VESA_MODE_800X600X8 + 0x4000 .word VBE_VESA_MODE_1024X768X8 -.word VBE_VESA_MODE_1024X768X8 + 0x4000 +.word VBE_OWN_MODE_320X200X8 .word VBE_VESA_MODE_END_OF_LIST #endif @@ -596,16 +587,21 @@ Bit16u *AX;Bit16u BX; Bit16u ES;Bit16u DI; // (we're using the 'standard' 320x200x256 vga mode as if it // were a vesa mode) - if (cur_info->info.BitsPerPixel == 8) + if (cur_info->info.BitsPerPixel <= 8) { - // we have a 8bpp mode, preparing to set it + // we have a 4bpp or 8bpp mode, preparing to set it // first disable current mode (when switching between vesa modi) dispi_set_enable(VBE_DISPI_DISABLED); + if (cur_info->mode == VBE_VESA_MODE_800X600X4) + { + biosfn_set_video_mode(0x6a); + } + dispi_set_xres(cur_info->info.XResolution); dispi_set_yres(cur_info->info.YResolution); - dispi_set_bpp(VBE_DISPI_BPP_8); + dispi_set_bpp((cur_info->info.BitsPerPixel == 8)?VBE_DISPI_BPP_8:VBE_DISPI_BPP_4); dispi_set_bank(0); dispi_set_enable(VBE_DISPI_ENABLED); @@ -293,6 +293,7 @@ typedef struct ModeInfoBlock #define VBE_DISPI_ID1 0xB0C1 #define VBE_DISPI_BPP_8 0x0 + #define VBE_DISPI_BPP_4 0x4 // The following is not support yet, but just for reference available. // #define VBE_DISPI_BPP_RGB565 0x1 // #define VBE_DISPI_BPP_RGB555 0x2 diff --git a/vbetables.h b/vbetables.h index ae208ad..d3c712e 100644 --- a/vbetables.h +++ b/vbetables.h @@ -366,6 +366,69 @@ static ModeInfoListItem mode_info_list[]= }, { + VBE_VESA_MODE_800X600X4, + { +/*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_ATTRIBUTE_GRAPHICS_MODE, + /*Bit8u WinAAttributes*/ VBE_WINDOW_ATTRIBUTE_READABLE | + VBE_WINDOW_ATTRIBUTE_WRITEABLE | + VBE_WINDOW_ATTRIBUTE_RELOCATABLE, + /*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*/ 800, +// Mandatory information for VBE 1.2 and above + /*Bit16u XResolution*/ 800, + /*Bit16u YResolution*/ 600, + /*Bit8u XCharSize*/ 8, + /*Bit8u YCharSize*/ 16, + /*Bit8u NumberOfPlanes*/ 4, + /*Bit8u BitsPerPixel*/ 4, + /*Bit8u NumberOfBanks*/ 1, + /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR, + /*Bit8u BankSize*/ 0, + /*Bit8u NumberOfImagePages*/ 1, + /*Bit8u Reserved_page*/ 0, +// Direct Color fields (required for direct/6 and YUV/7 memory models) + /*Bit8u RedMaskSize*/ 0, + /*Bit8u RedFieldPosition*/ 0, + /*Bit8u GreenMaskSize*/ 0, + /*Bit8u GreenFieldPosition*/ 0, + /*Bit8u BlueMaskSize*/ 0, + /*Bit8u BlueFieldPosition*/ 0, + /*Bit8u RsvdMaskSize*/ 0, + /*Bit8u RsvdFieldPosition*/ 0, + /*Bit8u DirectColorModeInfo*/ 0, +// Mandatory information for VBE 2.0 and above + /*Bit32u PhysBasePtr*/ 0, + /*Bit32u OffScreenMemOffset*/ 0, + /*Bit16u OffScreenMemSize*/ 0, +// Mandatory information for VBE 3.0 and above + /*Bit16u LinBytesPerScanLine*/ 800, + /*Bit8u BnkNumberOfPages*/ 0, + /*Bit8u LinNumberOfPages*/ 0, + /*Bit8u LinRedMaskSize*/ 0, + /*Bit8u LinRedFieldPosition*/ 0, + /*Bit8u LinGreenMaskSize*/ 0, + /*Bit8u LinGreenFieldPosition*/ 0, + /*Bit8u LinBlueMaskSize*/ 0, + /*Bit8u LinBlueFieldPosition*/ 0, + /*Bit8u LinRsvdMaskSize*/ 0, + /*Bit8u LinRsvdFieldPosition*/ 0, + /*Bit32u MaxPixelClock*/ 0, +/*} ModeInfoBlock;*/ + } + }, + + { VBE_VESA_MODE_800X600X8, { /*typedef struct ModeInfoBlock |