aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Ruppert <info@vruppert.de>2003-07-15 10:35:37 +0000
committerVolker Ruppert <info@vruppert.de>2003-07-15 10:35:37 +0000
commitf74de57642c3a129fcb7299deeedf47c0a5b51e6 (patch)
tree7ab7fad5b39de273f2ada9885c81e78dd8d8d1a9
parent3af22b433acd1046f2ec38d1c88bca6148bf7bc1 (diff)
downloadvgabios-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.c20
-rw-r--r--vbetables.h28
2 files changed, 29 insertions, 19 deletions
diff --git a/vbe.c b/vbe.c
index de216ac..c211114 100644
--- a/vbe.c
+++ b/vbe.c
@@ -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,