diff options
Diffstat (limited to 'src/mame/drivers/konamigx.cpp')
-rw-r--r-- | src/mame/drivers/konamigx.cpp | 189 |
1 files changed, 98 insertions, 91 deletions
diff --git a/src/mame/drivers/konamigx.cpp b/src/mame/drivers/konamigx.cpp index a1f1a1614e1..f9c121f1897 100644 --- a/src/mame/drivers/konamigx.cpp +++ b/src/mame/drivers/konamigx.cpp @@ -985,87 +985,92 @@ WRITE32_MEMBER(konamigx_state::type1_cablamps_w) /* 68EC020 memory handlers */ /**********************************************************************************/ -ADDRESS_MAP_START(konamigx_state::gx_base_memmap) - AM_RANGE(0x000000, 0x01ffff) AM_ROM // BIOS ROM - AM_RANGE(0x200000, 0x3fffff) AM_ROM // main program ROM - AM_RANGE(0x400000, 0x7fffff) AM_ROM // data ROM - AM_RANGE(0xc00000, 0xc1ffff) AM_RAM AM_SHARE("workram") - AM_RANGE(0xd00000, 0xd01fff) AM_DEVREAD("k056832", k056832_device, k_5bpp_rom_long_r) - AM_RANGE(0xd20000, 0xd20fff) AM_DEVREADWRITE16("k055673", k055673_device, k053247_word_r, k053247_word_w, 0xffffffff) - AM_RANGE(0xd21000, 0xd21fff) AM_RAM // second bank of sprite RAM, accessed thru ESC - AM_RANGE(0xd22000, 0xd23fff) AM_RAM // extra bank checked at least by sexyparo, pending further investigation. - AM_RANGE(0xd40000, 0xd4003f) AM_DEVWRITE("k056832", k056832_device, long_w) - AM_RANGE(0xd44000, 0xd4400f) AM_WRITE(konamigx_tilebank_w) - AM_RANGE(0xd48000, 0xd48007) AM_DEVWRITE16("k055673", k055673_device, k053246_word_w, 0xffffffff) - AM_RANGE(0xd4a000, 0xd4a00f) AM_DEVREAD16("k055673", k055673_device, k055673_rom_word_r, 0xffffffff) - AM_RANGE(0xd4a010, 0xd4a01f) AM_DEVWRITE16("k055673", k055673_device, k055673_reg_word_w, 0xffffffff) - AM_RANGE(0xd4c000, 0xd4c01f) AM_DEVREADWRITE8("k053252", k053252_device, read, write, 0xff00ff00) - AM_RANGE(0xd4e000, 0xd4e01f) AM_WRITENOP // left-over for "secondary" CCU, apparently (used by type 3/4 for slave screen?) - AM_RANGE(0xd50000, 0xd500ff) AM_DEVWRITE("k055555", k055555_device, K055555_long_w) - AM_RANGE(0xd52000, 0xd5201f) AM_DEVREADWRITE8("k056800", k056800_device, host_r, host_w, 0xff00ff00) - AM_RANGE(0xd56000, 0xd56003) AM_WRITE(eeprom_w) - AM_RANGE(0xd58000, 0xd58003) AM_WRITE(control_w) - AM_RANGE(0xd5a000, 0xd5a003) AM_READ_PORT("SYSTEM_DSW") - AM_RANGE(0xd5c000, 0xd5c003) AM_READ_PORT("INPUTS") - AM_RANGE(0xd5e000, 0xd5e003) AM_READ_PORT("SERVICE") - AM_RANGE(0xd80000, 0xd8001f) AM_DEVWRITE("k054338", k054338_device, long_w) - AM_RANGE(0xda0000, 0xda1fff) AM_DEVREADWRITE("k056832", k056832_device, ram_long_r, ram_long_w) - AM_RANGE(0xda2000, 0xda3fff) AM_DEVREADWRITE("k056832", k056832_device, ram_long_r, ram_long_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(konamigx_state::gx_type1_map) - AM_IMPORT_FROM(gx_base_memmap) - AM_RANGE(0xd90000, 0xd97fff) AM_RAM_DEVWRITE("palette", palette_device, write32) AM_SHARE("palette") - AM_RANGE(0xdc0000, 0xdc1fff) AM_RAM // LAN RAM? (Racin' Force has, Open Golf doesn't) - AM_RANGE(0xdd0000, 0xdd00ff) AM_READNOP AM_WRITENOP // LAN board - AM_RANGE(0xdda000, 0xddafff) AM_WRITE_PORT("ADC-WRPORT") - AM_RANGE(0xddc000, 0xddcfff) AM_READ_PORT("ADC-RDPORT") - AM_RANGE(0xdde000, 0xdde003) AM_WRITE(type1_cablamps_w) - AM_RANGE(0xe00000, 0xe0001f) AM_RAM AM_SHARE("k053936_0_ctrl") - AM_RANGE(0xe20000, 0xe2000f) AM_WRITENOP - AM_RANGE(0xe40000, 0xe40003) AM_WRITENOP - AM_RANGE(0xe80000, 0xe81fff) AM_RAM AM_SHARE("k053936_0_line") // chips 21L+19L / S - AM_RANGE(0xec0000, 0xedffff) AM_RAM_WRITE(konamigx_t1_psacmap_w) AM_SHARE("psacram") // chips 20J+23J+18J / S - AM_RANGE(0xf00000, 0xf3ffff) AM_READ(type1_roz_r1) // ROM readback - AM_RANGE(0xf40000, 0xf7ffff) AM_READ(type1_roz_r2) // ROM readback - AM_RANGE(0xf80000, 0xf80fff) AM_RAM // chip 21Q / S - AM_RANGE(0xfc0000, 0xfc00ff) AM_RAM // chip 22N / S -ADDRESS_MAP_END - -ADDRESS_MAP_START(konamigx_state::gx_type2_map) - AM_IMPORT_FROM(gx_base_memmap) - AM_RANGE(0xcc0000, 0xcc0003) AM_WRITE(esc_w) - AM_RANGE(0xd90000, 0xd97fff) AM_RAM_DEVWRITE("palette", palette_device, write32) AM_SHARE("palette") -ADDRESS_MAP_END - -ADDRESS_MAP_START(konamigx_state::gx_type3_map) - AM_IMPORT_FROM(gx_base_memmap) - AM_RANGE(0xd90000, 0xd97fff) AM_RAM +void konamigx_state::gx_base_memmap(address_map &map) +{ + map(0x000000, 0x01ffff).rom(); // BIOS ROM + map(0x200000, 0x3fffff).rom(); // main program ROM + map(0x400000, 0x7fffff).rom(); // data ROM + map(0xc00000, 0xc1ffff).ram().share("workram"); + map(0xd00000, 0xd01fff).r(m_k056832, FUNC(k056832_device::k_5bpp_rom_long_r)); + map(0xd20000, 0xd20fff).rw(m_k055673, FUNC(k055673_device::k053247_word_r), FUNC(k055673_device::k053247_word_w)); + map(0xd21000, 0xd21fff).ram(); // second bank of sprite RAM, accessed thru ESC + map(0xd22000, 0xd23fff).ram(); // extra bank checked at least by sexyparo, pending further investigation. + map(0xd40000, 0xd4003f).w(m_k056832, FUNC(k056832_device::long_w)); + map(0xd44000, 0xd4400f).w(this, FUNC(konamigx_state::konamigx_tilebank_w)); + map(0xd48000, 0xd48007).w(m_k055673, FUNC(k055673_device::k053246_word_w)); + map(0xd4a000, 0xd4a00f).r(m_k055673, FUNC(k055673_device::k055673_rom_word_r)); + map(0xd4a010, 0xd4a01f).w(m_k055673, FUNC(k055673_device::k055673_reg_word_w)); + map(0xd4c000, 0xd4c01f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask32(0xff00ff00); + map(0xd4e000, 0xd4e01f).nopw(); // left-over for "secondary" CCU, apparently (used by type 3/4 for slave screen?) + map(0xd50000, 0xd500ff).w(m_k055555, FUNC(k055555_device::K055555_long_w)); + map(0xd52000, 0xd5201f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)).umask32(0xff00ff00); + map(0xd56000, 0xd56003).w(this, FUNC(konamigx_state::eeprom_w)); + map(0xd58000, 0xd58003).w(this, FUNC(konamigx_state::control_w)); + map(0xd5a000, 0xd5a003).portr("SYSTEM_DSW"); + map(0xd5c000, 0xd5c003).portr("INPUTS"); + map(0xd5e000, 0xd5e003).portr("SERVICE"); + map(0xd80000, 0xd8001f).w(m_k054338, FUNC(k054338_device::long_w)); + map(0xda0000, 0xda1fff).rw(m_k056832, FUNC(k056832_device::ram_long_r), FUNC(k056832_device::ram_long_w)); + map(0xda2000, 0xda3fff).rw(m_k056832, FUNC(k056832_device::ram_long_r), FUNC(k056832_device::ram_long_w)); +} + +void konamigx_state::gx_type1_map(address_map &map) +{ + gx_base_memmap(map); + map(0xd90000, 0xd97fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); + map(0xdc0000, 0xdc1fff).ram(); // LAN RAM? (Racin' Force has, Open Golf doesn't) + map(0xdd0000, 0xdd00ff).nopr().nopw(); // LAN board + map(0xdda000, 0xddafff).portw("ADC-WRPORT"); + map(0xddc000, 0xddcfff).portr("ADC-RDPORT"); + map(0xdde000, 0xdde003).w(this, FUNC(konamigx_state::type1_cablamps_w)); + map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); + map(0xe20000, 0xe2000f).nopw(); + map(0xe40000, 0xe40003).nopw(); + map(0xe80000, 0xe81fff).ram().share("k053936_0_line"); // chips 21L+19L / S + map(0xec0000, 0xedffff).ram().w(this, FUNC(konamigx_state::konamigx_t1_psacmap_w)).share("psacram"); // chips 20J+23J+18J / S + map(0xf00000, 0xf3ffff).r(this, FUNC(konamigx_state::type1_roz_r1)); // ROM readback + map(0xf40000, 0xf7ffff).r(this, FUNC(konamigx_state::type1_roz_r2)); // ROM readback + map(0xf80000, 0xf80fff).ram(); // chip 21Q / S + map(0xfc0000, 0xfc00ff).ram(); // chip 22N / S +} + +void konamigx_state::gx_type2_map(address_map &map) +{ + gx_base_memmap(map); + map(0xcc0000, 0xcc0003).w(this, FUNC(konamigx_state::esc_w)); + map(0xd90000, 0xd97fff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); +} + +void konamigx_state::gx_type3_map(address_map &map) +{ + gx_base_memmap(map); + map(0xd90000, 0xd97fff).ram(); //AM_RANGE(0xcc0000, 0xcc0007) AM_WRITE(type4_prot_w) - AM_RANGE(0xe00000, 0xe0001f) AM_RAM AM_SHARE("k053936_0_ctrl") + map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); //AM_RANGE(0xe20000, 0xe20003) AM_WRITENOP - AM_RANGE(0xe40000, 0xe40003) AM_WRITE(konamigx_type3_psac2_bank_w) AM_SHARE("psac2_bank") - AM_RANGE(0xe60000, 0xe60fff) AM_RAM AM_SHARE("k053936_0_line") - AM_RANGE(0xe80000, 0xe83fff) AM_RAM AM_SHARE("paletteram") // main monitor palette - AM_RANGE(0xea0000, 0xea3fff) AM_RAM AM_SHARE("subpaletteram") - AM_RANGE(0xec0000, 0xec0003) AM_READ(type3_sync_r) + map(0xe40000, 0xe40003).w(this, FUNC(konamigx_state::konamigx_type3_psac2_bank_w)).share("psac2_bank"); + map(0xe60000, 0xe60fff).ram().share("k053936_0_line"); + map(0xe80000, 0xe83fff).ram().share("paletteram"); // main monitor palette + map(0xea0000, 0xea3fff).ram().share("subpaletteram"); + map(0xec0000, 0xec0003).r(this, FUNC(konamigx_state::type3_sync_r)); //AM_RANGE(0xf00000, 0xf07fff) AM_RAM -ADDRESS_MAP_END - -ADDRESS_MAP_START(konamigx_state::gx_type4_map) - AM_IMPORT_FROM(gx_base_memmap) - AM_RANGE(0xcc0000, 0xcc0007) AM_WRITE(type4_prot_w) - AM_RANGE(0xd90000, 0xd97fff) AM_RAM - AM_RANGE(0xe00000, 0xe0001f) AM_RAM AM_SHARE("k053936_0_ctrl") - AM_RANGE(0xe20000, 0xe20003) AM_WRITENOP - AM_RANGE(0xe40000, 0xe40003) AM_WRITENOP - AM_RANGE(0xe60000, 0xe60fff) AM_RAM AM_SHARE("k053936_0_line") // 29C & 29G (PSAC2 line control) - AM_RANGE(0xe80000, 0xe87fff) AM_RAM AM_SHARE("paletteram") // 11G/13G/15G (main screen palette RAM) - AM_RANGE(0xea0000, 0xea7fff) AM_RAM AM_SHARE("subpaletteram") // 5G/7G/9G (sub screen palette RAM) - AM_RANGE(0xec0000, 0xec0003) AM_READ(type3_sync_r) // type 4 polls this too - AM_RANGE(0xf00000, 0xf07fff) AM_RAM_WRITE(konamigx_t4_psacmap_w) AM_SHARE("psacram") // PSAC2 tilemap +} + +void konamigx_state::gx_type4_map(address_map &map) +{ + gx_base_memmap(map); + map(0xcc0000, 0xcc0007).w(this, FUNC(konamigx_state::type4_prot_w)); + map(0xd90000, 0xd97fff).ram(); + map(0xe00000, 0xe0001f).ram().share("k053936_0_ctrl"); + map(0xe20000, 0xe20003).nopw(); + map(0xe40000, 0xe40003).nopw(); + map(0xe60000, 0xe60fff).ram().share("k053936_0_line"); // 29C & 29G (PSAC2 line control) + map(0xe80000, 0xe87fff).ram().share("paletteram"); // 11G/13G/15G (main screen palette RAM) + map(0xea0000, 0xea7fff).ram().share("subpaletteram"); // 5G/7G/9G (sub screen palette RAM) + map(0xec0000, 0xec0003).r(this, FUNC(konamigx_state::type3_sync_r)); // type 4 polls this too + map(0xf00000, 0xf07fff).ram().w(this, FUNC(konamigx_state::konamigx_t4_psacmap_w)).share("psacram"); // PSAC2 tilemap // AM_RANGE(0xf00000, 0xf07fff) AM_RAM -ADDRESS_MAP_END +} /**********************************************************************************/ /* Sound handling */ @@ -1104,20 +1109,22 @@ WRITE16_MEMBER(konamigx_state::tms57002_control_word_w) } /* 68000 memory handling */ -ADDRESS_MAP_START(konamigx_state::gxsndmap) - AM_RANGE(0x000000, 0x03ffff) AM_ROM - AM_RANGE(0x100000, 0x10ffff) AM_RAM - AM_RANGE(0x200000, 0x2004ff) AM_DEVREADWRITE8("k054539_1", k054539_device, read, write, 0xff00) - AM_RANGE(0x200000, 0x2004ff) AM_DEVREADWRITE8("k054539_2", k054539_device, read, write, 0x00ff) - AM_RANGE(0x300000, 0x300001) AM_READWRITE(tms57002_data_word_r, tms57002_data_word_w) - AM_RANGE(0x400000, 0x40001f) AM_DEVREADWRITE8("k056800", k056800_device, sound_r, sound_w, 0x00ff) - AM_RANGE(0x500000, 0x500001) AM_READWRITE(tms57002_status_word_r, tms57002_control_word_w) - AM_RANGE(0x580000, 0x580001) AM_WRITENOP // 'NRES' - D2: K056602 /RESET -ADDRESS_MAP_END - -ADDRESS_MAP_START(konamigx_state::gxtmsmap) - AM_RANGE(0x00000, 0x3ffff) AM_RAM -ADDRESS_MAP_END +void konamigx_state::gxsndmap(address_map &map) +{ + map(0x000000, 0x03ffff).rom(); + map(0x100000, 0x10ffff).ram(); + map(0x200000, 0x2004ff).rw(m_k054539_1, FUNC(k054539_device::read), FUNC(k054539_device::write)).umask16(0xff00); + map(0x200000, 0x2004ff).rw(m_k054539_2, FUNC(k054539_device::read), FUNC(k054539_device::write)).umask16(0x00ff); + map(0x300000, 0x300001).rw(this, FUNC(konamigx_state::tms57002_data_word_r), FUNC(konamigx_state::tms57002_data_word_w)); + map(0x400000, 0x40001f).rw(m_k056800, FUNC(k056800_device::sound_r), FUNC(k056800_device::sound_w)).umask16(0x00ff); + map(0x500000, 0x500001).rw(this, FUNC(konamigx_state::tms57002_status_word_r), FUNC(konamigx_state::tms57002_control_word_w)); + map(0x580000, 0x580001).nopw(); // 'NRES' - D2: K056602 /RESET +} + +void konamigx_state::gxtmsmap(address_map &map) +{ + map(0x00000, 0x3ffff).ram(); +} WRITE_LINE_MEMBER(konamigx_state::k054539_irq_gen) |