Mercurial > repos > blastem
diff sega_mapper.c @ 2340:b9cd3c64652d
Slightly more correct implementation of MED extended Sega mapper so s2built debug build doesn't hang
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 04 Sep 2023 20:54:27 -0700 |
parents | b6fdedd3b070 |
children | 187bc857a76a |
line wrap: on
line diff
--- a/sega_mapper.c Sat Sep 02 12:08:43 2023 -0700 +++ b/sega_mapper.c Mon Sep 04 20:54:27 2023 -0700 @@ -204,6 +204,10 @@ m68k_context * write_bank_reg_w(uint32_t address, m68k_context * context, uint16_t value) { genesis_context * gen = context->system; + if (gen->mapper_type == MAPPER_SEGA_MED_V2 && (address & 0xF0) < 0xF0) { + // ignore writes to other MED extended registers for now + return context; + } address &= 0xE; address >>= 1; if (!address) { @@ -256,10 +260,8 @@ { genesis_context * gen = context->system; if (gen->mapper_type == MAPPER_SEGA_MED_V2) { - address &= 0xF; - if (!address) { - //not sure if this is correct, possible byte sized writes are always rejected to $A130F0 - write_bank_reg_w(address, context, value << 8 | value); + if ((address & 0xFF) == 0xF0) { + write_bank_reg_w(address, context, value << 8 | gen->bank_regs[0]); } else if (address > 2 && (address & 1)) { write_bank_reg_w(address, context, value); } @@ -269,6 +271,28 @@ return context; } +uint16_t med_reg_read_w(uint32_t address, void *vcontext) +{ + m68k_context *context = vcontext; + switch (address & 0xFE) + { + case 0xE4: + //ensure USB serial read returns "not-ready" status + return 0x02; + default: + return read_word(context->last_prefetch_address, (void **)context->mem_pointers, &context->options->gen, context); + } +} + +uint8_t med_reg_read_b(uint32_t address, void *vcontext) +{ + uint16_t value = med_reg_read_w(address, vcontext); + if (address & 1) { + return value; + } + return value >> 8; +} + void sega_mapper_serialize(genesis_context *gen, serialize_buffer *buf) { save_buffer8(buf, gen->bank_regs, gen->mapper_type == MAPPER_SEGA_MED_V2 ? sizeof(gen->bank_regs) : sizeof(gen->bank_regs) - 1);