diff options
Diffstat (limited to 'src/mame/drivers/segas16b.cpp')
-rw-r--r-- | src/mame/drivers/segas16b.cpp | 389 |
1 files changed, 204 insertions, 185 deletions
diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp index a86d6a93f3f..d1b8c9b468c 100644 --- a/src/mame/drivers/segas16b.cpp +++ b/src/mame/drivers/segas16b.cpp @@ -1686,131 +1686,141 @@ WRITE16_MEMBER( segas16b_state::sjryuko_custom_io_w ) // MAIN CPU ADDRESS MAPS //************************************************************************** -ADDRESS_MAP_START(segas16b_state::system16b_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0xffffff) AM_DEVREADWRITE8("mapper", sega_315_5195_mapper_device, read, write, 0x00ff) +void segas16b_state::system16b_map(address_map &map) +{ + map.unmap_value_high(); + map(0x000000, 0xffffff).rw(m_mapper, FUNC(sega_315_5195_mapper_device::read), FUNC(sega_315_5195_mapper_device::write)).umask16(0x00ff); // these get overwritten by the memory mapper above, but we put them here // so they are properly allocated and tracked for saving - AM_RANGE(0x100000, 0x1007ff) AM_RAM AM_SHARE("sprites") - AM_RANGE(0x200000, 0x200fff) AM_RAM AM_SHARE("paletteram") - AM_RANGE(0x300000, 0x30ffff) AM_RAM AM_SHARE("tileram") - AM_RANGE(0x400000, 0x400fff) AM_RAM AM_SHARE("textram") - AM_RANGE(0x500000, 0x503fff) AM_RAM AM_SHARE("workram") -ADDRESS_MAP_END + map(0x100000, 0x1007ff).ram().share("sprites"); + map(0x200000, 0x200fff).ram().share("paletteram"); + map(0x300000, 0x30ffff).ram().share("tileram"); + map(0x400000, 0x400fff).ram().share("textram"); + map(0x500000, 0x503fff).ram().share("workram"); +} -ADDRESS_MAP_START(segas16b_state::decrypted_opcodes_map) - AM_RANGE(0x00000, 0xfffff) AM_ROMBANK("fd1094_decrypted_opcodes") -ADDRESS_MAP_END +void segas16b_state::decrypted_opcodes_map(address_map &map) +{ + map(0x00000, 0xfffff).bankr("fd1094_decrypted_opcodes"); +} -ADDRESS_MAP_START(segas16b_state::system16c_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0xffffff) AM_DEVREADWRITE8("mapper", sega_315_5195_mapper_device, read, write, 0x00ff) +void segas16b_state::system16c_map(address_map &map) +{ + map.unmap_value_high(); + map(0x000000, 0xffffff).rw(m_mapper, FUNC(sega_315_5195_mapper_device::read), FUNC(sega_315_5195_mapper_device::write)).umask16(0x00ff); // these get overwritten by the memory mapper above, but we put them here // so they are properly allocated and tracked for saving - AM_RANGE(0x100000, 0x1007ff) AM_RAM AM_SHARE("sprites") - AM_RANGE(0x200000, 0x200fff) AM_RAM AM_SHARE("paletteram") - AM_RANGE(0x300000, 0x30ffff) AM_RAM AM_SHARE("tileram") - AM_RANGE(0x400000, 0x400fff) AM_RAM AM_SHARE("textram") - AM_RANGE(0x500000, 0x53ffff) AM_RAM AM_SHARE("workram") // only change from system16b_map -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::system16b_bootleg_map) - AM_RANGE(0x000000, 0x03ffff) AM_ROM - AM_RANGE(0x200000, 0x23ffff) AM_RAM // used during startup for decompression - AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE(rom_5704_bank_w) - AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram") - AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram") - AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_SHARE("sprites") - AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0xc40000, 0xc43fff) AM_READWRITE(bootleg_custom_io_r, bootleg_custom_io_w) - AM_RANGE(0x123406, 0x123407) AM_WRITE(sound_w16) - AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::map_fpointbla) - AM_RANGE(0x000000, 0x01ffff) AM_ROM - AM_RANGE(0x02000e, 0x02000f) AM_READ_PORT("P2") - AM_RANGE(0x0a0000, 0x0a001f) AM_RAM AM_SHARE("bootleg_scroll") - AM_RANGE(0x0a0020, 0x0a0027) AM_RAM AM_SHARE("bootleg_page") - AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram") - AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram") - AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_SHARE("sprites") - AM_RANGE(0x443002, 0x443003) AM_READ_PORT("SERVICE") - AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x843018, 0x843019) AM_READ_PORT("DSW1") - AM_RANGE(0xfe0004, 0xfe0005) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) - AM_RANGE(0xfe000c, 0xfe000d) AM_READ_PORT("P1") - AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::decrypted_opcodes_map_x) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0x03ffff) AM_ROM AM_SHARE("decrypted_opcodes") -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::decrypted_opcodes_map_fpointbla) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x000000, 0x01ffff) AM_ROM AM_SHARE("decrypted_opcodes") -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::lockonph_map) + map(0x100000, 0x1007ff).ram().share("sprites"); + map(0x200000, 0x200fff).ram().share("paletteram"); + map(0x300000, 0x30ffff).ram().share("tileram"); + map(0x400000, 0x400fff).ram().share("textram"); + map(0x500000, 0x53ffff).ram().share("workram"); // only change from system16b_map +} + +void segas16b_state::system16b_bootleg_map(address_map &map) +{ + map(0x000000, 0x03ffff).rom(); + map(0x200000, 0x23ffff).ram(); // used during startup for decompression + map(0x3f0000, 0x3fffff).w(this, FUNC(segas16b_state::rom_5704_bank_w)); + map(0x400000, 0x40ffff).rw(m_segaic16vid, FUNC(segaic16_video_device::tileram_r), FUNC(segaic16_video_device::tileram_w)).share("tileram"); + map(0x410000, 0x410fff).rw(m_segaic16vid, FUNC(segaic16_video_device::textram_r), FUNC(segaic16_video_device::textram_w)).share("textram"); + map(0x440000, 0x4407ff).ram().share("sprites"); + map(0x840000, 0x840fff).ram().w(this, FUNC(segas16b_state::paletteram_w)).share("paletteram"); + map(0xc40000, 0xc43fff).rw(this, FUNC(segas16b_state::bootleg_custom_io_r), FUNC(segas16b_state::bootleg_custom_io_w)); + map(0x123406, 0x123407).w(this, FUNC(segas16b_state::sound_w16)); + map(0xffc000, 0xffffff).ram().share("workram"); +} + +void segas16b_state::map_fpointbla(address_map &map) +{ + map(0x000000, 0x01ffff).rom(); + map(0x02000e, 0x02000f).portr("P2"); + map(0x0a0000, 0x0a001f).ram().share("bootleg_scroll"); + map(0x0a0020, 0x0a0027).ram().share("bootleg_page"); + map(0x400000, 0x40ffff).rw(m_segaic16vid, FUNC(segaic16_video_device::tileram_r), FUNC(segaic16_video_device::tileram_w)).share("tileram"); + map(0x410000, 0x410fff).rw(m_segaic16vid, FUNC(segaic16_video_device::textram_r), FUNC(segaic16_video_device::textram_w)).share("textram"); + map(0x440000, 0x4407ff).ram().share("sprites"); + map(0x443002, 0x443003).portr("SERVICE"); + map(0x840000, 0x840fff).ram().w(this, FUNC(segas16b_state::paletteram_w)).share("paletteram"); + map(0x843018, 0x843019).portr("DSW1"); + map(0xfe0005, 0xfe0005).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0xfe000c, 0xfe000d).portr("P1"); + map(0xffc000, 0xffffff).ram().share("workram"); +} + +void segas16b_state::decrypted_opcodes_map_x(address_map &map) +{ + map.unmap_value_high(); + map(0x000000, 0x03ffff).rom().share("decrypted_opcodes"); +} + +void segas16b_state::decrypted_opcodes_map_fpointbla(address_map &map) +{ + map.unmap_value_high(); + map(0x000000, 0x01ffff).rom().share("decrypted_opcodes"); +} + +void segas16b_state::lockonph_map(address_map &map) +{ // this still appears to have a mapper device, does the hardware use it? should we move this to all be configured by it? - AM_RANGE(0x000000, 0x0bffff) AM_ROM - AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE(rom_5704_bank_w) - AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram") - AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram") - AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_SHARE("sprites") - AM_RANGE(0x840000, 0x841fff) AM_RAM_WRITE(philko_paletteram_w) AM_SHARE("paletteram") + map(0x000000, 0x0bffff).rom(); + map(0x3f0000, 0x3fffff).w(this, FUNC(segas16b_state::rom_5704_bank_w)); + map(0x400000, 0x40ffff).rw(m_segaic16vid, FUNC(segaic16_video_device::tileram_r), FUNC(segaic16_video_device::tileram_w)).share("tileram"); + map(0x410000, 0x410fff).rw(m_segaic16vid, FUNC(segaic16_video_device::textram_r), FUNC(segaic16_video_device::textram_w)).share("textram"); + map(0x440000, 0x4407ff).ram().share("sprites"); + map(0x840000, 0x841fff).ram().w(this, FUNC(segas16b_state::philko_paletteram_w)).share("paletteram"); - AM_RANGE(0xC40000, 0xC40001) AM_WRITENOP // coin counters etc.? + map(0xC40000, 0xC40001).nopw(); // coin counters etc.? - AM_RANGE(0xC41000, 0xC41001) AM_READ_PORT("P1") - AM_RANGE(0xC41002, 0xC41003) AM_READ_PORT("P2") - AM_RANGE(0xC41004, 0xC41005) AM_READ_PORT("SERVICE") + map(0xC41000, 0xC41001).portr("P1"); + map(0xC41002, 0xC41003).portr("P2"); + map(0xC41004, 0xC41005).portr("SERVICE"); - AM_RANGE(0xC42000, 0xC42001) AM_READ_PORT("DSW1") - AM_RANGE(0xC42002, 0xC42003) AM_READ_PORT("DSW2") + map(0xC42000, 0xC42001).portr("DSW1"); + map(0xC42002, 0xC42003).portr("DSW2"); - AM_RANGE(0x777706, 0x777707) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) + map(0x777707, 0x777707).w(m_soundlatch, FUNC(generic_latch_8_device::write)); - AM_RANGE(0xff0000, 0xffffff) AM_RAM AM_SHARE("workram") -ADDRESS_MAP_END + map(0xff0000, 0xffffff).ram().share("workram"); +} -ADDRESS_MAP_START(segas16b_state::fpointbl_map) - AM_RANGE(0x000000, 0x0bffff) AM_ROM +void segas16b_state::fpointbl_map(address_map &map) +{ + map(0x000000, 0x0bffff).rom(); - AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram") - AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram") - AM_RANGE(0x440000, 0x440fff) AM_RAM AM_SHARE("sprites") + map(0x400000, 0x40ffff).rw(m_segaic16vid, FUNC(segaic16_video_device::tileram_r), FUNC(segaic16_video_device::tileram_w)).share("tileram"); + map(0x410000, 0x410fff).rw(m_segaic16vid, FUNC(segaic16_video_device::textram_r), FUNC(segaic16_video_device::textram_w)).share("textram"); + map(0x440000, 0x440fff).ram().share("sprites"); - AM_RANGE(0x600006, 0x600007) AM_DEVWRITE8("soundlatch", generic_latch_8_device, write, 0x00ff) - AM_RANGE(0x601000, 0x601001) AM_READ_PORT("SERVICE") - AM_RANGE(0x601002, 0x601003) AM_READ_PORT("P1") - AM_RANGE(0x601004, 0x601005) AM_READ_PORT("P2") - AM_RANGE(0x600000, 0x600001) AM_READ_PORT("DSW2") - AM_RANGE(0x600002, 0x600003) AM_READ_PORT("DSW1") + map(0x600007, 0x600007).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x601000, 0x601001).portr("SERVICE"); + map(0x601002, 0x601003).portr("P1"); + map(0x601004, 0x601005).portr("P2"); + map(0x600000, 0x600001).portr("DSW2"); + map(0x600002, 0x600003).portr("DSW1"); - AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x843000, 0x843001) AM_WRITENOP + map(0x840000, 0x840fff).ram().w(this, FUNC(segas16b_state::paletteram_w)).share("paletteram"); + map(0x843000, 0x843001).nopw(); - AM_RANGE(0xC46000, 0xC4601f) AM_RAM AM_SHARE("bootleg_scroll") - AM_RANGE(0xC46020, 0xC46027) AM_RAM AM_SHARE("bootleg_page") + map(0xC46000, 0xC4601f).ram().share("bootleg_scroll"); + map(0xC46020, 0xC46027).ram().share("bootleg_page"); - AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") -ADDRESS_MAP_END + map(0xffc000, 0xffffff).ram().share("workram"); +} /* Flash Point (Datsu bootlegs = fpointbl, fpointbj) Has sound latch at $E000 instead of I/O ports $C0-FF */ -ADDRESS_MAP_START(segas16b_state::fpointbl_sound_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0xe000, 0xe000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) - AM_RANGE(0xf800, 0xffff) AM_RAM -ADDRESS_MAP_END +void segas16b_state::fpointbl_sound_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0xe000, 0xe000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); + map(0xf800, 0xffff).ram(); +} READ16_MEMBER(segas16b_state::bootleg_custom_io_r) @@ -1828,60 +1838,67 @@ WRITE16_MEMBER(segas16b_state::bootleg_custom_io_w) // SOUND CPU ADDRESS MAPS //************************************************************************** -ADDRESS_MAP_START(segas16b_state::sound_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("soundbank") - AM_RANGE(0xe800, 0xe800) AM_DEVREAD("mapper", sega_315_5195_mapper_device, pread) - AM_RANGE(0xf800, 0xffff) AM_RAM -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::sound_decrypted_opcodes_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x7fff) AM_ROM AM_SHARE("sound_decrypted_opcodes") - AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("soundbank") -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::sound_portmap) - ADDRESS_MAP_UNMAP_HIGH - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) - AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_WRITE(upd7759_control_w) - AM_RANGE(0x80, 0x80) AM_MIRROR(0x3f) AM_READ(upd7759_status_r) AM_DEVWRITE("upd", upd7759_device, port_w) - AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x3f) AM_DEVREAD("mapper", sega_315_5195_mapper_device, pread) -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::bootleg_sound_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xdfff) AM_ROMBANK("soundbank") - AM_RANGE(0xe800, 0xe800) AM_DEVREAD("soundlatch", generic_latch_8_device, read) - AM_RANGE(0xf800, 0xffff) AM_RAM -ADDRESS_MAP_END - -ADDRESS_MAP_START(segas16b_state::bootleg_sound_portmap) - ADDRESS_MAP_UNMAP_HIGH - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_MIRROR(0x3e) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) - AM_RANGE(0x40, 0x40) AM_MIRROR(0x3f) AM_WRITE(upd7759_control_w) - AM_RANGE(0x80, 0x80) AM_MIRROR(0x3f) AM_READ(upd7759_status_r) AM_DEVWRITE("upd", upd7759_device, port_w) - AM_RANGE(0xc0, 0xc0) AM_MIRROR(0x3f) AM_DEVREAD("soundlatch", generic_latch_8_device, read) -ADDRESS_MAP_END +void segas16b_state::sound_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x7fff).rom(); + map(0x8000, 0xdfff).bankr("soundbank"); + map(0xe800, 0xe800).r(m_mapper, FUNC(sega_315_5195_mapper_device::pread)); + map(0xf800, 0xffff).ram(); +} + +void segas16b_state::sound_decrypted_opcodes_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x7fff).rom().share("sound_decrypted_opcodes"); + map(0x8000, 0xdfff).bankr("soundbank"); +} + +void segas16b_state::sound_portmap(address_map &map) +{ + map.unmap_value_high(); + map.global_mask(0xff); + map(0x00, 0x01).mirror(0x3e).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write)); + map(0x40, 0x40).mirror(0x3f).w(this, FUNC(segas16b_state::upd7759_control_w)); + map(0x80, 0x80).mirror(0x3f).r(this, FUNC(segas16b_state::upd7759_status_r)).w(m_upd7759, FUNC(upd7759_device::port_w)); + map(0xc0, 0xc0).mirror(0x3f).r(m_mapper, FUNC(sega_315_5195_mapper_device::pread)); +} + +void segas16b_state::bootleg_sound_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x7fff).rom(); + map(0x8000, 0xdfff).bankr("soundbank"); + map(0xe800, 0xe800).r(m_soundlatch, FUNC(generic_latch_8_device::read)); + map(0xf800, 0xffff).ram(); +} + +void segas16b_state::bootleg_sound_portmap(address_map &map) +{ + map.unmap_value_high(); + map.global_mask(0xff); + map(0x00, 0x01).mirror(0x3e).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write)); + map(0x40, 0x40).mirror(0x3f).w(this, FUNC(segas16b_state::upd7759_control_w)); + map(0x80, 0x80).mirror(0x3f).r(this, FUNC(segas16b_state::upd7759_status_r)).w(m_upd7759, FUNC(upd7759_device::port_w)); + map(0xc0, 0xc0).mirror(0x3f).r(m_soundlatch, FUNC(generic_latch_8_device::read)); +} // similar to whizz / other philko games in sidearms.cpp, but with the m6295 -ADDRESS_MAP_START(segas16b_state::lockonph_sound_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0xf7ff) AM_ROM - AM_RANGE(0xf800, 0xffff) AM_RAM -ADDRESS_MAP_END +void segas16b_state::lockonph_sound_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0xf7ff).rom(); + map(0xf800, 0xffff).ram(); +} -ADDRESS_MAP_START(segas16b_state::lockonph_sound_iomap) - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2151_device, read, write) - AM_RANGE(0x40, 0x40) AM_WRITENOP // ?? - AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki", okim6295_device, read, write) - AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read) -ADDRESS_MAP_END +void segas16b_state::lockonph_sound_iomap(address_map &map) +{ + map.global_mask(0xff); + map(0x00, 0x01).rw("ymsnd", FUNC(ym2151_device::read), FUNC(ym2151_device::write)); + map(0x40, 0x40).nopw(); // ?? + map(0x80, 0x80).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); + map(0xc0, 0xc0).r(m_soundlatch, FUNC(generic_latch_8_device::read)); +} //************************************************************************** @@ -1896,11 +1913,12 @@ WRITE8_MEMBER(segas16b_state::spin_68k_w) m_maincpu->spin_until_time(m_maincpu->cycles_to_attotime(20000)); } -ADDRESS_MAP_START(segas16b_state::mcu_io_map) - ADDRESS_MAP_UNMAP_HIGH - ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE(0x00, 0x1f) AM_DEVREADWRITE("mapper", sega_315_5195_mapper_device, read, write) -ADDRESS_MAP_END +void segas16b_state::mcu_io_map(address_map &map) +{ + map.unmap_value_high(); + map.global_mask(0xff); + map(0x00, 0x1f).rw(m_mapper, FUNC(sega_315_5195_mapper_device::read), FUNC(sega_315_5195_mapper_device::write)); +} @@ -9588,36 +9606,37 @@ WRITE16_MEMBER( isgsm_state::main_bank_change_w ) membank(ISGSM_MAIN_BANK)->set_base(memregion("maincpu")->base()); } -ADDRESS_MAP_START(isgsm_state::isgsm_map) - - AM_RANGE(0x000000, 0x0fffff) AM_ROMBANK(ISGSM_MAIN_BANK) AM_REGION("bios", 0) // this area is ALWAYS read-only, even when the game is banked in - AM_RANGE(0x200000, 0x23ffff) AM_RAM // used during startup for decompression - AM_RANGE(0x3f0000, 0x3fffff) AM_WRITE(rom_5704_bank_w) - AM_RANGE(0x400000, 0x40ffff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, tileram_r, tileram_w) AM_SHARE("tileram") - AM_RANGE(0x410000, 0x410fff) AM_DEVREADWRITE("segaic16vid", segaic16_video_device, textram_r, textram_w) AM_SHARE("textram") - AM_RANGE(0x440000, 0x4407ff) AM_RAM AM_SHARE("sprites") - AM_RANGE(0x840000, 0x840fff) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0xc40000, 0xc43fff) AM_READWRITE(standard_io_r, standard_io_w) - - AM_RANGE(0xe00000, 0xe00001) AM_WRITE(data_w) // writes decompressed data here (copied from RAM..) - AM_RANGE(0xe00002, 0xe00003) AM_WRITE(datatype_w) // selects which 'type' of data we're writing - AM_RANGE(0xe00004, 0xe00005) AM_WRITE(addr_high_w) // high address, and some mode bits - AM_RANGE(0xe00006, 0xe00007) AM_WRITE(addr_low_w) // low address - - AM_RANGE(0xe80000, 0xe80001) AM_READ(cart_data_r) // 8-bit port that the entire cart can be read from - AM_RANGE(0xe80002, 0xe80003) AM_READ_PORT("CARDDSW") - AM_RANGE(0xe80004, 0xe80005) AM_WRITE(cart_addr_high_w) - AM_RANGE(0xe80006, 0xe80007) AM_WRITE(cart_addr_low_w) - AM_RANGE(0xe80008, 0xe80009) AM_READWRITE(cart_security_high_r, cart_security_high_w) // 32-bit bitswap device.. - AM_RANGE(0xe8000a, 0xe8000b) AM_READWRITE(cart_security_low_r, cart_security_low_w) - - AM_RANGE(0xee0000, 0xefffff) AM_ROM AM_REGION("gamecart_rgn", 0) // only the first 0x20000 bytes of the cart are visible here.. - - AM_RANGE(0xfe0006, 0xfe0007) AM_WRITE(sound_w16) - AM_RANGE(0xfe0008, 0xfe0009) AM_WRITE(sound_reset_w) - AM_RANGE(0xfe000a, 0xfe000b) AM_WRITE(main_bank_change_w) - AM_RANGE(0xffc000, 0xffffff) AM_RAM AM_SHARE("workram") -ADDRESS_MAP_END +void isgsm_state::isgsm_map(address_map &map) +{ + + map(0x000000, 0x0fffff).bankr(ISGSM_MAIN_BANK).region("bios", 0); // this area is ALWAYS read-only, even when the game is banked in + map(0x200000, 0x23ffff).ram(); // used during startup for decompression + map(0x3f0000, 0x3fffff).w(this, FUNC(isgsm_state::rom_5704_bank_w)); + map(0x400000, 0x40ffff).rw(m_segaic16vid, FUNC(segaic16_video_device::tileram_r), FUNC(segaic16_video_device::tileram_w)).share("tileram"); + map(0x410000, 0x410fff).rw(m_segaic16vid, FUNC(segaic16_video_device::textram_r), FUNC(segaic16_video_device::textram_w)).share("textram"); + map(0x440000, 0x4407ff).ram().share("sprites"); + map(0x840000, 0x840fff).ram().w(this, FUNC(isgsm_state::paletteram_w)).share("paletteram"); + map(0xc40000, 0xc43fff).rw(this, FUNC(isgsm_state::standard_io_r), FUNC(isgsm_state::standard_io_w)); + + map(0xe00000, 0xe00001).w(this, FUNC(isgsm_state::data_w)); // writes decompressed data here (copied from RAM..) + map(0xe00002, 0xe00003).w(this, FUNC(isgsm_state::datatype_w)); // selects which 'type' of data we're writing + map(0xe00004, 0xe00005).w(this, FUNC(isgsm_state::addr_high_w)); // high address, and some mode bits + map(0xe00006, 0xe00007).w(this, FUNC(isgsm_state::addr_low_w)); // low address + + map(0xe80000, 0xe80001).r(this, FUNC(isgsm_state::cart_data_r)); // 8-bit port that the entire cart can be read from + map(0xe80002, 0xe80003).portr("CARDDSW"); + map(0xe80004, 0xe80005).w(this, FUNC(isgsm_state::cart_addr_high_w)); + map(0xe80006, 0xe80007).w(this, FUNC(isgsm_state::cart_addr_low_w)); + map(0xe80008, 0xe80009).rw(this, FUNC(isgsm_state::cart_security_high_r), FUNC(isgsm_state::cart_security_high_w)); // 32-bit bitswap device.. + map(0xe8000a, 0xe8000b).rw(this, FUNC(isgsm_state::cart_security_low_r), FUNC(isgsm_state::cart_security_low_w)); + + map(0xee0000, 0xefffff).rom().region("gamecart_rgn", 0); // only the first 0x20000 bytes of the cart are visible here.. + + map(0xfe0006, 0xfe0007).w(this, FUNC(isgsm_state::sound_w16)); + map(0xfe0008, 0xfe0009).w(this, FUNC(isgsm_state::sound_reset_w)); + map(0xfe000a, 0xfe000b).w(this, FUNC(isgsm_state::main_bank_change_w)); + map(0xffc000, 0xffffff).ram().share("workram"); +} |