summaryrefslogtreecommitdiff
path: root/vbe.c
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 /vbe.c
parent3af22b433acd1046f2ec38d1c88bca6148bf7bc1 (diff)
- 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
Diffstat (limited to 'vbe.c')
-rw-r--r--vbe.c20
1 files changed, 15 insertions, 5 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);
}