diff options
author | Volker Ruppert <info@vruppert.de> | 2003-07-15 10:35:37 +0000 |
---|---|---|
committer | Volker Ruppert <info@vruppert.de> | 2003-07-15 10:35:37 +0000 |
commit | f74de57642c3a129fcb7299deeedf47c0a5b51e6 (patch) | |
tree | 7ab7fad5b39de273f2ada9885c81e78dd8d8d1a9 | |
parent | 3af22b433acd1046f2ec38d1c88bca6148bf7bc1 (diff) | |
download | vgabios-f74de57642c3a129fcb7299deeedf47c0a5b51e6.tar.gz |
- new function dispi_get_bpp()
- function vbe_biosfn_set_get_logical_scan_line_length() fixed for >8bpp
- number of image pages of all VBE modes fixed
-rw-r--r-- | vbe.c | 20 | ||||
-rw-r--r-- | vbetables.h | 28 |
2 files changed, 29 insertions, 19 deletions
@@ -172,6 +172,12 @@ static void dispi_set_bpp(bpp) outw(VBE_DISPI_IOPORT_DATA,bpp); } +static Bit16u dispi_get_bpp() +{ + outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_BPP); + return inw(VBE_DISPI_IOPORT_DATA); +} + static Bit16u dispi_get_enable() { outw(VBE_DISPI_IOPORT_INDEX,VBE_DISPI_INDEX_ENABLE); @@ -774,14 +780,19 @@ Bit16u *AX;Bit16u *BX;Bit16u *DX;Bit16u *DX; Bit16u result=0x100; Bit16u width = read_word(ss, CX); Bit16u cmd = read_word(ss, BX); - + Bit8u bytespp = dispi_get_bpp()/8; + // check bl if ( ((cmd & 0xff) == 0x00) || ((cmd & 0xff) == 0x02) ) { - // set scan line lenght in pixels(0x00) or bytes (0x00) + // set scan line lenght in pixels(0x00) or bytes (0x02) Bit16u new_width; Bit16u new_height; - + + if ( ((cmd & 0xff) == 0x02) && (bytespp > 1) ) + { + width/=bytespp; + } dispi_set_virt_width(width); new_width=dispi_get_virt_width(); new_height=dispi_get_virt_height(); @@ -800,8 +811,7 @@ Bit16u *AX;Bit16u *BX;Bit16u *DX;Bit16u *DX; result=0x4f; } - // FIXME: adjust for higher bpp (in bytes) - write_word(ss,BX,new_width); + write_word(ss,BX,new_width*bytespp); write_word(ss,CX,new_width); write_word(ss,DX,new_height); } diff --git a/vbetables.h b/vbetables.h index 338a8d0..e9dee6f 100644 --- a/vbetables.h +++ b/vbetables.h @@ -120,7 +120,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 4, // 640x400/64kb == 4 /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 3, + /*Bit8u NumberOfImagePages*/ 15, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 0, @@ -189,7 +189,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 5, // 640x480/64kb == 5 /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 3, + /*Bit8u NumberOfImagePages*/ 11, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 0, @@ -256,7 +256,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PLANAR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 1, + /*Bit8u NumberOfImagePages*/ 0, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 0, @@ -322,7 +322,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 8, // 800x600/64kb == 8 /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_PACKED_PIXEL, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 3, + /*Bit8u NumberOfImagePages*/ 7, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 0, @@ -462,7 +462,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 5, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 5, @@ -532,7 +532,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 3, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 5, @@ -602,7 +602,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 1, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 5, @@ -672,7 +672,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 5, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 5, @@ -742,7 +742,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 3, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 5, @@ -812,7 +812,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 1, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 5, @@ -882,7 +882,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 3, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 8, @@ -952,7 +952,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 1, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 8, @@ -1092,7 +1092,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 1, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 8, @@ -1162,7 +1162,7 @@ static ModeInfoListItem mode_info_list[]= /*Bit8u NumberOfBanks*/ 1, /*Bit8u MemoryModel*/ VBE_MEMORYMODEL_DIRECT_COLOR, /*Bit8u BankSize*/ 0, - /*Bit8u NumberOfImagePages*/ 0, + /*Bit8u NumberOfImagePages*/ 1, /*Bit8u Reserved_page*/ 0, // Direct Color fields (required for direct/6 and YUV/7 memory models) /*Bit8u RedMaskSize*/ 8, |