PCI graphics cards initialization fixes.
This commit is contained in:
@@ -3532,13 +3532,10 @@ static void *mach64_common_init(const device_t *info)
|
||||
mach64_overlay_draw);
|
||||
mach64->svga.dac_hwcursor.cur_ysize = 64;
|
||||
|
||||
if (info->flags & DEVICE_PCI)
|
||||
mem_mapping_disable(&mach64->bios_rom.mapping);
|
||||
|
||||
mem_mapping_add(&mach64->linear_mapping, 0, 0, svga_read_linear, svga_readw_linear, svga_readl_linear, svga_write_linear, svga_writew_linear, svga_writel_linear, NULL, MEM_MAPPING_EXTERNAL, &mach64->svga);
|
||||
mem_mapping_add(&mach64->mmio_linear_mapping, 0, 0, mach64_ext_readb, mach64_ext_readw, mach64_ext_readl, mach64_ext_writeb, mach64_ext_writew, mach64_ext_writel, NULL, MEM_MAPPING_EXTERNAL, mach64);
|
||||
mem_mapping_add(&mach64->mmio_linear_mapping_2, 0, 0, mach64_ext_readb, mach64_ext_readw, mach64_ext_readl, mach64_ext_writeb, mach64_ext_writew, mach64_ext_writel, NULL, MEM_MAPPING_EXTERNAL, mach64);
|
||||
mem_mapping_add(&mach64->mmio_mapping, 0xbc000, 0x04000, mach64_ext_readb, mach64_ext_readw, mach64_ext_readl, mach64_ext_writeb, mach64_ext_writew, mach64_ext_writel, NULL, MEM_MAPPING_EXTERNAL, mach64);
|
||||
mem_mapping_add(&mach64->linear_mapping, 0, 0, svga_read_linear, svga_readw_linear, svga_readl_linear, svga_write_linear, svga_writew_linear, svga_writel_linear, NULL, MEM_MAPPING_EXTERNAL, &mach64->svga);
|
||||
mem_mapping_add(&mach64->mmio_linear_mapping, 0, 0, mach64_ext_readb, mach64_ext_readw, mach64_ext_readl, mach64_ext_writeb, mach64_ext_writew, mach64_ext_writel, NULL, MEM_MAPPING_EXTERNAL, mach64);
|
||||
mem_mapping_add(&mach64->mmio_linear_mapping_2, 0, 0, mach64_ext_readb, mach64_ext_readw, mach64_ext_readl, mach64_ext_writeb, mach64_ext_writew, mach64_ext_writel, NULL, MEM_MAPPING_EXTERNAL, mach64);
|
||||
mem_mapping_add(&mach64->mmio_mapping, 0xbc000, 0x04000, mach64_ext_readb, mach64_ext_readw, mach64_ext_readl, mach64_ext_writeb, mach64_ext_writew, mach64_ext_writel, NULL, MEM_MAPPING_EXTERNAL, mach64);
|
||||
mem_mapping_disable(&mach64->mmio_mapping);
|
||||
|
||||
mach64_io_set(mach64);
|
||||
@@ -3604,6 +3601,9 @@ static void *mach64gx_init(const device_t *info)
|
||||
else if (info->flags & DEVICE_ISA)
|
||||
rom_init(&mach64->bios_rom, BIOS_ISA_ROM_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
if (info->flags & DEVICE_PCI)
|
||||
mem_mapping_disable(&mach64->bios_rom.mapping);
|
||||
|
||||
return mach64;
|
||||
}
|
||||
static void *mach64vt2_init(const device_t *info)
|
||||
@@ -3628,6 +3628,9 @@ static void *mach64vt2_init(const device_t *info)
|
||||
|
||||
rom_init(&mach64->bios_rom, BIOS_ROMVT2_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
if (info->flags & DEVICE_PCI)
|
||||
mem_mapping_disable(&mach64->bios_rom.mapping);
|
||||
|
||||
svga->vblank_start = mach64_vblank_start;
|
||||
|
||||
return mach64;
|
||||
|
@@ -3708,6 +3708,11 @@ cl_pci_write(int func, int addr, uint8_t val, void *p)
|
||||
io_sethandler(0x03c0, 0x0020, gd54xx_in, NULL, NULL, gd54xx_out, NULL, NULL, gd54xx);
|
||||
if ((val & PCI_COMMAND_MEM) && (gd54xx->vgablt_base != 0x00000000) && (gd54xx->vgablt_base < 0xfff00000))
|
||||
mem_mapping_set_addr(&gd54xx->vgablt_mapping, gd54xx->vgablt_base, 0x1000);
|
||||
if ((gd54xx->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_MEM) && (gd54xx->pci_regs[0x30] & 0x01)) {
|
||||
uint32_t addr = (gd54xx->pci_regs[0x32] << 16) | (gd54xx->pci_regs[0x33] << 24);
|
||||
mem_mapping_set_addr(&gd54xx->bios_rom.mapping, addr, 0x8000);
|
||||
} else
|
||||
mem_mapping_disable(&gd54xx->bios_rom.mapping);
|
||||
gd543x_recalc_mapping(gd54xx);
|
||||
break;
|
||||
|
||||
@@ -3735,7 +3740,7 @@ cl_pci_write(int func, int addr, uint8_t val, void *p)
|
||||
|
||||
case 0x30: case 0x32: case 0x33:
|
||||
gd54xx->pci_regs[addr] = val;
|
||||
if (gd54xx->pci_regs[0x30] & 0x01) {
|
||||
if ((gd54xx->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_MEM) && (gd54xx->pci_regs[0x30] & 0x01)) {
|
||||
uint32_t addr = (gd54xx->pci_regs[0x32] << 16) | (gd54xx->pci_regs[0x33] << 24);
|
||||
mem_mapping_set_addr(&gd54xx->bios_rom.mapping, addr, 0x8000);
|
||||
} else
|
||||
@@ -4061,8 +4066,10 @@ static void
|
||||
}
|
||||
io_sethandler(0x03c0, 0x0020, gd54xx_in, NULL, NULL, gd54xx_out, NULL, NULL, gd54xx);
|
||||
|
||||
if (gd54xx->pci && id >= CIRRUS_ID_CLGD5430)
|
||||
if (gd54xx->pci && id >= CIRRUS_ID_CLGD5430) {
|
||||
pci_add_card(PCI_ADD_VIDEO, cl_pci_read, cl_pci_write, gd54xx);
|
||||
mem_mapping_disable(&gd54xx->bios_rom.mapping);
|
||||
}
|
||||
|
||||
mem_mapping_set_p(&svga->mapping, gd54xx);
|
||||
mem_mapping_disable(&gd54xx->mmio_mapping);
|
||||
|
@@ -3079,8 +3079,11 @@ static void *tgui_init(const device_t *info)
|
||||
|
||||
tgui->has_bios = (bios_fn != NULL);
|
||||
|
||||
if (tgui->has_bios)
|
||||
if (tgui->has_bios) {
|
||||
rom_init(&tgui->bios_rom, (char *) bios_fn, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
if (tgui->pci)
|
||||
mem_mapping_disable(&tgui->bios_rom.mapping);
|
||||
}
|
||||
|
||||
if (tgui->pci)
|
||||
video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_tgui_pci);
|
||||
@@ -3107,7 +3110,7 @@ static void *tgui_init(const device_t *info)
|
||||
|
||||
if (tgui->pci && (tgui->type >= TGUI_9440)) {
|
||||
if (tgui->has_bios)
|
||||
tgui->card = pci_add_card(PCI_ADD_VIDEO, tgui_pci_read, tgui_pci_write, tgui);
|
||||
tgui->card = pci_add_card(PCI_ADD_VIDEO, tgui_pci_read, tgui_pci_write, tgui);
|
||||
else
|
||||
tgui->card = pci_add_card(PCI_ADD_VIDEO | PCI_ADD_STRICT, tgui_pci_read, tgui_pci_write, tgui);
|
||||
}
|
||||
|
Reference in New Issue
Block a user