Mercurial > repos > blastem
diff sms.c @ 1162:c4ea535cf57e
Forgot that the expansion to 32-bit values for 16-bit addresses is not done when calling a C function to handle a memory operation. Mask on location in mapper_write was needed afterall
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 08 Jan 2017 16:55:30 -0800 |
parents | c83ec07ddbac |
children | b1147418254a |
line wrap: on
line diff
--- a/sms.c Sun Jan 08 13:39:44 2017 -0800 +++ b/sms.c Sun Jan 08 16:55:30 2017 -0800 @@ -113,8 +113,8 @@ z80_context *z80 = vcontext; sms_context *sms = z80->system; void *old_value; - sms->ram[location & (sizeof(sms->ram)-1)] = value; location &= 3; + sms->ram[0x1FFC + location] = value; sms->bank_regs[location] = value; if (location) { uint32_t idx = location - 1; @@ -288,7 +288,7 @@ memory_map[2] = (memmap_chunk){0x4000, 0x8000, 0x3FFF, 0, 1, MMAP_READ|MMAP_PTR_IDX|MMAP_CODE, NULL, NULL, NULL, NULL, NULL}; memory_map[3] = (memmap_chunk){0x8000, 0xC000, 0x3FFF, 0, 2, MMAP_READ|MMAP_PTR_IDX|MMAP_CODE, NULL, NULL, NULL, NULL, cart_ram_write}; memory_map[4] = (memmap_chunk){0xC000, 0xFFFC, sizeof(sms->ram)-1, 0, 0, MMAP_READ|MMAP_WRITE|MMAP_CODE, sms->ram, NULL, NULL, NULL, NULL}; - memory_map[5] = (memmap_chunk){0xFFFC, 0x10000, 0xFFFF, 0, 0, MMAP_READ, ram_reg_overlap, NULL, NULL, NULL, mapper_write}; + memory_map[5] = (memmap_chunk){0xFFFC, 0x10000, 0x0003, 0, 0, MMAP_READ, ram_reg_overlap, NULL, NULL, NULL, mapper_write}; } else { info_out->map_chunks = 2; memory_map[0] = (memmap_chunk){0x0000, 0xC000, rom_size-1, 0, 0, MMAP_READ, rom, NULL, NULL, NULL, NULL}; @@ -308,6 +308,9 @@ sms->z80->mem_pointers[0] = sms->rom; sms->z80->mem_pointers[1] = sms->rom + 0x4000; sms->z80->mem_pointers[2] = sms->rom + 0x8000; + sms->bank_regs[1] = 0; + sms->bank_regs[2] = 0x4000 >> 14; + sms->bank_regs[3] = 0x8000 >> 14; } char * lowpass_cutoff_str = tern_find_path(config, "audio\0lowpass_cutoff\0").ptrval;