diff options
author | Volker Ruppert <info@vruppert.de> | 2003-07-01 17:00:33 +0000 |
---|---|---|
committer | Volker Ruppert <info@vruppert.de> | 2003-07-01 17:00:33 +0000 |
commit | f40a5a63a27ae86945fb72247d1c1ed79f82d4dd (patch) | |
tree | a3ef0138553fcd690a75afbb90816b0586234bc2 | |
parent | 125eba8089e5780bc15ad269da0accd03a71e17e (diff) | |
download | vgabios-f40a5a63a27ae86945fb72247d1c1ed79f82d4dd.tar.gz |
- VBE preserve display memory feature implemented
- VBE mode entries 0x117 and 0x118 added
-rw-r--r-- | vbe.c | 12 | ||||
-rw-r--r-- | vbe.h | 1 | ||||
-rw-r--r-- | vbetables.h | 140 |
3 files changed, 149 insertions, 4 deletions
@@ -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 @@ -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 |