diff options
| author | 2025-09-01 15:45:30 +0200 | |
|---|---|---|
| committer | 2025-09-01 15:46:10 +0200 | |
| commit | 86ccea91c23af9f35570cea43ab9ecc6192d2586 (patch) | |
| tree | 968e1ccfcee2c15b5c3e402e68aa46eed7fb26f7 | |
| parent | fae71cc826142af5fbb83712fd4407e8347f7e53 (diff) | |
sega/megadriv.cpp: 68k access to z80 delays by 1 cycle, fix MT09222
| -rw-r--r-- | src/mame/pc/teradrive.cpp | 3 | ||||
| -rw-r--r-- | src/mame/sega/megadriv.cpp | 10 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/mame/pc/teradrive.cpp b/src/mame/pc/teradrive.cpp index 848bfce7be4..f5f22f1fdff 100644 --- a/src/mame/pc/teradrive.cpp +++ b/src/mame/pc/teradrive.cpp @@ -523,7 +523,7 @@ void teradrive_state::md_68k_map(address_map &map) // map(0x800000, 0x9fffff) unmapped or 32X map(0xa00000, 0xa07fff).view(m_md_68k_sound_view); - m_md_68k_sound_view[0](0xa00000, 0xa07fff).m(*this, FUNC(teradrive_state::md_68k_z80_map)); + m_md_68k_sound_view[0](0xa00000, 0xa07fff).before_delay(NAME([](offs_t) { return 1; })).m(*this, FUNC(teradrive_state::md_68k_z80_map)); // map(0xa07f00, 0xa07fff) Z80 VDP space (freezes machine if accessed from 68k) // map(0xa08000, 0xa0ffff) Z80 68k window (assume no DTACK), or just mirror of above according to TD HW notes? // map(0xa10000, 0xa100ff) I/O @@ -640,7 +640,6 @@ void teradrive_state::md_cpu_space_map(address_map &map) // TODO: IPL0 (external irq tied to VDP IE2) map(0xfffff5, 0xfffff5).before_time(m_md68kcpu, FUNC(m68000_device::vpa_sync)).after_delay(m_md68kcpu, FUNC(m68000_device::vpa_after)).lr8(NAME([] () -> u8 { return 26; })); map(0xfffff7, 0xfffff7).before_time(m_md68kcpu, FUNC(m68000_device::vpa_sync)).after_delay(m_md68kcpu, FUNC(m68000_device::vpa_after)).lr8(NAME([] () -> u8 { return 27; })); - // TODO: IPL1 map(0xfffff9, 0xfffff9).before_time(m_md68kcpu, FUNC(m68000_device::vpa_sync)).after_delay(m_md68kcpu, FUNC(m68000_device::vpa_after)).lr8(NAME([this] () -> u8 { m_md_vdp->irq_ack(); return 28; diff --git a/src/mame/sega/megadriv.cpp b/src/mame/sega/megadriv.cpp index 1fb65b3e55b..2af1094e64c 100644 --- a/src/mame/sega/megadriv.cpp +++ b/src/mame/sega/megadriv.cpp @@ -310,11 +310,13 @@ void md_base_state::m68k_ioport_s_ctrl_write(uint16_t data) void md_base_state::megadriv_68k_base_map(address_map &map) { - map(0xa00000, 0xa01fff).rw(FUNC(md_base_state::megadriv_68k_read_z80_ram), FUNC(md_base_state::megadriv_68k_write_z80_ram)); - map(0xa02000, 0xa03fff).w(FUNC(md_base_state::megadriv_68k_write_z80_ram)); - map(0xa04000, 0xa04003).rw(FUNC(md_base_state::megadriv_68k_YM2612_read), FUNC(md_base_state::megadriv_68k_YM2612_write)); + // before_delay required by pacman2 intro + // TODO: unverified if 68k doesn't have bus grant + map(0xa00000, 0xa01fff).before_delay(NAME([](offs_t) { return 1; })).rw(FUNC(md_base_state::megadriv_68k_read_z80_ram), FUNC(md_base_state::megadriv_68k_write_z80_ram)); + map(0xa02000, 0xa03fff).before_delay(NAME([](offs_t) { return 1; })).w(FUNC(md_base_state::megadriv_68k_write_z80_ram)); + map(0xa04000, 0xa04003).before_delay(NAME([](offs_t) { return 1; })).rw(FUNC(md_base_state::megadriv_68k_YM2612_read), FUNC(md_base_state::megadriv_68k_YM2612_write)); - map(0xa06000, 0xa06001).w(FUNC(md_base_state::megadriv_68k_z80_bank_write)); + map(0xa06000, 0xa06001).before_delay(NAME([](offs_t) { return 1; })).w(FUNC(md_base_state::megadriv_68k_z80_bank_write)); map(0xa10000, 0xa10001).r(FUNC(md_base_state::m68k_version_read)); map(0xa10002, 0xa10007).rw(FUNC(md_base_state::m68k_ioport_data_read), FUNC(md_base_state::m68k_ioport_data_write)); |
