From 47ee46ab8fdd18330b737add152ca9657bfec05c Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 19 Nov 2024 14:29:00 +0100 Subject: [PATCH] dynduke: correct oki rom mapping --- src/mame/nichibutsu/seicross.cpp | 2 +- src/mame/seibu/dynduke.cpp | 45 +++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/src/mame/nichibutsu/seicross.cpp b/src/mame/nichibutsu/seicross.cpp index be3099dc5a3..fde393fbbed 100644 --- a/src/mame/nichibutsu/seicross.cpp +++ b/src/mame/nichibutsu/seicross.cpp @@ -873,7 +873,7 @@ ROM_END // Based on sectrzona set, with obviously patched MCU program to make it work on a standard 6802. ROM_START( sectrzont ) - ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_REGION( 0x7800, "maincpu", 0 ) ROM_LOAD( "czt_1.bin", 0x0000, 0x1000, CRC(f0a45cb4) SHA1(ab3b8d78e25cdbb2fd6a6c0718ae13767364994d) ) ROM_LOAD( "czt_2.bin", 0x1000, 0x1000, CRC(fea68ddb) SHA1(b9ed0cad9a2ded04bcc7042d975b77be63313070) ) ROM_LOAD( "czt_3.bin", 0x2000, 0x1000, CRC(baad4294) SHA1(e7fc3ccc940de6df8d786c986b602127c9db9ebb) ) diff --git a/src/mame/seibu/dynduke.cpp b/src/mame/seibu/dynduke.cpp index 19a0dd0aea0..4403c6bf9f5 100644 --- a/src/mame/seibu/dynduke.cpp +++ b/src/mame/seibu/dynduke.cpp @@ -9,9 +9,6 @@ To access test mode, reset with both start buttons held. - Coin inputs are handled by the sound CPU, so they don't work with sound - disabled. Just put the game in Free Play mode. - The background layer is 5bpp and I'm not 100% sure the colours are correct on it, although the layer is 5bpp the palette data is 4bpp. My current implementation looks pretty good though I've never seen @@ -61,11 +58,6 @@ FACTORY SETTINGS OFF OFF OFF OFF OFF OFF OFF OFF -------------------------------------------------------------------- - -2008-07 -Dip locations and factory settings verified with dip listing -Also, implemented conditional port for Coin Mode (SW1:1) - ***************************************************************************/ #include "emu.h" @@ -106,6 +98,8 @@ public: void dynduke(machine_config &config); void dbldyn(machine_config &config); + void init_dynduke(); + protected: virtual void video_start() override ATTR_COLD; @@ -325,6 +319,7 @@ void dynduke_state::draw_background(screen_device &screen, bitmap_ind16 &bitmap, { // The transparency / palette handling on the background layer is very strange bitmap_ind16 &bm = m_bg_layer->pixmap(); + // if we're disabled, don't draw if (!m_back_enable) { @@ -381,6 +376,7 @@ void dynduke_state::draw_background(screen_device &screen, bitmap_ind16 &bitmap, uint32_t dynduke_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { screen.priority().fill(0, cliprect); + // Setup the tilemaps m_fg_layer->set_scrolly(0, ((m_scroll_ram[0x11] & 0x30) << 4) + ((m_scroll_ram[0x12] & 0x7f) << 1) + ((m_scroll_ram[0x12] & 0x80) >> 7)); m_fg_layer->set_scrollx(0, ((m_scroll_ram[0x19] & 0x30) << 4) + ((m_scroll_ram[0x1a] & 0x7f) << 1) + ((m_scroll_ram[0x1a] & 0x80) >> 7)); @@ -471,6 +467,7 @@ void dynduke_state::sei80bu_encrypted_full_map(address_map &map) map(0x8000, 0xffff).bankr("seibu_bank1"); } + // Input Ports static INPUT_PORTS_START( dynduke ) @@ -543,6 +540,7 @@ static INPUT_PORTS_START( dynduke ) PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) INPUT_PORTS_END + // Graphics Layouts static const gfx_layout charlayout = @@ -611,6 +609,7 @@ static const gfx_layout fg_layout = 512 }; + // Graphics Decode Information static GFXDECODE_START( gfx_dynduke ) @@ -620,6 +619,7 @@ static GFXDECODE_START( gfx_dynduke ) GFXDECODE_ENTRY( "sprites", 0, spritelayout, 0x300, 32 ) GFXDECODE_END + // Interrupt Generator void dynduke_state::vblank_irq(int state) @@ -631,6 +631,7 @@ void dynduke_state::vblank_irq(int state) } } + // Machine Driver void dynduke_state::dynduke(machine_config &config) @@ -692,6 +693,7 @@ void dynduke_state::dbldyn(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &dynduke_state::masterj_map); } + // ROMs ROM_START( dynduke ) @@ -1058,15 +1060,28 @@ ROM_START( dbldynu ) ROM_LOAD( "61-d.u3", 0x0100, 0x0200, CRC(4c6527d8) SHA1(d775a0c79adbf381b56977daa702d2de2736d862) ) // N82S147AN ROM_END + +void dynduke_state::init_dynduke() +{ + uint8_t *rom = memregion("oki")->base(); + const uint32_t len = memregion("oki")->bytes(); + + // descramble adpcm rom address lines a bit + std::vector buf(len); + memcpy(&buf[0], rom, len); + for (int i = 0; i < len; i++) + rom[i] = buf[(i & 0xfff) | bitswap<4>(i,13,14,15,12) << 12]; +} + } // anonymous namespace // Game Drivers -GAME( 1989, dynduke, 0, dynduke, dynduke, dynduke_state, empty_init, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe, 03SEP89)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, dyndukea, dynduke, dynduke, dynduke, dynduke_state, empty_init, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe, 25JUL89)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, dyndukej, dynduke, dynduke, dynduke, dynduke_state, empty_init, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Japan, 03SEP89)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, dyndukeja, dynduke, dynduke, dynduke, dynduke_state, empty_init, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Japan, 25JUL89)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, dyndukeu, dynduke, dynduke, dynduke, dynduke_state, empty_init, ROT0, "Seibu Kaihatsu (Fabtek license)", "Dynamite Duke (US, 25JUL89)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, dbldynj, 0, dbldyn, dynduke, dynduke_state, empty_init, ROT0, "Seibu Kaihatsu", "The Double Dynamites (Japan, 13NOV89)", MACHINE_SUPPORTS_SAVE ) -GAME( 1989, dbldynu, dbldynj, dynduke, dynduke, dynduke_state, empty_init, ROT0, "Seibu Kaihatsu (Fabtek license)", "The Double Dynamites (US, 13NOV89)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, dynduke, 0, dynduke, dynduke, dynduke_state, init_dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe, 03SEP89)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, dyndukea, dynduke, dynduke, dynduke, dynduke_state, init_dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Europe, 25JUL89)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, dyndukej, dynduke, dynduke, dynduke, dynduke_state, init_dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Japan, 03SEP89)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, dyndukeja, dynduke, dynduke, dynduke, dynduke_state, init_dynduke, ROT0, "Seibu Kaihatsu", "Dynamite Duke (Japan, 25JUL89)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, dyndukeu, dynduke, dynduke, dynduke, dynduke_state, init_dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "Dynamite Duke (US, 25JUL89)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, dbldynj, 0, dbldyn, dynduke, dynduke_state, init_dynduke, ROT0, "Seibu Kaihatsu", "The Double Dynamites (Japan, 13NOV89)", MACHINE_SUPPORTS_SAVE ) +GAME( 1989, dbldynu, dbldynj, dynduke, dynduke, dynduke_state, init_dynduke, ROT0, "Seibu Kaihatsu (Fabtek license)", "The Double Dynamites (US, 13NOV89)", MACHINE_SUPPORTS_SAVE )