diff options
author | angelosa <salese_corp_ltd@email.it> | 2018-05-23 20:20:08 +0200 |
---|---|---|
committer | angelosa <salese_corp_ltd@email.it> | 2018-05-23 20:40:11 +0200 |
commit | bdfc347128fccd39da680e5cd134d1487bb4303b (patch) | |
tree | 8e99b9d6c44d9ceaa4967c63252c00afd9c76fb0 | |
parent | 9b0876a95fa85f399f6f5404f4676f04d82f3399 (diff) |
rungun.cpp: coin counters, improved sound mixing, minor cleanups (nw)
-rw-r--r-- | src/mame/drivers/rungun.cpp | 41 | ||||
-rw-r--r-- | src/mame/includes/rungun.h | 16 | ||||
-rw-r--r-- | src/mame/video/rungun.cpp | 9 |
3 files changed, 36 insertions, 30 deletions
diff --git a/src/mame/drivers/rungun.cpp b/src/mame/drivers/rungun.cpp index 43fd8c63380..51530bb5afd 100644 --- a/src/mame/drivers/rungun.cpp +++ b/src/mame/drivers/rungun.cpp @@ -14,6 +14,12 @@ Status: Front tilemap should be complete, sprites are mostly correct, controls should be fine. + Known Issues: + - CRTC and video registers needs syncronization with current video draw state, it's very noticeable if for example scroll values are in very different states between screens. + - Current draw state could be improved optimization-wise (for example by supporting it in the core in some way). + - sprite palettes are not entirely right (fixed?) + - sound volume mixing, handtune with set_gain() with m_k054539 devices. + Also notice that "volume" in sound options is for k054539_1 (SFX) Change Log: @@ -27,11 +33,6 @@ video\konamiic.c - missing sprites and priority - Known Issues: - - CRTC and video registers needs syncronization with current video draw state, it's very noticeable if for example scroll values are in very different states between screens. - - Current draw state could be improved optimization-wise (for example by supporting it in the core in some way). - - sprite palettes are not entirely right - *************************************************************************/ @@ -49,7 +50,7 @@ -READ16_MEMBER(rungun_state::rng_sysregs_r) +READ16_MEMBER(rungun_state::sysregs_r) { uint16_t data = 0; @@ -85,7 +86,7 @@ READ16_MEMBER(rungun_state::rng_sysregs_r) return m_sysreg[offset]; } -WRITE16_MEMBER(rungun_state::rng_sysregs_w) +WRITE16_MEMBER(rungun_state::sysregs_w) { COMBINE_DATA(m_sysreg + offset); @@ -108,6 +109,9 @@ WRITE16_MEMBER(rungun_state::rng_sysregs_w) membank("spriteram_bank")->set_entry((data & 0x80) >> 7); m_video_mux_bank = ((data & 0x80) >> 7) ^ 1; ioport("EEPROMOUT")->write(data, 0xff); + + machine().bookkeeping().coin_counter_w(0, data & 0x08); + machine().bookkeeping().coin_counter_w(1, data & 0x10); } if (ACCESSING_BITS_8_15) { @@ -148,7 +152,7 @@ INTERRUPT_GEN_MEMBER(rungun_state::rng_interrupt) device.execute().set_input_line(M68K_IRQ_5, ASSERT_LINE); } -READ8_MEMBER(rungun_state::rng_53936_rom_r) +READ8_MEMBER(rungun_state::k53936_rom_r) { // TODO: odd addresses returns ...? uint32_t rom_addr = offset; @@ -181,8 +185,8 @@ void rungun_state::rungun_map(address_map &map) map(0x000000, 0x2fffff).rom(); // main program + data map(0x300000, 0x3007ff).rw(this, FUNC(rungun_state::palette_read), FUNC(rungun_state::palette_write)); map(0x380000, 0x39ffff).ram(); // work RAM - map(0x400000, 0x43ffff).r(this, FUNC(rungun_state::rng_53936_rom_r)).umask16(0x00ff); // '936 ROM readback window - map(0x480000, 0x48001f).rw(this, FUNC(rungun_state::rng_sysregs_r), FUNC(rungun_state::rng_sysregs_w)).share("sysreg"); + map(0x400000, 0x43ffff).r(this, FUNC(rungun_state::k53936_rom_r)).umask16(0x00ff); // '936 ROM readback window + map(0x480000, 0x48001f).rw(this, FUNC(rungun_state::sysregs_r), FUNC(rungun_state::sysregs_w)).share("sysreg"); map(0x4c0000, 0x4c001f).rw(m_k053252, FUNC(k053252_device::read), FUNC(k053252_device::write)).umask16(0x00ff); // CCU (for scanline and vblank polling) map(0x540000, 0x540001).w(this, FUNC(rungun_state::sound_irq_w)); map(0x580000, 0x58001f).m(m_k054321, FUNC(k054321_device::main_map)).umask16(0xff00); @@ -191,9 +195,9 @@ void rungun_state::rungun_map(address_map &map) map(0x600000, 0x601fff).bankrw("spriteram_bank"); // OBJ RAM map(0x640000, 0x640007).w(m_k055673, FUNC(k055673_device::k053246_word_w)); // '246A registers map(0x680000, 0x68001f).w(m_k053936, FUNC(k053936_device::ctrl_w)); // '936 registers - map(0x6c0000, 0x6cffff).rw(this, FUNC(rungun_state::rng_psac2_videoram_r), FUNC(rungun_state::rng_psac2_videoram_w)); // PSAC2 ('936) RAM (34v + 35v) + map(0x6c0000, 0x6cffff).rw(this, FUNC(rungun_state::psac2_videoram_r), FUNC(rungun_state::psac2_videoram_w)); // PSAC2 ('936) RAM (34v + 35v) map(0x700000, 0x7007ff).rw(m_k053936, FUNC(k053936_device::linectrl_r), FUNC(k053936_device::linectrl_w)); // PSAC "Line RAM" - map(0x740000, 0x741fff).rw(this, FUNC(rungun_state::rng_ttl_ram_r), FUNC(rungun_state::rng_ttl_ram_w)); // text plane RAM + map(0x740000, 0x741fff).rw(this, FUNC(rungun_state::ttl_ram_r), FUNC(rungun_state::ttl_ram_w)); // text plane RAM map(0x7c0000, 0x7c0001).nopw(); // watchdog } @@ -252,7 +256,7 @@ void rungun_state::rungun_sound_map(address_map &map) } -void rungun_state::rungun_k054539_map(address_map &map) +void rungun_state::k054539_map(address_map &map) { map(0x000000, 0x3fffff).rom().region("k054539", 0); } @@ -379,6 +383,7 @@ void rungun_state::machine_start() save_item(NAME(m_sound_status)); save_item(NAME(m_sound_nmi_clk)); //save_item(NAME(m_ttl_vram)); + } void rungun_state::machine_reset() @@ -448,16 +453,18 @@ MACHINE_CONFIG_START(rungun_state::rng) MCFG_K054321_ADD("k054321", "lspeaker", "rspeaker") + // SFX MCFG_DEVICE_ADD("k054539_1", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, rungun_k054539_map) + MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) MCFG_K054539_TIMER_HANDLER(WRITELINE(*this, rungun_state, k054539_nmi_gen)) MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + // BGM, volumes handtuned to make SFXs heardable (still not 100% right tho) MCFG_DEVICE_ADD("k054539_2", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, rungun_k054539_map) - MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) - MCFG_SOUND_ROUTE(1, "rspeaker", 1.0) + MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) + MCFG_SOUND_ROUTE(0, "lspeaker", 0.25) + MCFG_SOUND_ROUTE(1, "rspeaker", 0.25) MACHINE_CONFIG_END // for dual-screen output Run and Gun requires the video de-multiplexer board connected to the Jamma output, this gives you 2 Jamma connectors, one for each screen. diff --git a/src/mame/includes/rungun.h b/src/mame/includes/rungun.h index bcc661c0d07..2f948015b4b 100644 --- a/src/mame/includes/rungun.h +++ b/src/mame/includes/rungun.h @@ -83,19 +83,19 @@ private: bool m_single_screen_mode; uint8_t m_video_mux_bank; - DECLARE_READ16_MEMBER(rng_sysregs_r); - DECLARE_WRITE16_MEMBER(rng_sysregs_w); + DECLARE_READ16_MEMBER(sysregs_r); + DECLARE_WRITE16_MEMBER(sysregs_w); DECLARE_WRITE16_MEMBER(sound_cmd1_w); DECLARE_WRITE16_MEMBER(sound_cmd2_w); DECLARE_WRITE16_MEMBER(sound_irq_w); DECLARE_READ16_MEMBER(sound_status_msb_r); DECLARE_WRITE8_MEMBER(sound_status_w); DECLARE_WRITE8_MEMBER(sound_ctrl_w); - DECLARE_READ16_MEMBER(rng_ttl_ram_r); - DECLARE_WRITE16_MEMBER(rng_ttl_ram_w); - DECLARE_READ16_MEMBER(rng_psac2_videoram_r); - DECLARE_WRITE16_MEMBER(rng_psac2_videoram_w); - DECLARE_READ8_MEMBER(rng_53936_rom_r); + DECLARE_READ16_MEMBER(ttl_ram_r); + DECLARE_WRITE16_MEMBER(ttl_ram_w); + DECLARE_READ16_MEMBER(psac2_videoram_r); + DECLARE_WRITE16_MEMBER(psac2_videoram_w); + DECLARE_READ8_MEMBER(k53936_rom_r); TILE_GET_INFO_MEMBER(ttl_get_tile_info); TILE_GET_INFO_MEMBER(get_rng_936_tile_info); DECLARE_WRITE_LINE_MEMBER(k054539_nmi_gen); @@ -115,7 +115,7 @@ private: INTERRUPT_GEN_MEMBER(rng_interrupt); - void rungun_k054539_map(address_map &map); + void k054539_map(address_map &map); void rungun_map(address_map &map); void rungun_sound_map(address_map &map); }; diff --git a/src/mame/video/rungun.cpp b/src/mame/video/rungun.cpp index 556489d789e..eedf7dd0bfd 100644 --- a/src/mame/video/rungun.cpp +++ b/src/mame/video/rungun.cpp @@ -33,24 +33,24 @@ K055673_CB_MEMBER(rungun_state::sprite_callback) *color = m_sprite_colorbase | (*color & 0x001f); } -READ16_MEMBER(rungun_state::rng_ttl_ram_r) +READ16_MEMBER(rungun_state::ttl_ram_r) { return m_ttl_vram[offset+(m_video_mux_bank*0x1000)]; } -WRITE16_MEMBER(rungun_state::rng_ttl_ram_w) +WRITE16_MEMBER(rungun_state::ttl_ram_w) { COMBINE_DATA(&m_ttl_vram[offset+(m_video_mux_bank*0x1000)]); m_ttl_tilemap[m_video_mux_bank]->mark_tile_dirty(offset / 2); } /* 53936 (PSAC2) rotation/zoom plane */ -READ16_MEMBER(rungun_state::rng_psac2_videoram_r) +READ16_MEMBER(rungun_state::psac2_videoram_r) { return m_psac2_vram[offset+(m_video_mux_bank*0x80000)]; } -WRITE16_MEMBER(rungun_state::rng_psac2_videoram_w) +WRITE16_MEMBER(rungun_state::psac2_videoram_w) { COMBINE_DATA(&m_psac2_vram[offset+(m_video_mux_bank*0x80000)]); m_936_tilemap[m_video_mux_bank]->mark_tile_dirty(offset / 2); @@ -136,7 +136,6 @@ uint32_t rungun_state::screen_update_rng(screen_device &screen, bitmap_ind16 &bi } m_ttl_tilemap[m_current_display_bank]->draw(screen, bitmap, cliprect, 0, 0); - return 0; } |