Attempted fix for PS/2 Model 55SX.
This commit is contained in:
@@ -432,6 +432,8 @@ static void model_50_write(uint16_t port, uint8_t val)
|
|||||||
|
|
||||||
static void model_55sx_write(uint16_t port, uint8_t val)
|
static void model_55sx_write(uint16_t port, uint8_t val)
|
||||||
{
|
{
|
||||||
|
int remap_size;
|
||||||
|
|
||||||
switch (port)
|
switch (port)
|
||||||
{
|
{
|
||||||
case 0x100:
|
case 0x100:
|
||||||
@@ -477,26 +479,26 @@ static void model_55sx_write(uint16_t port, uint8_t val)
|
|||||||
case 0x105:
|
case 0x105:
|
||||||
ps2_mca_log("Write POS3 %02x\n", val);
|
ps2_mca_log("Write POS3 %02x\n", val);
|
||||||
ps2.option[3] = val;
|
ps2.option[3] = val;
|
||||||
shadowbios = !(val & 0x10);
|
shadowbios = !(val & 0x10) && !(val & 0x20);
|
||||||
shadowbios_write = val & 0x10;
|
shadowbios_write = (val & 0x10) && !(val & 0x20);
|
||||||
|
|
||||||
if (shadowbios)
|
if (shadowbios)
|
||||||
{
|
{
|
||||||
mem_set_mem_state(0xe0000, 0x20000, MEM_READ_INTERNAL | MEM_WRITE_DISABLED);
|
mem_set_mem_state(0xe0000, 0x20000, MEM_READ_INTERNAL | MEM_WRITE_DISABLED);
|
||||||
mem_set_mem_state((mem_size+256) * 1024, 128 * 1024, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
|
|
||||||
mem_mapping_disable(&ps2.shadow_mapping);
|
mem_mapping_disable(&ps2.shadow_mapping);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mem_set_mem_state(0xe0000, 0x20000, MEM_READ_EXTANY | MEM_WRITE_INTERNAL);
|
mem_set_mem_state(0xe0000, 0x20000, MEM_READ_EXTANY | MEM_WRITE_DISABLED);
|
||||||
mem_set_mem_state((mem_size+256) * 1024, 128 * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
mem_mapping_enable(&ps2.shadow_mapping);
|
mem_mapping_enable(&ps2.shadow_mapping);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ps2.option[1] & 1) && !(ps2.option[3] & 0x20))
|
remap_size = (val & 0x10) ? 384 : 256;
|
||||||
mem_set_mem_state(mem_size * 1024, 256 * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
|
||||||
|
if (val & 0x20)
|
||||||
|
mem_set_mem_state(mem_size * 1024, remap_size * 1024, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
|
||||||
else
|
else
|
||||||
mem_set_mem_state(mem_size * 1024, 256 * 1024, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
|
mem_set_mem_state(mem_size * 1024, remap_size * 1024, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
||||||
|
|
||||||
flushmmucache_nopc();
|
flushmmucache_nopc();
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user