diff options
Diffstat (limited to 'src/mame/drivers/joctronic.cpp')
-rw-r--r-- | src/mame/drivers/joctronic.cpp | 146 |
1 files changed, 77 insertions, 69 deletions
diff --git a/src/mame/drivers/joctronic.cpp b/src/mame/drivers/joctronic.cpp index ff4d699d4be..cfc29be5c6a 100644 --- a/src/mame/drivers/joctronic.cpp +++ b/src/mame/drivers/joctronic.cpp @@ -127,22 +127,23 @@ WRITE8_MEMBER(joctronic_state::drivers_b_w) logerror("drivers_b[%d] = $%02X\n", offset, data); } -ADDRESS_MAP_START(joctronic_state::maincpu_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x4000) AM_ROM - AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_READ(csin_r) // CSIN - AM_RANGE(0xa000, 0xa007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // PORTDS - AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x0fc7) AM_WRITE(display_1_w) // CSD1 - AM_RANGE(0xc008, 0xc008) AM_MIRROR(0x0fc7) AM_WRITE(display_2_w) // CSD2 - AM_RANGE(0xc010, 0xc010) AM_MIRROR(0x0fc7) AM_WRITE(display_3_w) // CSD3 - AM_RANGE(0xc018, 0xc018) AM_MIRROR(0x0fc7) AM_WRITE(display_4_w) // CSD4 - AM_RANGE(0xc020, 0xc020) AM_MIRROR(0x0fc7) AM_WRITE(display_a_w) // CSDA - AM_RANGE(0xc028, 0xc028) AM_MIRROR(0x0fc7) AM_WRITE(drivers_l_w) // OL - AM_RANGE(0xc030, 0xc030) AM_MIRROR(0x0fc7) AM_WRITE(drivers_b_w) // OB - AM_RANGE(0xc038, 0xc03f) AM_MIRROR(0x0fc0) AM_WRITE(drivers_w) // OA - AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x0fff) AM_WRITE(soundlatch_nmi_w) // PSON -ADDRESS_MAP_END +void joctronic_state::maincpu_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x3fff).mirror(0x4000).rom(); + map(0x8000, 0x87ff).mirror(0x0800).ram().share("nvram"); + map(0x9000, 0x9007).mirror(0x0ff8).r(this, FUNC(joctronic_state::csin_r)); // CSIN + map(0xa000, 0xa007).mirror(0x0ff8).w("mainlatch", FUNC(ls259_device::write_d0)); // PORTDS + map(0xc000, 0xc000).mirror(0x0fc7).w(this, FUNC(joctronic_state::display_1_w)); // CSD1 + map(0xc008, 0xc008).mirror(0x0fc7).w(this, FUNC(joctronic_state::display_2_w)); // CSD2 + map(0xc010, 0xc010).mirror(0x0fc7).w(this, FUNC(joctronic_state::display_3_w)); // CSD3 + map(0xc018, 0xc018).mirror(0x0fc7).w(this, FUNC(joctronic_state::display_4_w)); // CSD4 + map(0xc020, 0xc020).mirror(0x0fc7).w(this, FUNC(joctronic_state::display_a_w)); // CSDA + map(0xc028, 0xc028).mirror(0x0fc7).w(this, FUNC(joctronic_state::drivers_l_w)); // OL + map(0xc030, 0xc030).mirror(0x0fc7).w(this, FUNC(joctronic_state::drivers_b_w)); // OB + map(0xc038, 0xc03f).mirror(0x0fc0).w(this, FUNC(joctronic_state::drivers_w)); // OA + map(0xe000, 0xe000).mirror(0x0fff).w(this, FUNC(joctronic_state::soundlatch_nmi_w)); // PSON +} READ8_MEMBER(joctronic_state::inputs_r) { @@ -177,21 +178,22 @@ WRITE8_MEMBER(joctronic_state::display_ck_w) logerror("display_ck[%d] = $%02X\n", offset, data); } -ADDRESS_MAP_START(joctronic_state::slalom03_maincpu_map) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x0800) AM_RAM AM_SHARE("nvram") - AM_RANGE(0x9000, 0x9007) AM_MIRROR(0x0ff8) AM_DEVWRITE("mainlatch", ls259_device, write_d0) // CSPORT - AM_RANGE(0xa008, 0xa008) AM_MIRROR(0x0fc7) AM_WRITE(display_strobe_w) // STROBE - AM_RANGE(0xa010, 0xa017) AM_MIRROR(0x0fc0) AM_WRITE(drivers_w) - AM_RANGE(0xa018, 0xa018) AM_MIRROR(0x0fc7) AM_WRITE(display_ck_w) // CKD - AM_RANGE(0xa020, 0xa020) AM_MIRROR(0x0fc7) AM_READ(inputs_r) // CSS - AM_RANGE(0xa028, 0xa028) AM_MIRROR(0x0fc7) AM_READNOP // N.C. - AM_RANGE(0xa030, 0xa030) AM_MIRROR(0x0fc7) AM_READNOP // N.C. - AM_RANGE(0xa038, 0xa038) AM_MIRROR(0x0fc7) AM_READ(ports_r) // CSP - AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x0fff) AM_READ(csint_r) // CSINT - AM_RANGE(0xf000, 0xf000) AM_MIRROR(0x0fff) AM_WRITE(soundlatch_nmi_pulse_w) // CSSON -ADDRESS_MAP_END +void joctronic_state::slalom03_maincpu_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0x7fff).rom(); + map(0x8000, 0x87ff).mirror(0x0800).ram().share("nvram"); + map(0x9000, 0x9007).mirror(0x0ff8).w("mainlatch", FUNC(ls259_device::write_d0)); // CSPORT + map(0xa008, 0xa008).mirror(0x0fc7).w(this, FUNC(joctronic_state::display_strobe_w)); // STROBE + map(0xa010, 0xa017).mirror(0x0fc0).w(this, FUNC(joctronic_state::drivers_w)); + map(0xa018, 0xa018).mirror(0x0fc7).w(this, FUNC(joctronic_state::display_ck_w)); // CKD + map(0xa020, 0xa020).mirror(0x0fc7).r(this, FUNC(joctronic_state::inputs_r)); // CSS + map(0xa028, 0xa028).mirror(0x0fc7).nopr(); // N.C. + map(0xa030, 0xa030).mirror(0x0fc7).nopr(); // N.C. + map(0xa038, 0xa038).mirror(0x0fc7).r(this, FUNC(joctronic_state::ports_r)); // CSP + map(0xe000, 0xe000).mirror(0x0fff).r(this, FUNC(joctronic_state::csint_r)); // CSINT + map(0xf000, 0xf000).mirror(0x0fff).w(this, FUNC(joctronic_state::soundlatch_nmi_pulse_w)); // CSSON +} READ8_MEMBER(joctronic_state::bldyrolr_unknown_r) { @@ -204,15 +206,17 @@ WRITE8_MEMBER(joctronic_state::bldyrolr_unknown_w) logerror("bldyrolr_unknown = $%02X\n", data); } -ADDRESS_MAP_START(joctronic_state::bldyrolr_maincpu_map) - AM_IMPORT_FROM(slalom03_maincpu_map) - AM_RANGE(0xc000, 0xc000) AM_READWRITE(bldyrolr_unknown_r, bldyrolr_unknown_w) -ADDRESS_MAP_END +void joctronic_state::bldyrolr_maincpu_map(address_map &map) +{ + slalom03_maincpu_map(map); + map(0xc000, 0xc000).rw(this, FUNC(joctronic_state::bldyrolr_unknown_r), FUNC(joctronic_state::bldyrolr_unknown_w)); +} -ADDRESS_MAP_START(joctronic_state::maincpu_io_map) - ADDRESS_MAP_GLOBAL_MASK(0x03) - AM_RANGE(0x00, 0x03) AM_DEVREADWRITE("ctc", z80ctc_device, read, write) -ADDRESS_MAP_END +void joctronic_state::maincpu_io_map(address_map &map) +{ + map.global_mask(0x03); + map(0x00, 0x03).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write)); +} WRITE8_MEMBER(joctronic_state::soundlatch_nmi_w) { @@ -261,36 +265,40 @@ WRITE_LINE_MEMBER(joctronic_state::vck_w) } } -ADDRESS_MAP_START(joctronic_state::joctronic_sound_map) - AM_RANGE(0x0000, 0x3fff) AM_MIRROR(0x4000) AM_ROM - AM_RANGE(0x8000, 0x87ff) AM_MIRROR(0x1800) AM_RAM // only lower half of 2016 used? - AM_RANGE(0xc000, 0xc000) AM_MIRROR(0x1fff) AM_READ(soundlatch_nmi_r) // SCSP - AM_RANGE(0xe000, 0xe000) AM_MIRROR(0x1fff) AM_WRITE(resint_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(joctronic_state::joctronic_sound_io_map) - ADDRESS_MAP_GLOBAL_MASK(0x03) - AM_RANGE(0x00, 0x00) AM_DEVWRITE("aysnd1", ay8910_device, address_w) - AM_RANGE(0x01, 0x01) AM_DEVWRITE("aysnd1", ay8910_device, data_w) - AM_RANGE(0x02, 0x02) AM_DEVWRITE("aysnd2", ay8910_device, address_w) - AM_RANGE(0x03, 0x03) AM_DEVWRITE("aysnd2", ay8910_device, data_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(joctronic_state::slalom03_sound_map) - AM_RANGE(0x0000, 0x7fff) AM_ROM - AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("soundbank") - AM_RANGE(0xc000, 0xc7ff) AM_MIRROR(0x3800) AM_RAM // only lower half of 2016 used? -ADDRESS_MAP_END - -ADDRESS_MAP_START(joctronic_state::slalom03_sound_io_map) - ADDRESS_MAP_GLOBAL_MASK(0x07) - AM_RANGE(0x00, 0x00) AM_DEVWRITE("aysnd1", ay8910_device, address_w) - AM_RANGE(0x01, 0x01) AM_DEVWRITE("aysnd1", ay8910_device, data_w) - AM_RANGE(0x02, 0x02) AM_DEVWRITE("aysnd2", ay8910_device, address_w) - AM_RANGE(0x03, 0x03) AM_DEVWRITE("aysnd2", ay8910_device, data_w) - AM_RANGE(0x04, 0x04) AM_MIRROR(0x01) AM_READ(soundlatch_r) // CSPORT - AM_RANGE(0x06, 0x06) AM_MIRROR(0x01) AM_WRITE(resint_w) // RESINT -ADDRESS_MAP_END +void joctronic_state::joctronic_sound_map(address_map &map) +{ + map(0x0000, 0x3fff).mirror(0x4000).rom(); + map(0x8000, 0x87ff).mirror(0x1800).ram(); // only lower half of 2016 used? + map(0xc000, 0xc000).mirror(0x1fff).r(this, FUNC(joctronic_state::soundlatch_nmi_r)); // SCSP + map(0xe000, 0xe000).mirror(0x1fff).w(this, FUNC(joctronic_state::resint_w)); +} + +void joctronic_state::joctronic_sound_io_map(address_map &map) +{ + map.global_mask(0x03); + map(0x00, 0x00).w("aysnd1", FUNC(ay8910_device::address_w)); + map(0x01, 0x01).w("aysnd1", FUNC(ay8910_device::data_w)); + map(0x02, 0x02).w("aysnd2", FUNC(ay8910_device::address_w)); + map(0x03, 0x03).w("aysnd2", FUNC(ay8910_device::data_w)); +} + +void joctronic_state::slalom03_sound_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0xbfff).bankr("soundbank"); + map(0xc000, 0xc7ff).mirror(0x3800).ram(); // only lower half of 2016 used? +} + +void joctronic_state::slalom03_sound_io_map(address_map &map) +{ + map.global_mask(0x07); + map(0x00, 0x00).w("aysnd1", FUNC(ay8910_device::address_w)); + map(0x01, 0x01).w("aysnd1", FUNC(ay8910_device::data_w)); + map(0x02, 0x02).w("aysnd2", FUNC(ay8910_device::address_w)); + map(0x03, 0x03).w("aysnd2", FUNC(ay8910_device::data_w)); + map(0x04, 0x04).mirror(0x01).r(this, FUNC(joctronic_state::soundlatch_r)); // CSPORT + map(0x06, 0x06).mirror(0x01).w(this, FUNC(joctronic_state::resint_w)); // RESINT +} static const z80_daisy_config daisy_chain[] = { |