summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commitbdfc347128fccd39da680e5cd134d1487bb4303b (patch)
tree8e99b9d6c44d9ceaa4967c63252c00afd9c76fb0
parent9b0876a95fa85f399f6f5404f4676f04d82f3399 (diff)
rungun.cpp: coin counters, improved sound mixing, minor cleanups (nw)
-rw-r--r--src/mame/drivers/rungun.cpp41
-rw-r--r--src/mame/includes/rungun.h16
-rw-r--r--src/mame/video/rungun.cpp9
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;
}