Genoa Unknown 486: Redirect 0C02h writes directly to Compaq 80C00000h writes, fixes the soft reset hang without having to reset the memory mapping on soft reset.

This commit is contained in:
OBattler
2024-07-22 19:46:27 +02:00
parent 8225f270f3
commit 74c4af579a

View File

@@ -750,28 +750,18 @@ compaq_386_init(UNUSED(const device_t *info))
static void static void
compaq_genoa_outw(uint16_t port, uint16_t val, void *priv) compaq_genoa_outw(uint16_t port, uint16_t val, void *priv)
{ {
if (port == 0x0c02) { if (port == 0x0c02)
if (val) cpq_write_regs(0x80c00000, val, priv);
mem_set_mem_state(0x000e0000, 0x00020000, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
else
mem_set_mem_state(0x000e0000, 0x00020000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
flushmmucache_nopc();
}
}
static void
compaq_genoa_reset(void *priv)
{
mem_set_mem_state(0x000e0000, 0x00020000, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
} }
static void * static void *
compaq_genoa_init(UNUSED(const device_t *info)) compaq_genoa_init(UNUSED(const device_t *info))
{ {
io_sethandler(0x0c02, 2, NULL, NULL, NULL, NULL, compaq_genoa_outw, NULL, NULL); void *cpq = device_add(&compaq_386_device);
device_add(&compaq_386_device); pclog_toggle_suppr();
io_sethandler(0x0c02, 2, NULL, NULL, NULL, NULL, compaq_genoa_outw, NULL, cpq);
return ram; return ram;
} }
@@ -793,11 +783,11 @@ const device_t compaq_386_device = {
const device_t compaq_genoa_device = { const device_t compaq_genoa_device = {
.name = "Compaq Genoa Memory Control", .name = "Compaq Genoa Memory Control",
.internal_name = "compaq_genoa", .internal_name = "compaq_genoa",
.flags = DEVICE_SOFTRESET, .flags = 0,
.local = 0, .local = 0,
.init = compaq_genoa_init, .init = compaq_genoa_init,
.close = NULL, .close = NULL,
.reset = compaq_genoa_reset, .reset = NULL,
{ .available = NULL }, { .available = NULL },
.speed_changed = NULL, .speed_changed = NULL,
.force_redraw = NULL, .force_redraw = NULL,