@@ -545,17 +545,13 @@ bochs_vbe_outw(uint16_t addr, uint16_t val, void *priv)
545545 break ;
546546 case VBE_DISPI_INDEX_BANK :
547547 if (dev -> vbe_regs [VBE_DISPI_INDEX_BPP ] <= 4 )
548- max_bank = ((dev -> vram_size >> 16 ) - 1 ) >> 2 ; /* Each bank really covers 256K */
549- if (val & VBE_DISPI_BANK_RD )
550- dev -> svga .read_bank = ((dev -> vram_size >> 16 ) - 1 ) >> 2 ; /* Each bank really covers 256K */
551- if (val & VBE_DISPI_BANK_WR )
552- dev -> svga .write_bank = ((dev -> vram_size >> 16 ) - 1 ) >> 2 ; /* Each bank really covers 256K */
548+ max_bank = (val & 0x1ff ) * (dev -> bank_gran << 10 ) >> 2 ; /* Each bank really covers 256K */
553549 else
554- max_bank = (( dev -> vram_size >> 16 ) - 1 );
550+ max_bank = (val & 0x1ff ) * ( dev -> bank_gran << 10 );
555551 if (val & VBE_DISPI_BANK_RD )
556- dev -> svga .read_bank = (( dev -> vram_size >> 16 ) - 1 );
552+ dev -> svga .read_bank = (val & 0x1ff ) * ( dev -> bank_gran << 10 );
557553 if (val & VBE_DISPI_BANK_WR )
558- dev -> svga .write_bank = (( dev -> vram_size >> 16 ) - 1 );
554+ dev -> svga .write_bank = (val & 0x1ff ) * ( dev -> bank_gran << 10 );
559555 /* Old software may pass garbage in the high byte of bank. If the
560556 * maximum bank fits into a single byte, toss the high byte the user
561557 * supplied.
@@ -583,7 +579,7 @@ bochs_vbe_outw(uint16_t addr, uint16_t val, void *priv)
583579 if (!cVirtWidth )
584580 cVirtWidth = dev -> vbe_regs [VBE_DISPI_INDEX_XRES ];
585581 if (!cVirtWidth || !dev -> vbe_regs [VBE_DISPI_INDEX_YRES ] || cb > dev -> vram_size ) {
586- printf ("VIRT WIDTH=%d YRES=%d cb=%d vram_size=%d\n" ,
582+ printf ("VIRT WIDTH=%d YRES=%d cb=%ld vram_size=%d\n" ,
587583 dev -> vbe_regs [VBE_DISPI_INDEX_VIRT_WIDTH ],
588584 dev -> vbe_regs [VBE_DISPI_INDEX_YRES ], cb , dev -> vram_size );
589585 return ; /* Note: silent failure like before */
0 commit comments