diff options
Diffstat (limited to 'qemu/roms/vgabios/vbe_display_api.txt')
-rw-r--r-- | qemu/roms/vgabios/vbe_display_api.txt | 237 |
1 files changed, 0 insertions, 237 deletions
diff --git a/qemu/roms/vgabios/vbe_display_api.txt b/qemu/roms/vgabios/vbe_display_api.txt deleted file mode 100644 index fddb78b4b..000000000 --- a/qemu/roms/vgabios/vbe_display_api.txt +++ /dev/null @@ -1,237 +0,0 @@ -VBE Display API -------------------------------------------------------------------------------------------------------------- - This document is part of the Bochs/VBEBios documentation, - it specifies the bochs host <-> vbebios client communication. - - That means, the display code implementation and the vbebios code depend - very heavily on each other. As such, this documents needs be synchronised - between bochs CVS and the vgabios CVS. - - This document does not describe how the VBEBios implements the VBE2/3 spec. - This document does not describe how the Bochs display code will display gfx based upon this spec. - - -API History ------------ -0xb0c0 supports the following VBE_DISPI_ interfaces (present in Bochs 1.4): - VBE_DISPI_INDEX_ID - VBE_DISPI_INDEX_XRES - VBE_DISPI_INDEX_YRES - VBE_DISPI_INDEX_BPP - VBE_DISPI_INDEX_ENABLE - VBE_DISPI_INDEX_BANK - - Bpp format supported is: - VBE_DISPI_BPP_8 - -0xb0c1 supports 0xb0c0 VBE_DISPI_ interfaces, additional interfaces (present in Bochs 2.0): - VBE_DISPI_INDEX_VIRT_WIDTH - VBE_DISPI_INDEX_VIRT_HEIGHT - VBE_DISPI_INDEX_X_OFFSET - VBE_DISPI_INDEX_Y_OFFSET - -0xb0c2 supports 0xb0c1 VBE_DISPI_ interfaces, interfaces updated for - additional features (present in Bochs 2.1): - VBE_DISPI_INDEX_BPP supports >8bpp color depth (value = bits) - VBE_DISPI_INDEX_ENABLE supports new flags VBE_DISPI_NOCLEARMEM and VBE_DISPI_LFB_ENABLED - VBE i/o registers changed from 0xFF80/81 to 0x01CE/CF - -0xb0c3 supports 0xb0c2 VBE_DISPI_ interfaces, interfaces updated for - additional features: - VBE_DISPI_INDEX_ENABLE supports new flags VBE_DISPI_GETCAPS and VBE_DISPI_8BIT_DAC - -0xb0c4 VBE video memory increased to 8 MB - - -History -------- - Version 0.6 2002 Nov 23 Jeroen Janssen - - Added LFB support - - Added Virt width, height and x,y offset - - Version 0.5 2002 March 08 Jeroen Janssen - - Added documentation about panic behaviour / current limits of the data values. - - Changed BPP API (in order to include future (A)RGB formats) - - Initial version (based upon extended display text of the vbe bochs display patch) - - -Todo ----- - Version 0.6+ [random order] - - Add lots of different (A)RGB formats - -References ----------- - [VBE3] VBE 3 Specification at - http://www.vesa.org/vbe3.pdf - - [BOCHS] Bochs Open Source IA-32 Emulator at - http://bochs.sourceforge.net - - [VBEBIOS] VBE Bios for Bochs at - http://savannah.gnu.org/projects/vgabios/ - - [Screenshots] Screenshots of programs using the VBE Bios at - http://japj.org/projects/bochs_plex86/screenshots.html - -Abbreviations -------------- - VBE Vesa Bios Extension - DISPI (Bochs) Display Interface - BPP Bits Per Pixel - LFB Linear Frame Buffer - - -#defines --------- -vbetables-gen.c - #define VBE_DISPI_TOTAL_VIDEO_MEMORY_MB 8 - -vbe.h - #define VBE_DISPI_BANK_ADDRESS 0xA0000 - #define VBE_DISPI_BANK_SIZE_KB 64 - - #define VBE_DISPI_MAX_XRES 1024 - #define VBE_DISPI_MAX_YRES 768 - - #define VBE_DISPI_IOPORT_INDEX 0x01CE - #define VBE_DISPI_IOPORT_DATA 0x01CF - - #define VBE_DISPI_INDEX_ID 0x0 - #define VBE_DISPI_INDEX_XRES 0x1 - #define VBE_DISPI_INDEX_YRES 0x2 - #define VBE_DISPI_INDEX_BPP 0x3 - #define VBE_DISPI_INDEX_ENABLE 0x4 - #define VBE_DISPI_INDEX_BANK 0x5 - #define VBE_DISPI_INDEX_VIRT_WIDTH 0x6 - #define VBE_DISPI_INDEX_VIRT_HEIGHT 0x7 - #define VBE_DISPI_INDEX_X_OFFSET 0x8 - #define VBE_DISPI_INDEX_Y_OFFSET 0x9 - - #define VBE_DISPI_ID0 0xB0C0 - #define VBE_DISPI_ID1 0xB0C1 - #define VBE_DISPI_ID2 0xB0C2 - #define VBE_DISPI_ID3 0xB0C3 - #define VBE_DISPI_ID4 0xB0C4 - - #define VBE_DISPI_DISABLED 0x00 - #define VBE_DISPI_ENABLED 0x01 - #define VBE_DISPI_VBE_ENABLED 0x40 - #define VBE_DISPI_NOCLEARMEM 0x80 - - #define VBE_DISPI_LFB_PHYSICAL_ADDRESS 0xE0000000 - -API ---- - The display api works by using a index (VBE_DISPI_IOPORT_INDEX) and - data (VBE_DISPI_IOPORT_DATA) ioport. One writes the index of the parameter to the index port. - Next, the parameter value can be read or written. - -[0xb0c0] - * VBE_DISPI_INDEX_ID : WORD {R,W} - This parameter can be used to detect the current display API (both bochs & vbebios). - The bios writes VBE_DISPI_ID0 to the dataport and reads it back again. - This way, the display code knows the vbebios 'ID' and the vbebios can check if the correct - display code is present. - As a result, a PANIC can be generated if an incompatible vbebios/display code combination is detected. - This panic can be generated from the bochs display code (NOT the bios, see Notes). - - Example values: VBE_DISPI_ID0 - - * VBE_DISPI_INDEX_XRES : WORD {R,W} - This parameter can be used to read/write the vbe display X resolution (in pixels). - It's illegal to set the XRES when the VBE is enabled (display code should generate PANIC). - - If the value written exceeds VBE_DISPI_MAX_XRES, the display code needs to generate a PANIC. - - Example values: 320,640,800,1024 - - * VBE_DISPI_INDEX_YRES : WORD {R,W} - This parameter can be used to read/write the vbe display Y resolution (in pixels). - It's illegal to set the YRES when the VBE is enabled (display code should generate PANIC). - - If the value written exceeds VBE_DISPI_MAX_YRES, the display code needs to generate a PANIC. - - Example values: 200,400,480,600,768 - - * VBE_DISPI_INDEX_BPP : WORD {R,W} - This parameter can be used to read/write the vbe display BPP. - It's illegal to set the BPP when the VBE is enabled (display code should generate PANIC). - - If the value written is an incompatible BPP, the display code needs to generate a PANIC. - - Example values: VBE_DISPI_BPP_8 - - * VBE_DISPI_INDEX_ENABLE : WORD {R,W} - This parameter can be used to read/write the vbe ENABLED state. - If the bios writes VBE_DISPI_ENABLED then the display code will setup a hostside display mode - with the current XRES, YRES and BPP settings. - If the bios write VBE_DISPI_DISABLED then the display code will switch back to normal vga mode behaviour. - - Example values: VBE_DISPI_ENABLED, VBE_DISPI_DISABLED - - * VBE_DISPI_INDEX_BANK : WORD {R,W} - This parameter can be used to read/write the current selected BANK (at 0xA0000). - This can be used for switching banks in banked mode. - -[0xb0c1] - * VBE_DISPI_INDEX_VIRT_WIDTH : WORD {R,W} - This parameter can be used to read/write the current virtual width. - Upon enabling a mode, this will be set to the current xres - Setting this field during enabled mode will result in the virtual width to be changed. - Value will be adjusted if current setting is not possible. - - * VBE_DISPI_INDEX_VIRT_HEIGHT : WORD {R} - This parameter can be read in order to obtain the current virtual height. - This setting will be adjusted after setting a virtual width in order to stay within limit of video memory. - - * VBE_DISPI_INDEX_X_OFFSET : WORD {R,W} - The current X offset (in pixels!) of the visible screen part. - Writing a new offset will also result in a complete screen refresh. - - * VBE_DISPI_INDEX_Y_OFFSET : WORD {R,W} - The current Y offset (in pixels!) of the visible screen part. - Writing a new offset will also result in a complete screen refresh. - - -[0xb0c2] - * VBE_DISPI_INDEX_BPP : WORD {R,W} - The value written is now the number of bits per pixel. A value of 0 is treated - the same as 8 for backward compatibilty. These values are supported: 8, 15, - 16, 24 and 32. The value of 4 is not yet handled in the VBE code. - * VBE_DISPI_INDEX_ENABLE : WORD {R,W} - The new flag VBE_DISPI_NOCLEARMEM allows to preserve the VBE video memory. - The new flag VBE_DISPI_LFB_ENABLED indicates the usage of the LFB. - -[0xb0c3] - * VBE_DISPI_INDEX_ENABLE : WORD {R,W} - If the new flag VBE_DISPI_GETCAPS is enabled, the xres, yres and bpp registers - return the gui capabilities. - The new flag VBE_DISPI_8BIT_DAC switches the DAC to 8 bit mode. - -[0xb0c4] - * VBE_DISPI_TOTAL_VIDEO_MEMORY_MB set to 8 (moved to auto-generated vbetables.h) - -Displaying GFX (banked mode) --------------- - What happens is that the total screen is devided in banks of 'VBE_DISPI_BANK_SIZE_KB' KiloByte in size. - If you want to set a pixel you can calculate its bank by doing: - - offset = pixel_x + pixel_y * resolution_x; - bank = offset / 64 Kb (rounded 1.9999 -> 1) - - bank_pixel_pos = offset - bank * 64Kb - - Now you can set the current bank and put the pixel at VBE_DISPI_BANK_ADDRESS + bank_pixel_pos - -Displaying GFX (linear frame buffer mode) --------------- - NOT WRITTEN YET - -Notes ------ - * Since the XRES/YRES/BPP may not be written when VBE is enabled, if you want to switch from one VBE mode - to another, you will need to disable VBE first. - - * Note when the bios doesn't find a valid DISPI_ID, it can disable the VBE functions. This allows people to - use the same bios for both vbe enabled and disabled bochs executables. |