From 2a9cfda0804ef559b963628a4de9e31725e316c1 Mon Sep 17 00:00:00 2001 From: hap Date: Mon, 6 Jan 2025 23:54:22 +0100 Subject: namcos1: assume sound irqs are at vblank end --- src/mame/konami/blockhl.cpp | 2 +- src/mame/namco/namcos1.cpp | 16 ++++++++-------- src/mame/namco/namcos1_m.cpp | 20 +++++++++++--------- src/mame/namco/namcos1_v.cpp | 6 +++++- src/mame/taito/grchamp.cpp | 9 ++++----- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/mame/konami/blockhl.cpp b/src/mame/konami/blockhl.cpp index 9a8eefaf75d..7e8a8fb21e6 100644 --- a/src/mame/konami/blockhl.cpp +++ b/src/mame/konami/blockhl.cpp @@ -138,7 +138,7 @@ uint32_t blockhl_state::screen_update(screen_device &screen, bitmap_ind16 &bitma screen.priority().fill(0, cliprect); m_k052109->tilemap_update(); - m_k052109->tilemap_draw(screen, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0); // tile 2 + m_k052109->tilemap_draw(screen, bitmap, cliprect, 2, TILEMAP_DRAW_OPAQUE, 0); // tile 2 m_k052109->tilemap_draw(screen, bitmap, cliprect, 1, 0, 1); // tile 1 m_k051960->k051960_sprites_draw(bitmap, cliprect, screen.priority(), -1, -1); m_k052109->tilemap_draw(screen, bitmap, cliprect, 0, 0, 0); // tile 0 diff --git a/src/mame/namco/namcos1.cpp b/src/mame/namco/namcos1.cpp index 1350b6c73b0..ecd7ccb4da5 100644 --- a/src/mame/namco/namcos1.cpp +++ b/src/mame/namco/namcos1.cpp @@ -196,10 +196,9 @@ Notes: RAM is cleared on purpose during boot and there is no default. - bakutotu: - The main and sub processors work closely together and the game - quickly runs into trouble when one of them lacks behind. Heavy - sync and overclocking will help but there's a particularly nasty - loop appearing in more than 40 places of the code: + The main and sub processors work closely together and the game quickly runs into + trouble when one of them lags behind. Heavy sync and overclocking will help but + there's a particularly nasty loop appearing in more than 40 places of the code: 1) kick the watchdog 2) raise a flag @@ -419,11 +418,12 @@ void namcos1_state::virtual_map(address_map &map) void namcos1_state::sound_map(address_map &map) { - map(0x0000, 0x3fff).bankr(m_soundbank); /* Banked ROMs */ + map(0x0000, 0x3fff).bankr(m_soundbank); /* Banked ROMs */ map(0x4000, 0x4001).rw("ymsnd", FUNC(ym2151_device::status_r), FUNC(ym2151_device::write)); - map(0x5000, 0x53ff).rw("namco", FUNC(namco_cus30_device::namcos1_cus30_r), FUNC(namco_cus30_device::namcos1_cus30_w)).mirror(0x400); /* PSG ( Shared ) */ - map(0x7000, 0x77ff).ram().share(m_triram); + map(0x5000, 0x53ff).rw("namco", FUNC(namco_cus30_device::namcos1_cus30_r), FUNC(namco_cus30_device::namcos1_cus30_w)).mirror(0xc00); /* PSG ( Shared ) */ + map(0x7000, 0x77ff).ram().share(m_triram).mirror(0x800); map(0x8000, 0x9fff).ram(); /* Sound RAM 3 */ + map(0xa000, 0xa000).nopr(); map(0xc000, 0xc001).w(FUNC(namcos1_state::sound_bankswitch_w)); /* ROM bank selector */ map(0xd001, 0xd001).w(m_c117, FUNC(namco_c117_device::sound_watchdog_w)); map(0xe000, 0xe000).w(FUNC(namcos1_state::audiocpu_irq_ack_w)); @@ -493,7 +493,7 @@ static INPUT_PORTS_START( ns1 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) /* OUT:coin counter 2 */ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_F1) // service switch from the edge connector + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Service Button") PORT_CODE(KEYCODE_F1) // service switch from the edge connector PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END diff --git a/src/mame/namco/namcos1_m.cpp b/src/mame/namco/namcos1_m.cpp index 83e9e63d1a2..a55b229d54e 100644 --- a/src/mame/namco/namcos1_m.cpp +++ b/src/mame/namco/namcos1_m.cpp @@ -132,7 +132,7 @@ CPU #0 PC e3d4: keychip read 0003 [AND #$37 = key no.] */ u8 namcos1_state::key_type1_r(offs_t offset) { -// logerror("%s: keychip read %04x\n", machine().describe_context(), offset); + //logerror("%s: keychip read %04x\n", machine().describe_context(), offset); if (offset < 3) { @@ -163,7 +163,7 @@ u8 namcos1_state::key_type1_r(offs_t offset) void namcos1_state::key_type1_w(offs_t offset, u8 data) { -// logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); + //logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); if (offset < 4) m_key[offset] = data; @@ -315,7 +315,7 @@ CPU #0 PC e574: keychip read 0001 u8 namcos1_state::key_type2_r(offs_t offset) { -// logerror("%s: keychip read %04x\n", machine().describe_context(), offset); + //logerror("%s: keychip read %04x\n", machine().describe_context(), offset); m_key_numerator_high_word = 0; @@ -334,7 +334,7 @@ u8 namcos1_state::key_type2_r(offs_t offset) void namcos1_state::key_type2_w(offs_t offset, u8 data) { -// logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); + //logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); if (offset < 5) { @@ -356,7 +356,7 @@ void namcos1_state::key_type2_w(offs_t offset, u8 data) m_key_reminder = 0x0000; } -// logerror("calculating division: %08x / %04x = %04x, %04x\n", n, d, key_quotient, m_key_reminder); + //logerror("calculating division: %08x / %04x = %04x, %04x\n", n, d, key_quotient, m_key_reminder); m_key_numerator_high_word = (m_key[2] << 8) | m_key[3]; } @@ -441,7 +441,7 @@ CPU #0 PC e45a: keychip read 0030 [discarded] u8 namcos1_state::key_type3_r(offs_t offset) { -// logerror("%s: keychip read %04x\n", machine().describe_context(), offset); + //logerror("%s: keychip read %04x\n", machine().describe_context(), offset); /* I need to handle blastoff's read from 0858. The game previously writes to 0858, using it as temporary storage, so maybe it expects to act as RAM, however @@ -465,7 +465,7 @@ u8 namcos1_state::key_type3_r(offs_t offset) void namcos1_state::key_type3_w(offs_t offset, u8 data) { -// logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); + //logerror("%s: keychip write %04x=%02x\n", machine().describe_context(), offset, data); m_key[(offset & 0x70) >> 4] = data; } @@ -493,7 +493,8 @@ void namcos1_state::sound_bankswitch_w(u8 data) void namcos1_state::subres_w(int state) { -// logerror("reset control %s %02x\n",machine().describe_context(),data); + //logerror("reset control %s %02x\n",machine().describe_context(),data); + if (state != m_reset) { m_mcu_patch_data = 0; @@ -593,6 +594,7 @@ void namcos1_state::mcu_bankswitch_w(u8 data) void namcos1_state::mcu_patch_w(u8 data) { //logerror("mcu C000 write %s data=%02x\n",machine().describe_context(),data); + if (m_mcu_patch_data == 0xa6) return; m_mcu_patch_data = data; m_triram[0] = data; @@ -608,7 +610,7 @@ void namcos1_state::mcu_patch_w(u8 data) void namcos1_state::driver_init() { // bit 16 of the address is inverted for PRG7 (and bits 17,18 just not connected) - for (int i = 0x380000;i < 0x400000;i++) + for (int i = 0x380000; i < 0x400000; i++) { if ((i & 0x010000) == 0) { diff --git a/src/mame/namco/namcos1_v.cpp b/src/mame/namco/namcos1_v.cpp index 1b5e8250d02..72e9cd5afd6 100644 --- a/src/mame/namco/namcos1_v.cpp +++ b/src/mame/namco/namcos1_v.cpp @@ -214,7 +214,7 @@ u32 namcos1_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, co bitmap.fill(m_c116->black_pen(), cliprect); /* berabohm uses asymmetrical visibility windows to iris on the character */ - int i = m_c116->get_reg(0) - 1; // min x + int i = m_c116->get_reg(0) - 1; // min x if (new_clip.min_x < i) new_clip.min_x = i; i = m_c116->get_reg(1) - 1 - 1; // max x if (new_clip.max_x > i) new_clip.max_x = i; @@ -259,8 +259,12 @@ void namcos1_state::screen_vblank(int state) m_copy_sprites = false; } + m_maincpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); m_subcpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); + } + else + { m_audiocpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE); m_mcu->set_input_line(HD6301_IRQ1_LINE, ASSERT_LINE); } diff --git a/src/mame/taito/grchamp.cpp b/src/mame/taito/grchamp.cpp index 88d1199d091..ffeed5ff5ef 100644 --- a/src/mame/taito/grchamp.cpp +++ b/src/mame/taito/grchamp.cpp @@ -110,7 +110,7 @@ void grchamp_state::machine_start() save_item(NAME(m_collmode)); } - void grchamp_state::machine_reset() +void grchamp_state::machine_reset() { m_soundnmi->in_w<0>(0); // disable sound nmi /* if the coin system is 1 way, lock Coin B (Page 40) */ @@ -365,13 +365,11 @@ void grchamp_state::cpu1_outputs_w(offs_t offset, uint8_t data) uint8_t grchamp_state::get_pc3259_bits(int offs) { - int bits; - /* force a partial update to the current position */ m_screen->update_partial(m_screen->vpos()); /* get the relevant 4 bits */ - bits = (m_collide >> (offs*4)) & 0x0f; + uint8_t bits = (m_collide >> (offs*4)) & 0x0f; /* replicate to both nibbles */ return bits | (bits << 4); @@ -440,6 +438,7 @@ uint8_t grchamp_state::main_to_sub_comm_r(offs_t offset) * Sound port handlers * *************************************/ + TIMER_CALLBACK_MEMBER(grchamp_state::soundlatch_w_cb) { if (m_soundlatch_flag && (m_soundlatch_data != param)) @@ -949,6 +948,6 @@ ROM_END * *************************************/ -GAMEL( 1981, grchamp, 0, grchamp, grchamp, grchamp_state, empty_init, ROT270, "Taito", "Grand Champion (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_grchamp ) +GAMEL( 1981, grchamp, 0, grchamp, grchamp, grchamp_state, empty_init, ROT270, "Taito", "Grand Champion (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_grchamp ) GAMEL( 1981, grchampa, grchamp, grchamp, grchamp, grchamp_state, empty_init, ROT270, "Taito", "Grand Champion (set 2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_grchamp ) // uses different ports. Bad dump? GAMEL( 1981, grchampb, grchamp, grchamp, grchamp, grchamp_state, empty_init, ROT270, "Taito", "Grand Champion (set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_grchamp ) -- cgit v1.2.3