ISA memory cards: Implement EMS frame address recalculation.

This commit is contained in:
OBattler
2024-06-03 03:37:47 +02:00
parent 8a8d5f0870
commit d6baa28992

View File

@@ -363,8 +363,6 @@ ems_write(uint16_t port, uint8_t val, void *priv)
dev->ems[vpage].enabled = (val & 0x80); dev->ems[vpage].enabled = (val & 0x80);
dev->ems[vpage].page = (val & 0x7f); dev->ems[vpage].page = (val & 0x7f);
/* Make sure we can do that.. */
if (dev->flags & FLAG_CONFIG) {
if (dev->ems[vpage].page < dev->ems_pages) { if (dev->ems[vpage].page < dev->ems_pages) {
/* Pre-calculate the page address in EMS RAM. */ /* Pre-calculate the page address in EMS RAM. */
dev->ems[vpage].addr = dev->ram + dev->ems_start + ((val & 0x7f) * EMS_PGSIZE); dev->ems[vpage].addr = dev->ram + dev->ems_start + ((val & 0x7f) * EMS_PGSIZE);
@@ -384,7 +382,6 @@ ems_write(uint16_t port, uint8_t val, void *priv)
/* Disable this page. */ /* Disable this page. */
mem_mapping_disable(&dev->ems[vpage].mapping); mem_mapping_disable(&dev->ems[vpage].mapping);
} }
}
break; break;
case 0x0001: /* page frame registers */ case 0x0001: /* page frame registers */
@@ -408,8 +405,13 @@ ems_write(uint16_t port, uint8_t val, void *priv)
*/ */
isamem_log("EMS: write(%02x) to register 1 !\n"); isamem_log("EMS: write(%02x) to register 1 !\n");
dev->ems[vpage].frame = val; dev->ems[vpage].frame = val;
if (val) dev->frame_addr = 0x000c4000 + ((((dev->ems[2].frame & 0x80) >> 5) ||
dev->flags |= FLAG_CONFIG; ((dev->ems[1].frame & 0x80) >> 6) ||
((dev->ems[0].frame & 0x80) >> 7)) << 14);
mem_mapping_disable(&dev->ems[0].mapping);
mem_mapping_disable(&dev->ems[1].mapping);
mem_mapping_disable(&dev->ems[2].mapping);
mem_mapping_disable(&dev->ems[3].mapping);
break; break;
default: default: