diff --git a/src/machines/m_at_scat.c b/src/machines/m_at_scat.c index cca19a9..e38880d 100644 --- a/src/machines/m_at_scat.c +++ b/src/machines/m_at_scat.c @@ -10,7 +10,7 @@ * * Re-worked version based on the 82C235 datasheet and errata. * - * Version: @(#)m_at_scat.c 1.0.9 2018/06/12 + * Version: @(#)m_at_scat.c 1.0.10 2018/08/20 * * Authors: Fred N. van Kempen, * Original by GreatPsycho for PCem. @@ -1349,7 +1349,6 @@ scat_init(void) scat_port_92 = 0; mem_mapping_disable(&ram_low_mapping); - mem_mapping_disable(&ram_mid_mapping); mem_mapping_disable(&ram_high_mapping); for (i = 0; i < 4; i++) mem_mapping_disable(&bios_mapping[i]); @@ -1372,8 +1371,6 @@ scat_init(void) mem_mapping_add(&scat_ems_mapping[i], (i + (i >= 24 ? 28 : 16)) << 14, 0x04000, mem_read_scatb, mem_read_scatw, mem_read_scatl, mem_write_scatb, mem_write_scatw, mem_write_scatl, ram + ((i + (i >= 24 ? 28 : 16)) << 14), 0, &scat_stat[i]); } - for(i=4;i<10;i++) isram[i] = 0; - for (i = (scat_regs[SCAT_VERSION] < 4 ? 0 : 8); i < 16; i++) { mem_mapping_add(&scat_high_mapping[i], (i << 14) + 0xFC0000, 0x04000, mem_read_bios, mem_read_biosw, mem_read_biosl, mem_write_null, mem_write_nullw, mem_write_nulll, rom + ((i << 14) & biosmask), 0, NULL); mem_mapping_enable(&scat_high_mapping[i]); @@ -1425,7 +1422,6 @@ scatsx_init(void) scat_port_92 = 0; mem_mapping_disable(&ram_low_mapping); - mem_mapping_disable(&ram_mid_mapping); mem_mapping_disable(&ram_high_mapping); for (i = 0; i < 4; i++) mem_mapping_disable(&bios_mapping[i]); diff --git a/src/machines/m_ps2_mca.c b/src/machines/m_ps2_mca.c index e78d1c6..05d0a3a 100644 --- a/src/machines/m_ps2_mca.c +++ b/src/machines/m_ps2_mca.c @@ -8,7 +8,7 @@ * * Implementation of MCA-based PS/2 machines. * - * Version: @(#)m_ps2_mca.c 1.0.15 2018/05/06 + * Version: @(#)m_ps2_mca.c 1.0.16 2018/08/20 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -1048,10 +1048,13 @@ static void mem_encoding_write_cached(uint16_t addr, uint8_t val, void *p) ps2.pending_cache_miss = 1; if ((val & 0x21) == 0x01 && (old & 0x21) != 0x01) ps2_cache_clean(); +#if 1 +// FIXME: Look into this!!! if (val & 0x01) ram_mid_mapping.flags |= MEM_MAPPING_ROM; else ram_mid_mapping.flags &= ~MEM_MAPPING_ROM; +#endif break; } // pclog("mem_encoding_write: addr=%02x val=%02x %04x:%04x %02x %02x\n", addr, val, CS,cpu_state.pc, ps2.mem_regs[1],ps2.mem_regs[2]); diff --git a/src/mem.c b/src/mem.c index c6fcfd5..4d82787 100644 --- a/src/mem.c +++ b/src/mem.c @@ -12,7 +12,7 @@ * the DYNAMIC_TABLES=1 enables this. Will eventually go * away, either way... * - * Version: @(#)mem.c 1.0.16 2018/08/17 + * Version: @(#)mem.c 1.0.16 2018/08/20 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -69,11 +69,12 @@ mem_mapping_t base_mapping, - ram_low_mapping, - ram_high_mapping, + ram_low_mapping, /* 0..640K mapping */ +#if 1 ram_mid_mapping, - ram_remapped_mapping, - ram_split_mapping, +#endif + ram_remapped_mapping, /* 640..1024K mapping */ + ram_high_mapping, /* 1024K+ mapping */ bios_mapping[8], bios_high_mapping[8], romext_mapping; @@ -82,8 +83,6 @@ page_t *pages, /* RAM page table */ **page_lookup; /* pagetable lookup */ uint32_t pages_sz = 0; /* #pages in table */ -uint8_t isram[0x10000]; - uint8_t *ram; /* the virtual RAM */ uint32_t rammask; @@ -114,8 +113,6 @@ int cachesize = 256; uint32_t ram_mapped_addr[64]; -int split_mapping_enabled = 0; - uint32_t get_phys_virt, get_phys_phys; @@ -1580,8 +1577,6 @@ mem_reset(void) { uint32_t c, m; - split_mapping_enabled = 0; - /* Free the ROM memory and reset size mask. */ if (rom != NULL) { free(rom); @@ -1676,14 +1671,6 @@ pclog("MEM: reset: new pages=%08lx, pages_sz=%i\n", pages, pages_sz); /* Initialize the tables. */ resetreadlookup(); - memset(isram, 0x00, sizeof(isram)); - for (c = 0; c < ((uint32_t)mem_size / 64); c++) { - isram[c] = 1; - if ((c >= 0xa && c <= 0xf) || - (cpu_16bitbus && c >= 0xfe && c <= 0xff)) - isram[c] = 0; - } - memset(_mem_read_b, 0x00, sizeof(_mem_read_b)); memset(_mem_read_w, 0x00, sizeof(_mem_read_w)); memset(_mem_read_l, 0x00, sizeof(_mem_read_l)); @@ -1727,11 +1714,13 @@ pclog("MEM: reset: new pages=%08lx, pages_sz=%i\n", pages, pages_sz); } } +#if 1 if (mem_size > 768) mem_mapping_add(&ram_mid_mapping, 0xc0000, 0x40000, mem_read_ram,mem_read_ramw,mem_read_raml, mem_write_ram,mem_write_ramw,mem_write_raml, ram + 0xc0000, MEM_MAPPING_INTERNAL, NULL); +#endif if (romset == ROM_IBMPS1_2011) mem_mapping_add(&romext_mapping, 0xc8000, 0x08000, @@ -1744,12 +1733,6 @@ pclog("MEM: reset: new pages=%08lx, pages_sz=%i\n", pages, pages_sz); ram + (1 << 20), MEM_MAPPING_INTERNAL, NULL); mem_mapping_disable(&ram_remapped_mapping); - mem_mapping_add(&ram_split_mapping, mem_size * 1024, 384 * 1024, - mem_read_ram, mem_read_ramw, mem_read_raml, - mem_write_ram,mem_write_ramw,mem_write_raml, - ram + (1 << 20), MEM_MAPPING_INTERNAL, NULL); - mem_mapping_disable(&ram_split_mapping); - mem_a20_init(); } @@ -1783,25 +1766,23 @@ mem_init(void) static void mem_remap_top(int max_size) { - uint32_t c; + uint32_t start = (mem_size >= 1024) ? mem_size : 1024; + int size = mem_size - 640; - if (mem_size > 640) { - uint32_t start = (mem_size >= 1024) ? mem_size : 1024; - int size = mem_size - 640; - if (size > max_size) - size = max_size; +pclog("MEM: remapping top %iKB (mem=%i)\n", max_size, mem_size); + if (mem_size <= 640) return; - for (c = (start / 64); c < ((start + size - 1) / 64); c++) - isram[c] = 1; + if (size > max_size) + size = max_size; - mem_set_mem_state(start * 1024, size * 1024, - MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); - mem_mapping_set_addr(&ram_remapped_mapping, - start * 1024, size * 1024); - mem_mapping_set_exec(&ram_split_mapping, ram + (start * 1024)); + mem_set_mem_state(start * 1024, size * 1024, + MEM_READ_INTERNAL | MEM_WRITE_INTERNAL); + mem_mapping_set_addr(&ram_remapped_mapping, start * 1024, size * 1024); +#if 0 + mem_mapping_set_exec(&ram_split_mapping, ram + (start * 1024)); +#endif - flushmmucache(); - } + flushmmucache(); } diff --git a/src/mem.h b/src/mem.h index 4a5e5df..e4b4b94 100644 --- a/src/mem.h +++ b/src/mem.h @@ -8,7 +8,7 @@ * * Definitions for the memory interface. * - * Version: @(#)mem.h 1.0.6 2018/08/17 + * Version: @(#)mem.h 1.0.8 2018/08/20 * * Authors: Fred N. van Kempen, * Sarah Walker, @@ -118,10 +118,11 @@ extern uint32_t ram_mapped_addr[64]; mem_mapping_t base_mapping, ram_low_mapping, - ram_high_mapping, +#if 1 ram_mid_mapping, +#endif ram_remapped_mapping, - ram_split_mapping, + ram_high_mapping, bios_mapping[8], bios_high_mapping[8], romext_mapping; @@ -140,7 +141,6 @@ extern int readlnum, extern int nopageerrors; extern int memspeed[11]; -extern uint8_t isram[0x10000]; extern int mmu_perm; @@ -179,9 +179,10 @@ extern uint32_t mmutranslatereal(uint32_t addr, int rw); extern void addreadlookup(uint32_t virt, uint32_t phys); extern void addwritelookup(uint32_t virt, uint32_t phys); -extern void mem_mapping_del(mem_mapping_t *map); -extern void mem_mapping_add(mem_mapping_t *map, +extern void mem_mapping_del(mem_mapping_t *); + +extern void mem_mapping_add(mem_mapping_t *, uint32_t base, uint32_t size, uint8_t (*read_b)(uint32_t addr, void *p), @@ -194,7 +195,7 @@ extern void mem_mapping_add(mem_mapping_t *map, uint32_t flags, void *p); -extern void mem_mapping_set_handler(mem_mapping_t *map, +extern void mem_mapping_set_handler(mem_mapping_t *, uint8_t (*read_b)(uint32_t addr, void *p), uint16_t (*read_w)(uint32_t addr, void *p), uint32_t (*read_l)(uint32_t addr, void *p), @@ -202,15 +203,15 @@ extern void mem_mapping_set_handler(mem_mapping_t *map, void (*write_w)(uint32_t addr, uint16_t val, void *p), void (*write_l)(uint32_t addr, uint32_t val, void *p)); -extern void mem_mapping_set_p(mem_mapping_t *map, void *p); +extern void mem_mapping_set_p(mem_mapping_t *, void *p); -extern void mem_mapping_set_dev(mem_mapping_t *map, void *dev); +extern void mem_mapping_set_dev(mem_mapping_t *, void *dev); -extern void mem_mapping_set_addr(mem_mapping_t *map, +extern void mem_mapping_set_addr(mem_mapping_t *, uint32_t base, uint32_t size); -extern void mem_mapping_set_exec(mem_mapping_t *map, uint8_t *exec); -extern void mem_mapping_disable(mem_mapping_t *mapg); -extern void mem_mapping_enable(mem_mapping_t *map); +extern void mem_mapping_set_exec(mem_mapping_t *, uint8_t *exec); +extern void mem_mapping_disable(mem_mapping_t *); +extern void mem_mapping_enable(mem_mapping_t *); extern void mem_set_mem_state(uint32_t base, uint32_t size, int state);