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 /vbe.c | |
parent | 3af22b433acd1046f2ec38d1c88bca6148bf7bc1 (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.c | 20 |
1 files changed, 15 insertions, 5 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); } |