NEAT/NEATsx: Fix the base of extended memory when EMS is enabled.

This commit is contained in:
OBattler
2025-03-25 07:13:50 +01:00
parent d7529d4f5e
commit 556aca0b4e

View File

@@ -688,7 +688,7 @@ remap_update(neat_t *dev, uint8_t val)
if (dev->remap_base > 1024) {
uint32_t base = (val & RB7_EMSEN) ? (0x00100000 + (dev->ems_size << 10)) : 0x00100000;
mem_mapping_set_addr(&ram_high_mapping, base, (dev->remap_base << 10) - 0x00100000);
mem_mapping_set_addr(&ram_high_mapping, 0x00100000, (dev->remap_base << 10) - 0x00100000);
mem_mapping_set_exec(&ram_high_mapping, &(ram[base]));
} else
mem_mapping_disable(&ram_high_mapping);
@@ -942,6 +942,13 @@ neat_write(uint16_t port, uint8_t val, void *priv)
break;
}
if (mem_size < 1024)
/* No RAM left for EMS at all. */
dev->ems_size = 0;
else if (mem_size < (dev->ems_size + 1024))
/* Limit EMS size to the entirety of the remaining extended memory. */
dev->ems_size = mem_size - 1024;
if (dev->regs[REG_RB7] & RB7_EMSEN) {
remap_update(dev, dev->regs[REG_RB7]);