From 8fdb48c2032623f21d3b950752ef45a1ee58a81e Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 27 Feb 2025 18:10:26 +0100 Subject: [PATCH] New working clones ------------------ Multi Champ (World, ver. 9.6 [Manuel Assoni] New clones marked not working ----------------------------- Mahjong Electron Base (parts 2 & 3, Japan bootleg) [little0] --- src/mame/dynax/dynax.cpp | 15 ++ src/mame/mame.lst | 2 + src/mame/misc/esd16.cpp | 467 ++++++++++++++++++++++++++++++++------ src/mame/misc/esd16.h | 111 --------- src/mame/misc/esd16_v.cpp | 197 ---------------- 5 files changed, 417 insertions(+), 375 deletions(-) delete mode 100644 src/mame/misc/esd16.h delete mode 100644 src/mame/misc/esd16_v.cpp diff --git a/src/mame/dynax/dynax.cpp b/src/mame/dynax/dynax.cpp index 598cb3278b1..47fdf2e69a8 100644 --- a/src/mame/dynax/dynax.cpp +++ b/src/mame/dynax/dynax.cpp @@ -5937,6 +5937,20 @@ ROM_START( mjelctrb ) ROM_LOAD( "eb-02.rom", 0x100000, 0x080000, CRC(e1f1b431) SHA1(04a612aff4c30cb8ea741f228bfa7e4289acfee8) ) ROM_END +ROM_START( mjelct3bl ) + ROM_REGION( 0x50000, "maincpu", 0 ) // Z80 Code + ROM_LOAD( "rom.u3", 0x00000, 0x20000, CRC(2cc0bbd8) SHA1(0653de340d470d209649b82b1844c3c3da5c545a) ) + ROM_CONTINUE( 0x00000, 0x20000 ) + ROM_RELOAD( 0x10000, 0x08000 ) + ROM_CONTINUE( 0x28000, 0x08000 ) + ROM_CONTINUE( 0x20000, 0x08000 ) + ROM_CONTINUE( 0x18000, 0x08000 ) + + ROM_REGION( 0x200000, "blitter", 0 ) // blitter data, not dumped for this set + ROM_LOAD( "eb-01.rom", 0x000000, 0x100000, BAD_DUMP CRC(e5c41448) SHA1(b8322e32b0cb3d771316c9c4f7be91de6e422a24) ) + ROM_LOAD( "eb-02.rom", 0x100000, 0x080000, BAD_DUMP CRC(e1f1b431) SHA1(04a612aff4c30cb8ea741f228bfa7e4289acfee8) ) +ROM_END + /*************************************************************************** Mahjong Electromagnetic Base (Dynax, 1989) @@ -7067,6 +7081,7 @@ GAME( 1989, mjembase, mjelctrn, mjembase, mjembase, dynax_adpcm_state, init_ GAME( 1990, mjelct3, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong Electron Base (parts 2 & 3, Japan set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1990, mjelct3a, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3a, ROT180, "Dynax", "Mahjong Electron Base (parts 2 & 3, Japan set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1993, mjelctrb, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "bootleg", "Mahjong Electron Base (parts 2 & 4, Japan bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, mjelct3bl, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "bootleg", "Mahjong Electron Base (parts 2 & 3, Japan bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 1990, majxtal7, 7jigen, neruton, majxtal7, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // reuses a subset of 7jigen assets GAME( 1990, neruton, 0, neruton, neruton, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax / Yukiyoshi Tokoro", "Mahjong Neruton Haikujiradan (Japan, Rev. B?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) GAME( 1990, nerutona, neruton, neruton, nerutona, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax / Yukiyoshi Tokoro", "Mahjong Neruton Haikujiradan (Japan, Rev. A?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a028637a4c5..d4afd18c6b9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -17636,6 +17636,7 @@ mjdialq2 mjdialq2a mjelct3 mjelct3a +mjelct3bl mjelctrb mjelctrn mjembase @@ -30277,6 +30278,7 @@ mchampdx mchampdxa mchampdxb multchmp +multchmp25 multchmpa multchmpk swatpolc diff --git a/src/mame/misc/esd16.cpp b/src/mame/misc/esd16.cpp index 8f00328e5e3..be6b197fe51 100644 --- a/src/mame/misc/esd16.cpp +++ b/src/mame/misc/esd16.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:Luca Elia, David Haywood +// copyright-holders: Luca Elia, David Haywood + /*************************************************************************** -= ESD 16 Bit Games =- @@ -66,15 +67,298 @@ ToDo: ***************************************************************************/ #include "emu.h" -#include "esd16.h" + +#include "decospr.h" #include "cpu/m68000/m68000.h" #include "cpu/z80/z80.h" +#include "machine/eepromser.h" +#include "machine/gen_latch.h" #include "sound/okim6295.h" #include "sound/ymopl.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" +#include "tilemap.h" + + +namespace { + +class esd16_state : public driver_device +{ +public: + esd16_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_vram(*this, "vram_%u", 0U), + m_scroll(*this, "scroll_%u", 0U), + m_spriteram(*this, "spriteram"), + m_layersize(*this, "head_layersize"), + m_platform_x(*this, "platform_x"), + m_platform_y(*this, "platform_y"), + m_audiobank(*this, "audiobank"), + m_io_eepromout(*this, "EEPROMOUT"), + m_maincpu(*this, "maincpu"), + m_audiocpu(*this, "audiocpu"), + m_gfxdecode(*this, "gfxdecode"), + m_sprgen(*this, "spritegen"), + m_eeprom(*this, "eeprom"), + m_soundlatch(*this, "soundlatch") + { } + + void esd16_nosound(machine_config &config) ATTR_COLD; + void esd16(machine_config &config) ATTR_COLD; + void jumppop(machine_config &config) ATTR_COLD; + void tangtang(machine_config &config) ATTR_COLD; + void mchampdx(machine_config &config) ATTR_COLD; + void hedpanio(machine_config &config) ATTR_COLD; + void hedpanic(machine_config &config) ATTR_COLD; + void fantstry(machine_config &config) ATTR_COLD; + void fantstrya(machine_config &config) ATTR_COLD; + +protected: + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; + virtual void video_start() override ATTR_COLD; + +private: + required_shared_ptr_array m_vram; + required_shared_ptr_array m_scroll; + required_shared_ptr m_spriteram; + required_shared_ptr m_layersize; + required_shared_ptr m_platform_x; + required_shared_ptr m_platform_y; + + optional_memory_bank m_audiobank; + optional_ioport m_io_eepromout; + + tilemap_t *m_tilemap_16x16[2]{}; + tilemap_t *m_tilemap[2]{}; + u32 m_tilemap_color[2]{}; + + required_device m_maincpu; + optional_device m_audiocpu; + required_device m_gfxdecode; + optional_device m_sprgen; + optional_device m_eeprom; + optional_device m_soundlatch; + + void sound_command_w(u8 data); + void platform_w(u16 data); + u8 eeprom_r(); + void eeprom_w(u8 data); + void sound_rombank_w(u8 data); + template void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0); + void tilemap0_color_w(u16 data); + void tilemap0_color_jumppop_w(u16 data); + template TILE_GET_INFO_MEMBER(get_tile_info); + template TILE_GET_INFO_MEMBER(get_tile_info_16x16); + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + DECOSPR_PRIORITY_CB_MEMBER(pri_callback); + void fantstrya_map(address_map &map) ATTR_COLD; + void hedpanic_map(address_map &map) ATTR_COLD; + void jumppop_map(address_map &map) ATTR_COLD; + void mchampdx_map(address_map &map) ATTR_COLD; + void multchmp_map(address_map &map) ATTR_COLD; + void sound_io_map(address_map &map) ATTR_COLD; + void sound_map(address_map &map) ATTR_COLD; + void tangtang_map(address_map &map) ATTR_COLD; + + void io_area_dsw(address_map &map, u32 base) ATTR_COLD; + void io_area_eeprom(address_map &map, u32 base) ATTR_COLD; + void palette_area(address_map &map, u32 base) ATTR_COLD; + void sprite_area(address_map &map, u32 base) ATTR_COLD; + void vid_attr_area(address_map &map, u32 base) ATTR_COLD; + void vram_area(address_map &map, u32 base) ATTR_COLD; +}; + + +/*************************************************************************** + +Note: if MAME_DEBUG is defined, pressing Z with: + + Q / W Shows Layer 0 / 1 + A Shows Sprites + + Keys can be used together! + + + [ 2 Scrolling Layers ] + + Tile Size: 8 x 8 x 8 + Color Codes: 1 per Layer (banked for Layer 0) + Layer Size (tiles) : 128 x 64 + Layer Size (pixels): 1024 x 512 + + [ 256 Sprites ] + + Sprites are made of 16 x 16 x 5 tiles. Size can vary from 1 to + 8 tiles vertically, while their width is always 1 tile. + + [ Priorities ] + + The game only uses this scheme: + + Back -> Front: Layer 0, Layer 1, Sprites + +***************************************************************************/ + + +/*************************************************************************** + + Tilemaps + + Offset: Bits: Value: + + 0.w Code + + Color code: layer 0 (backmost) can bank at every 256 colors, + layer 1 uses the first 256. + +***************************************************************************/ + +template +TILE_GET_INFO_MEMBER(esd16_state::get_tile_info) +{ + const u16 code = m_vram[Layer][tile_index]; + tileinfo.set(0, + code, + m_tilemap_color[Layer], + 0); +} + +template +TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_16x16) +{ + const u16 code = m_vram[Layer][tile_index]; + tileinfo.set(1, + code, + m_tilemap_color[Layer], + 0); +} + + +void esd16_state::tilemap0_color_w(u16 data) +{ + m_tilemap_color[0] = data & 0x03; + m_tilemap[0]->mark_all_dirty(); + m_tilemap_16x16[0]->mark_all_dirty(); + + bool const flip = BIT(data, 7); + flip_screen_set(flip); + m_sprgen->set_flip_screen(flip); +} + +void esd16_state::tilemap0_color_jumppop_w(u16 data) +{ + // TODO + m_tilemap_color[0] = 2; + m_tilemap_color[1] = 1; + + bool const flip = BIT(data, 7); + flip_screen_set(flip); + m_sprgen->set_flip_screen(flip); +} + + +/*************************************************************************** + + + Video Hardware Init + + +***************************************************************************/ + + +void esd16_state::video_start() +{ + m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); + m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); + + // swatpolc changes tilemap 0 to 16x16 at various times + m_tilemap_16x16[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info_16x16<0>)), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); + + // hedpanic changes tilemap 1 to 16x16 at various times + m_tilemap_16x16[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info_16x16<1>)), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); + + m_tilemap[0]->set_scrolldx(-0x60 + 2, -0x60); + m_tilemap[1]->set_scrolldx(-0x60, -0x60 + 2); + m_tilemap_16x16[0]->set_scrolldx(-0x60 + 2, -0x60); + m_tilemap_16x16[1]->set_scrolldx(-0x60, -0x60 + 2); + + m_tilemap[1]->set_transparent_pen(0x00); + m_tilemap_16x16[1]->set_transparent_pen(0x00); +} + + +/*************************************************************************** + + + Screen Drawing + + +***************************************************************************/ + +u32 esd16_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + int layers_ctrl = -1; + + screen.priority().fill(0, cliprect); + +#ifdef MAME_DEBUG +if (machine().input().code_pressed(KEYCODE_Z)) +{ + int msk = 0; + if (machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (machine().input().code_pressed(KEYCODE_A)) msk |= 4; + if (msk != 0) layers_ctrl &= msk; +} +#endif + + if (layers_ctrl & 1) + { + if (m_layersize[0] & 0x0001) + { + m_tilemap_16x16[0]->set_scrollx(0, m_scroll[0][0]); + m_tilemap_16x16[0]->set_scrolly(0, m_scroll[0][1]); + m_tilemap_16x16[0]->draw(screen, bitmap, cliprect, 0, 0); + } + else + { + m_tilemap[0]->set_scrollx(0, m_scroll[0][0]); + m_tilemap[0]->set_scrolly(0, m_scroll[0][1]); + m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); + } + } + else + { + bitmap.fill(0, cliprect); + } + + + if (layers_ctrl & 2) + { + if (m_layersize[0] & 0x0002) + { + m_tilemap_16x16[1]->set_scrollx(0, m_scroll[1][0]); + m_tilemap_16x16[1]->set_scrolly(0, m_scroll[1][1]); + m_tilemap_16x16[1]->draw(screen, bitmap, cliprect, 0, 1); + } + else + { + m_tilemap[1]->set_scrollx(0, m_scroll[1][0]); + m_tilemap[1]->set_scrolly(0, m_scroll[1][1]); + m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 1); + } + + } + + if (layers_ctrl & 4) m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram, 0x400); + +// popmessage("%04x %04x %04x %04x %04x",head_unknown1[0],head_layersize[0],head_unknown3[0],head_unknown4[0],head_unknown5[0]); + return 0; +} /*************************************************************************** @@ -687,8 +971,8 @@ void esd16_state::machine_start() { if (m_audiobank) { - u8* AUDIO = memregion("audiocpu")->base(); - m_audiobank->configure_entries(0, 16, &AUDIO[0x0000], 0x4000); + u8* audiorom = memregion("audiocpu")->base(); + m_audiobank->configure_entries(0, 16, &audiorom[0x0000], 0x4000); } save_item(NAME(m_tilemap_color)); @@ -730,7 +1014,7 @@ void esd16_state::esd16_nosound(machine_config &config) m_sprgen->set_flipallx(1); GFXDECODE(config, m_gfxdecode, "palette", gfx_esd16); - PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x1000/2); + PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x1000 / 2); } void esd16_state::fantstry(machine_config& config) @@ -759,19 +1043,19 @@ void esd16_state::esd16(machine_config& config) { esd16_nosound(config); - Z80(config, m_audiocpu, XTAL(16'000'000)/4); // 4MHz + Z80(config, m_audiocpu, XTAL(16'000'000) / 4); // 4MHz m_audiocpu->set_addrmap(AS_PROGRAM, &esd16_state::sound_map); m_audiocpu->set_addrmap(AS_IO, &esd16_state::sound_io_map); - m_audiocpu->set_periodic_int(FUNC(esd16_state::nmi_line_pulse), attotime::from_hz(32*60)); // IRQ By Main CPU + m_audiocpu->set_periodic_int(FUNC(esd16_state::nmi_line_pulse), attotime::from_hz(32 * 60)); // IRQ By Main CPU // sound hardware SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, 0); - YM3812(config, "ymsnd", XTAL(16'000'000)/4).add_route(ALL_OUTPUTS, "mono", 0.30); // 4MHz + YM3812(config, "ymsnd", XTAL(16'000'000) / 4).add_route(ALL_OUTPUTS, "mono", 0.30); // 4MHz - OKIM6295(config, "oki", XTAL(16'000'000)/16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); // 1MHz + OKIM6295(config, "oki", XTAL(16'000'000) / 16, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.60); // 1MHz } void esd16_state::jumppop(machine_config &config) @@ -782,14 +1066,14 @@ void esd16_state::jumppop(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &esd16_state::jumppop_map); - m_audiocpu->set_clock(XTAL(14'000'000)/4); // 3.5MHz - Verified + m_audiocpu->set_clock(XTAL(14'000'000) / 4); // 3.5MHz - Verified m_sprgen->set_info(gfx_jumppop_spr); m_gfxdecode->set_info(gfx_jumppop); - subdevice("ymsnd")->set_clock(XTAL(14'000'000)/4); // 3.5MHz - Verified + subdevice("ymsnd")->set_clock(XTAL(14'000'000) / 4); // 3.5MHz - Verified - subdevice("oki")->set_clock(XTAL(14'000'000)/16); // 875kHz - Verified + subdevice("oki")->set_clock(XTAL(14'000'000) / 16); // 875kHz - Verified } // The ESD 05-28-99 PCB adds an EEPROM @@ -891,7 +1175,7 @@ MULTCHMP.U39 -/ MX27C2000 ***************************************************************************/ -ROM_START( multchmp ) +ROM_START( multchmp25 ) ROM_REGION( 0x080000, "maincpu", 0 ) // 68000 Code ROM_LOAD16_BYTE( "esd2.cu02", 0x000000, 0x040000, CRC(2d1b098a) SHA1(c2f3991f02c611c258219da2c61cad22c9a21f7d) ) ROM_LOAD16_BYTE( "esd1.cu03", 0x000001, 0x040000, CRC(10974063) SHA1(854b38b4d4cb529e9928aae4212c86a220615e04) ) @@ -908,12 +1192,12 @@ ROM_START( multchmp ) ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 ROM_LOAD32_BYTE( "esd9.fu28", 0x000000, 0x080000, CRC(6652c04a) SHA1(178e1d42847506d869ef79db2f7e10df05e9ef76) ) - ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) ) ROM_LOAD32_BYTE( "esd7.fu26", 0x000001, 0x080000, CRC(a783a003) SHA1(1ff61a049485c5b599c458a8bf7f48027d14f8e0) ) + ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) ) ROM_LOAD32_BYTE( "esd5.fu27", 0x000003, 0x080000, CRC(299f32c2) SHA1(274752444f6ddba16eeefc02c3e78525c079b3d8) ) ROM_LOAD32_BYTE( "esd10.fu31", 0x200000, 0x080000, CRC(d815974b) SHA1(3e528a5df79fa7dc0f38b0ee7f2f3a0ebc97a369) ) - ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) ) ROM_LOAD32_BYTE( "esd8.fu30", 0x200001, 0x080000, CRC(22861af2) SHA1(1e74e85517cb8fd5fb4bda6e9d9d54046e31f653) ) + ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) ) ROM_LOAD32_BYTE( "esd6.fu32", 0x200003, 0x080000, CRC(e2689bb2) SHA1(1da9b1f7335d5c2d1c2f8353fccf91c0109d2e9d) ) ROM_REGION( 0x40000, "oki", 0 ) // Samples @@ -937,12 +1221,12 @@ ROM_START( multchmpk ) ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 ROM_LOAD32_BYTE( "multchmp.u31", 0x000000, 0x080000, CRC(b1e4e9e3) SHA1(1a7393e9073b028b4170393b3788ad8cb86c0c78) ) - ROM_LOAD32_BYTE( "multchmp.u33", 0x000002, 0x080000, CRC(e4c0ec96) SHA1(74152108e4d05f4aff9d38919f212fcb8c87cef3) ) ROM_LOAD32_BYTE( "multchmp.u29", 0x000001, 0x080000, CRC(01bd1399) SHA1(b717ccffe0af92a42a0879736d34d3ad71840233) ) + ROM_LOAD32_BYTE( "multchmp.u33", 0x000002, 0x080000, CRC(e4c0ec96) SHA1(74152108e4d05f4aff9d38919f212fcb8c87cef3) ) ROM_LOAD32_BYTE( "multchmp.u27", 0x000003, 0x080000, CRC(dc42704e) SHA1(58a04a47ffc6d6ae0e4d49e466b1c58b37ad741a) ) ROM_LOAD32_BYTE( "multchmp.u32", 0x200000, 0x080000, CRC(f05cb5b4) SHA1(1b33e60942238e39d61ae59e9317b99e83595ab1) ) - ROM_LOAD32_BYTE( "multchmp.u34", 0x200002, 0x080000, CRC(bffaaccc) SHA1(d9ab248e2c7c639666e3717cfc5d8c8468a1bde2) ) ROM_LOAD32_BYTE( "multchmp.u30", 0x200001, 0x080000, CRC(c6b4cc18) SHA1(d9097b85584272cfe4989a40d622ef1feeee6775) ) + ROM_LOAD32_BYTE( "multchmp.u34", 0x200002, 0x080000, CRC(bffaaccc) SHA1(d9ab248e2c7c639666e3717cfc5d8c8468a1bde2) ) ROM_LOAD32_BYTE( "multchmp.u28", 0x200003, 0x080000, CRC(449991fa) SHA1(fd93e420a04cb8bea5421aa9cbe079bd3e7d4924) ) ROM_REGION( 0x40000, "oki", 0 ) // Samples @@ -966,19 +1250,62 @@ ROM_START( multchmpa ) // Also found on a ESD 10-10-98 PCB which looks identical ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 ROM_LOAD32_BYTE( "esd9.fu28", 0x000000, 0x080000, CRC(a3cfe895) SHA1(a8dc0d5d9e64d4c5112177b8f20b5bdb86ca73af) ) - ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(d3c1855e) SHA1(bb547d4a45a745e9ae4a6727087cdf325105de90) ) ROM_LOAD32_BYTE( "esd7.fu26", 0x000001, 0x080000, CRC(042d59ff) SHA1(8e45a4757e07d8aaf50b151d8849c1a27424e64b) ) + ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, CRC(d3c1855e) SHA1(bb547d4a45a745e9ae4a6727087cdf325105de90) ) ROM_LOAD32_BYTE( "esd5.fu27", 0x000003, 0x080000, CRC(ed5b4e58) SHA1(82c3ee9e2525c0b370a29d5560c21ec6380d1a43) ) ROM_LOAD32_BYTE( "esd10.fu31", 0x200000, 0x080000, CRC(396d77b6) SHA1(f22449a7f9f50e172e36db4f399c14e527409884) ) - ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(a68848a8) SHA1(915239a961d76af6a1a567eb89b1569f158e714e) ) ROM_LOAD32_BYTE( "esd8.fu30", 0x200001, 0x080000, CRC(fa8cd2d3) SHA1(ddc1b98867e6d2eee458bf35a933e7cdc59f4c7e) ) + ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, CRC(a68848a8) SHA1(915239a961d76af6a1a567eb89b1569f158e714e) ) ROM_LOAD32_BYTE( "esd6.fu32", 0x200003, 0x080000, CRC(97fde7b1) SHA1(b3610f6fcc1367ff079dc01121c86bc1e1f4c7a2) ) ROM_REGION( 0x40000, "oki", 0 ) // Samples ROM_LOAD( "esd4.su08", 0x00000, 0x20000, CRC(6e741fcd) SHA1(742e0952916c00f67dd9f8d01e721a9a538d2fc4) ) ROM_END +// this runs on a slightly newer PCB: ESD 05-17-99 +// there is a string about EEPROM write error but there isn't any on PCB +ROM_START( multchmp ) + ROM_REGION( 0x080000, "maincpu", 0 ) // 68000 Code + ROM_LOAD16_BYTE( "esd7.cu02", 0x000000, 0x040000, CRC(e25cbbfe) SHA1(fa142489a2171fb94b62d2635a1da5944ddde0cb) ) + ROM_LOAD16_BYTE( "esd6.cu03", 0x000001, 0x040000, CRC(e7f837f9) SHA1(f31bf6c99b4f9be7bf9bb7ba04cf354ff070ad7f) ) + ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code + ROM_LOAD( "esd3.su06", 0x00000, 0x20000, CRC(7c178bd7) SHA1(8754d3c70d9b2bf369a5ce0cce4cc0696ed22750) ) + + ROM_REGION( 0x180000, "spr", 0 ) // Sprites, 16x16x5 + ROM_LOAD16_BYTE( "esd17.ju06", 0x000000, 0x040000, CRC(a69d4399) SHA1(06ae6c07cc6b7313e2e2aa3b994f7532d6994e1b) ) + ROM_LOAD16_BYTE( "esd16.ju05", 0x000001, 0x040000, CRC(e670a6da) SHA1(47cbe45b6d5d0ca70d0c6787d589dde5d14fdba4) ) + ROM_LOAD16_BYTE( "esd15.ju04", 0x080000, 0x040000, CRC(88b7a97c) SHA1(0a57ec8f6a44c8e3aa3ef35499a415d6a2b7eb16) ) + ROM_LOAD16_BYTE( "esd14.ju03", 0x080001, 0x040000, CRC(a6122225) SHA1(cbcf2b31c4c011daba21f0ae5fd3be63c9a87c00) ) + ROM_LOAD16_BYTE( "esd13.ju07", 0x100000, 0x040000, CRC(22071594) SHA1(c79102b250780d1da8c290d065d61fbbfa193366) ) + + ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 + ROM_LOAD( "mx29f1610ml.fu27_fu32", 0x000000, 0x200000, NO_DUMP ) // These 2 ROMs are soldered and weren't dumped. Using the ones from the other sets for now. + ROM_LOAD( "mx29f1610ml.fu28_fu31", 0x000000, 0x200000, NO_DUMP ) + ROM_LOAD32_BYTE( "esd9.fu28", 0x000000, 0x080000, BAD_DUMP CRC(6652c04a) SHA1(178e1d42847506d869ef79db2f7e10df05e9ef76) ) + ROM_LOAD32_BYTE( "esd7.fu26", 0x000001, 0x080000, BAD_DUMP CRC(a783a003) SHA1(1ff61a049485c5b599c458a8bf7f48027d14f8e0) ) + ROM_LOAD32_BYTE( "esd11.fu29", 0x000002, 0x080000, BAD_DUMP CRC(9bafd8ee) SHA1(db18be05431d4b6d4207e19fa4ed8701621aaa19) ) + ROM_LOAD32_BYTE( "esd5.fu27", 0x000003, 0x080000, BAD_DUMP CRC(299f32c2) SHA1(274752444f6ddba16eeefc02c3e78525c079b3d8) ) + ROM_LOAD32_BYTE( "esd10.fu31", 0x200000, 0x080000, BAD_DUMP CRC(d815974b) SHA1(3e528a5df79fa7dc0f38b0ee7f2f3a0ebc97a369) ) + ROM_LOAD32_BYTE( "esd8.fu30", 0x200001, 0x080000, BAD_DUMP CRC(22861af2) SHA1(1e74e85517cb8fd5fb4bda6e9d9d54046e31f653) ) + ROM_LOAD32_BYTE( "esd12.fu33", 0x200002, 0x080000, BAD_DUMP CRC(c6b86001) SHA1(11a63b56df30ab7b85ce4568d2a24e96a125735a) ) + ROM_LOAD32_BYTE( "esd6.fu32", 0x200003, 0x080000, BAD_DUMP CRC(e2689bb2) SHA1(1da9b1f7335d5c2d1c2f8353fccf91c0109d2e9d) ) + + ROM_REGION( 0x40000, "oki", 0 ) // Samples + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(6e741fcd) SHA1(742e0952916c00f67dd9f8d01e721a9a538d2fc4) ) + + ROM_REGION( 0x1800, "plds", ROMREGION_ERASE00 ) // all read-protected + ROM_LOAD( "palce22v10h-25pc-4.cu04", 0x0000, 0x02dd, NO_DUMP ) + ROM_LOAD( "palce22v10h-25pc-4.cu05", 0x0300, 0x02dd, NO_DUMP ) + ROM_LOAD( "palce22v10h-25pc-4.du05", 0x0600, 0x02dd, NO_DUMP ) + ROM_LOAD( "palce22v10h-25pc-4.fu01", 0x0900, 0x02dd, NO_DUMP ) + ROM_LOAD( "palce16v8h-25.du03", 0x0c00, 0x0117, NO_DUMP ) + ROM_LOAD( "palce16v8h-25.ru27", 0x0e00, 0x0117, NO_DUMP ) + ROM_LOAD( "palce16v8h-25.fu01", 0x1000, 0x0117, NO_DUMP ) + ROM_LOAD( "palce16v8h-25.su07", 0x1200, 0x0117, NO_DUMP ) + ROM_LOAD( "a40mx04-f-pl84.bu01", 0x1400, 0x0200, NO_DUMP ) // size wrong + ROM_LOAD( "a40mx04-f-pl84.du16", 0x1600, 0x0200, NO_DUMP ) // size wrong +ROM_END /* @@ -1040,10 +1367,10 @@ ROM_START( mchampdx ) ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(1b22568c) SHA1(5458e1a798357a6785f8ea1fe9da37768cd4761d) ) - // this has additional copyright sprites in the flash roms for the (c)2000 message.. + // this has additional copyright sprites in the flash ROMs for the (c)2000 message.. ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "ver0106_ju01.bin", 0x200000, 0x200000, CRC(55841d90) SHA1(52ba3ee9393dcddf28e2d20a50151bc739faaaa4) ) - ROM_LOAD( "ver0106_ju02.bin", 0x000000, 0x200000, CRC(b27a4977) SHA1(b7f94bb04d0046538b3938335e6b0cce330ad79c) ) + ROM_LOAD( "ver0106_ju02.bin", 0x000000, 0x200000, CRC(b27a4977) SHA1(b7f94bb04d0046538b3938335e6b0cce330ad79c) ) + ROM_LOAD( "ver0106_ju01.bin", 0x200000, 0x200000, CRC(55841d90) SHA1(52ba3ee9393dcddf28e2d20a50151bc739faaaa4) ) // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "ver0106_esd5.ju07", 0x400000, 0x040000, CRC(7a3ac887) SHA1(3c759f9bed396bbaf6bd7298a8bd2bd76df3aa6f) ) ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1068,8 +1395,8 @@ ROM_START( mchampdxa ) ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(1b22568c) SHA1(5458e1a798357a6785f8ea1fe9da37768cd4761d) ) ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "rom.ju01", 0x200000, 0x200000, CRC(1a749fc2) SHA1(feff4b26ee28244b4d092798a176e33e09d5df2c) ) - ROM_LOAD( "rom.ju02", 0x000000, 0x200000, CRC(7e87e332) SHA1(f90aa00a64a940846d99053c7aa023e3fd5d070b) ) + ROM_LOAD( "rom.ju02", 0x000000, 0x200000, CRC(7e87e332) SHA1(f90aa00a64a940846d99053c7aa023e3fd5d070b) ) + ROM_LOAD( "rom.ju01", 0x200000, 0x200000, CRC(1a749fc2) SHA1(feff4b26ee28244b4d092798a176e33e09d5df2c) ) // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "esd5.ju07", 0x400000, 0x080000, CRC(6cc871cc) SHA1(710b9695c864e4234686993b88d24590d60e1cb9) ) ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1094,8 +1421,8 @@ ROM_START( mchampdxb ) ROM_LOAD( "ver1114_esd3.su06", 0x00000, 0x40000, CRC(b87a1e85) SHA1(2fcdd7e8b301e3d20e6500a03dc293403b23b471) ) ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "ver1114_ju01", 0x200000, 0x200000, CRC(0048e687) SHA1(5cc0a35b5f5f8d69b2dc3728ad6d0d505d9e16c5) ) // SMT Flash MX chips - ROM_LOAD( "ver1114_ju02", 0x000000, 0x200000, CRC(2f9ccff8) SHA1(176240cd247cc5d3efd58fe0630726a8633be2a4) ) + ROM_LOAD( "ver1114_ju02", 0x000000, 0x200000, CRC(2f9ccff8) SHA1(176240cd247cc5d3efd58fe0630726a8633be2a4) ) + ROM_LOAD( "ver1114_ju01", 0x200000, 0x200000, CRC(0048e687) SHA1(5cc0a35b5f5f8d69b2dc3728ad6d0d505d9e16c5) ) // SMT Flash MX chips // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "ver1114_esd5.ju07", 0x400000, 0x040000, CRC(8175939f) SHA1(cd0132ae0d2e35dc656434989b1f0f255ad562ab) ) ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1205,11 +1532,11 @@ ROM_START( hedpanic ) // Story line & game instructions in English ROM_LOAD16_BYTE( "esd1.cu02", 0x000001, 0x040000, CRC(42405e9d) SHA1(0fa088b8bd921e42cedcc4083dfe41bc9888dfd1) ) ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask ROM ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "esd6.ju01", 0x200000, 0x200000, CRC(5858372c) SHA1(dc96112587df681d53cf7449bd39477919978325) ) - ROM_LOAD( "esd7.ju02", 0x000000, 0x200000, CRC(055d525f) SHA1(85ad474691f96e47311a1904015d1c92d3b2d607) ) + ROM_LOAD( "esd7.ju02", 0x000000, 0x200000, CRC(055d525f) SHA1(85ad474691f96e47311a1904015d1c92d3b2d607) ) + ROM_LOAD( "esd6.ju01", 0x200000, 0x200000, CRC(5858372c) SHA1(dc96112587df681d53cf7449bd39477919978325) ) // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "esd5.ju07", 0x400000, 0x080000, CRC(bd785921) SHA1(c8bcb38d5aa6f5a27f0dedf7efd1d6737d59b4ca) ) ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1219,7 +1546,7 @@ ROM_START( hedpanic ) // Story line & game instructions in English ROM_LOAD32_WORD( "esd9.fu34", 0x000002, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) ROM_REGION( 0x40000, "oki", 0 ) // Samples - ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) // AT27010 mask rom + ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) // AT27010 mask ROM ROM_REGION16_BE( 0x80, "eeprom", 0 ) ROM_LOAD( "hedpanic.nv", 0x0000, 0x0080, CRC(e91f4038) SHA1(f492de71170900f87912a272ab4f4a3a37ba31fe) ) @@ -1232,11 +1559,11 @@ ROM_START( hedpanicf ) // Story line in Japanese, game instructions in English ROM_LOAD16_BYTE( "esd1", 0x000001, 0x040000, CRC(d8574925) SHA1(bd4990778b90a49aa6b10f8cf6709ce2424f546a) ) // CU02 ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask ROM ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "esd6.ju01", 0x200000, 0x200000, CRC(5858372c) SHA1(dc96112587df681d53cf7449bd39477919978325) ) - ROM_LOAD( "esd7.ju02", 0x000000, 0x200000, CRC(055d525f) SHA1(85ad474691f96e47311a1904015d1c92d3b2d607) ) + ROM_LOAD( "esd7.ju02", 0x000000, 0x200000, CRC(055d525f) SHA1(85ad474691f96e47311a1904015d1c92d3b2d607) ) + ROM_LOAD( "esd6.ju01", 0x200000, 0x200000, CRC(5858372c) SHA1(dc96112587df681d53cf7449bd39477919978325) ) // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "esd5.ju07", 0x400000, 0x080000, CRC(bd785921) SHA1(c8bcb38d5aa6f5a27f0dedf7efd1d6737d59b4ca) ) ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1246,7 +1573,7 @@ ROM_START( hedpanicf ) // Story line in Japanese, game instructions in English ROM_LOAD32_WORD( "esd9.fu34", 0x000002, 0x200000, CRC(76b46cd2) SHA1(679cbf50ae5935e8848868081ecef4ec66424f6c) ) ROM_REGION( 0x40000, "oki", 0 ) // Samples - ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) // AT27010 mask rom + ROM_LOAD( "esd4.su10", 0x000000, 0x020000, CRC(3c11c590) SHA1(cb33845c3dc0501fff8055c2d66f412881089df1) ) // AT27010 mask ROM ROM_REGION16_BE( 0x80, "eeprom", 0 ) ROM_LOAD( "hedpanic.nv", 0x0000, 0x0080, CRC(e91f4038) SHA1(f492de71170900f87912a272ab4f4a3a37ba31fe) ) @@ -1259,11 +1586,11 @@ ROM_START( hedpanica ) // Story line & game instructions in English, copyright y ROM_LOAD16_BYTE( "esd11.cu02", 0x000001, 0x040000, CRC(e1418f23) SHA1(39f14172d9b1a0d47edfe2456362fddc22f60066) ) // CU02 ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask ROM ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "ju04", 0x200000, 0x200000, CRC(4f3503d7) SHA1(4bed795c7328e0ebfa97688918eb8a908c29deb8) ) - ROM_LOAD( "ju06", 0x000000, 0x200000, CRC(9f6f6193) SHA1(c7c7ae6898ab7177eefb0e525d827666e2af9f7e) ) + ROM_LOAD( "ju06", 0x000000, 0x200000, CRC(9f6f6193) SHA1(c7c7ae6898ab7177eefb0e525d827666e2af9f7e) ) + ROM_LOAD( "ju04", 0x200000, 0x200000, CRC(4f3503d7) SHA1(4bed795c7328e0ebfa97688918eb8a908c29deb8) ) // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "esd5.bin", 0x400000, 0x080000, CRC(6968265a) SHA1(84b4f2d8b3bf6ea4117fa8281c76b58df778261d) ) // JU07 ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1286,11 +1613,11 @@ ROM_START( hedpanico ) // Story line & game instructions in English, copyright y ROM_LOAD16_BYTE( "esd1.rom", 0x000001, 0x040000, CRC(4e0682c5) SHA1(f4117f31b6426d7bf126a6c62c489b9347885b42) ) // CU02 ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) // AT27C020 mask ROM ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "sm1.ju01", 0x000000, 0x200000, CRC(8083813f) SHA1(9492e7e844e45d59f0506f69d40c338b27bd3ce3) ) - ROM_LOAD( "sm2.ju02", 0x200000, 0x200000, CRC(7a9610e4) SHA1(21ae3ec3fbddfc66416c109b091bd885d5ba0558) ) + ROM_LOAD( "sm1.ju01", 0x000000, 0x200000, CRC(8083813f) SHA1(9492e7e844e45d59f0506f69d40c338b27bd3ce3) ) + ROM_LOAD( "sm2.ju02", 0x200000, 0x200000, CRC(7a9610e4) SHA1(21ae3ec3fbddfc66416c109b091bd885d5ba0558) ) // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "esd5.rom", 0x400000, 0x080000, CRC(82c5727f) SHA1(017f1d0c94475c51d17f12e24895f47a273a2dbb) ) // JU07 ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1316,8 +1643,8 @@ ROM_START( hedpanic830 ) // Story line & game instructions in English ROM_LOAD( "esd3.su06", 0x00000, 0x40000, BAD_DUMP CRC(a88d4424) SHA1(eefb5ac79632931a36f360713c482cd079891f91) ) ROM_REGION( 0x600000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD( "esd6.ju01", 0x200000, 0x200000, CRC(ffa6eb26) SHA1(c2e3371925604db0f46991cbfd39d763518ed89c) ) - ROM_LOAD( "esd7.ju02", 0x000000, 0x200000, CRC(5554ba0f) SHA1(6d02fa6d0712aa820231a24ee7a8396cc575e788) ) + ROM_LOAD( "esd7.ju02", 0x000000, 0x200000, CRC(5554ba0f) SHA1(6d02fa6d0712aa820231a24ee7a8396cc575e788) ) + ROM_LOAD( "esd6.ju01", 0x200000, 0x200000, CRC(ffa6eb26) SHA1(c2e3371925604db0f46991cbfd39d763518ed89c) ) // expand this to take up 0x200000 bytes too so we can decode it ROM_LOAD16_BYTE( "esd5.ju07", 0x400000, 0x080000, CRC(95269b3c) SHA1(df106d9e8d4c1484ff86170adcb1932d4d02f265) ) ROM_FILL( 0x500000, 0x100000, 0x00 ) @@ -1391,21 +1718,21 @@ ROM_START( deluxe5 ) // Deluxe 5 ROM_LOAD16_BYTE( "esd1.cu03", 0x000001, 0x040000, CRC(15d6644f) SHA1(cfb8168167389855f906658511d1dc7460e13100) ) // M27C2001 EPROM ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask ROM ROM_REGION( 0x180000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask roms with no label + ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask ROMs with no label ROM_LOAD16_BYTE( "am27c020.ju05", 0x000001, 0x040000, CRC(bbe81779) SHA1(750387fb4aaa04b7f4f1d3985896f5e11219e3ea) ) ROM_LOAD16_BYTE( "am27c020.ju04", 0x080000, 0x040000, CRC(40fa2c2f) SHA1(b9d9bfdc9343f00bad9749c76472f064c509cfce) ) ROM_LOAD16_BYTE( "am27c020.ju03", 0x080001, 0x040000, CRC(aa130fd3) SHA1(46a55d8ca59a52e610600fdba76d9729528d2871) ) ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 - ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) // No labels on the flash roms - ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) // No labels on the flash roms + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) // No labels on the flash ROMs + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) // No labels on the flash ROMs ROM_REGION( 0x40000, "oki", 0 ) // Samples - ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask rom + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask ROM ROM_REGION16_BE( 0x80, "eeprom", ROMREGION_ERASE00 ) // factory default settings because game doesn't init them properly otherwise ROM_LOAD16_WORD_SWAP( "eeprom", 0x0000, 0x0080, CRC(4539a8a0) SHA1(b882110b489e61ac5421fbe3551d9ee323b5d86b) ) @@ -1417,21 +1744,21 @@ ROM_START( deluxe5a ) // Deluxe 5 ROM_LOAD16_BYTE( "esd1.cu03", 0x000001, 0x040000, CRC(24f4d7b9) SHA1(bb0eabdd72a475149d6df768d9d29b545f061e54) ) // sldh ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask ROM ROM_REGION( 0x180000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask roms with no label + ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask ROMs with no label ROM_LOAD16_BYTE( "am27c020.ju05", 0x000001, 0x040000, CRC(bbe81779) SHA1(750387fb4aaa04b7f4f1d3985896f5e11219e3ea) ) ROM_LOAD16_BYTE( "am27c020.ju04", 0x080000, 0x040000, CRC(40fa2c2f) SHA1(b9d9bfdc9343f00bad9749c76472f064c509cfce) ) ROM_LOAD16_BYTE( "am27c020.ju03", 0x080001, 0x040000, CRC(aa130fd3) SHA1(46a55d8ca59a52e610600fdba76d9729528d2871) ) ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 - ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) // No labels on the flash roms - ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) // No labels on the flash roms + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) // No labels on the flash ROMs + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) // No labels on the flash ROMs ROM_REGION( 0x40000, "oki", 0 ) // Samples - ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask rom + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask ROM ROM_REGION16_BE( 0x80, "eeprom", ROMREGION_ERASE00 ) // factory default settings because game doesn't init them properly otherwise ROM_LOAD16_WORD_SWAP( "eeprom", 0x0000, 0x0080, CRC(4539a8a0) SHA1(b882110b489e61ac5421fbe3551d9ee323b5d86b) ) @@ -1443,21 +1770,21 @@ ROM_START( deluxe5b ) // Deluxe 5 ROM_LOAD16_BYTE( "esd1.cu03", 0x000001, 0x040000, CRC(7cc119c8) SHA1(4d2d37e815ab3211ff88c2e6584b4eaee1cd202d) ) // sldh ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask ROM ROM_REGION( 0x180000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask roms with no label + ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask ROMs with no label ROM_LOAD16_BYTE( "am27c020.ju05", 0x000001, 0x040000, CRC(bbe81779) SHA1(750387fb4aaa04b7f4f1d3985896f5e11219e3ea) ) ROM_LOAD16_BYTE( "am27c020.ju04", 0x080000, 0x040000, CRC(40fa2c2f) SHA1(b9d9bfdc9343f00bad9749c76472f064c509cfce) ) ROM_LOAD16_BYTE( "am27c020.ju03", 0x080001, 0x040000, CRC(aa130fd3) SHA1(46a55d8ca59a52e610600fdba76d9729528d2871) ) ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 - ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) // No labels on the flash roms - ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) // No labels on the flash roms + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(ae10242a) SHA1(f3d18c0cb7951b5f7ee47aa2856b7554088328ed) ) // No labels on the flash ROMs + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(248b8c05) SHA1(fe7bcc05ae0dd0a27c6ba4beb4ac155a8f3d7f7e) ) // No labels on the flash ROMs ROM_REGION( 0x40000, "oki", 0 ) // Samples - ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask rom + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask ROM ROM_REGION16_BE( 0x80, "eeprom", ROMREGION_ERASE00 ) // factory default settings because game doesn't init them properly otherwise ROM_LOAD16_WORD_SWAP( "eeprom", 0x0000, 0x0080, CRC(4539a8a0) SHA1(b882110b489e61ac5421fbe3551d9ee323b5d86b) ) @@ -1470,21 +1797,21 @@ ROM_START( deluxe4u ) // Deluxe 4 U - Removes Blackjack game, but otherwise same ROM_LOAD16_BYTE( "1.cu03", 0x000001, 0x040000, CRC(fbf14d74) SHA1(5ff5bf4ff55609452d5b8a49d8658f878541ce60) ) ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask rom + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(31de379a) SHA1(a0c9a9cec7207cc4ba33abb68bef62d7eb8e75e9) ) // AM27C020 mask ROM ROM_REGION( 0x180000, "spr", 0 ) // Sprites, 16x16x5 - ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask roms with no label + ROM_LOAD16_BYTE( "am27c020.ju06", 0x000000, 0x040000, CRC(8b853bce) SHA1(fa6e654fc965d88bb426b76cdce3417f357b25f3) ) // AM27C020 mask ROMs with no label ROM_LOAD16_BYTE( "am27c020.ju05", 0x000001, 0x040000, CRC(bbe81779) SHA1(750387fb4aaa04b7f4f1d3985896f5e11219e3ea) ) ROM_LOAD16_BYTE( "am27c020.ju04", 0x080000, 0x040000, CRC(40fa2c2f) SHA1(b9d9bfdc9343f00bad9749c76472f064c509cfce) ) ROM_LOAD16_BYTE( "am27c020.ju03", 0x080001, 0x040000, CRC(aa130fd3) SHA1(46a55d8ca59a52e610600fdba76d9729528d2871) ) ROM_LOAD16_BYTE( "am27c020.ju07", 0x100000, 0x040000, CRC(d414c3af) SHA1(9299b07a8c7a3e30a1bb6028204a049a7cb510f7) ) ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 - ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(6df14570) SHA1(fa4fc64c984d6a94fe61ec809ec515e840388704) ) // Specific to Deluxe 4 U - No labels on the flash roms - ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(93175d6d) SHA1(691832134f43e17bb767dff080b2736288961414) ) // Specific to Deluxe 4 U - No labels on the flash roms + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(6df14570) SHA1(fa4fc64c984d6a94fe61ec809ec515e840388704) ) // Specific to Deluxe 4 U - No labels on the flash ROMs + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(93175d6d) SHA1(691832134f43e17bb767dff080b2736288961414) ) // Specific to Deluxe 4 U - No labels on the flash ROMs ROM_REGION( 0x40000, "oki", 0 ) // Samples - ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask rom + ROM_LOAD( "esd4.su10", 0x00000, 0x20000, CRC(23f2b7d9) SHA1(328c951d14674760df68486841c933bad0d59fe3) ) // AT27C010 mask ROM ROM_REGION16_BE( 0x80, "eeprom", ROMREGION_ERASE00 ) // factory default settings because game doesn't init them properly otherwise ROM_LOAD16_WORD_SWAP( "eeprom", 0x0000, 0x0080, CRC(4539a8a0) SHA1(b882110b489e61ac5421fbe3551d9ee323b5d86b) ) @@ -1626,7 +1953,7 @@ ROM_START( swatpolc ) // SWAT Police ROM_LOAD16_BYTE( "esd.cu03", 0x000001, 0x040000, CRC(1070208b) SHA1(1e058774c5aee1de15ffcd26d530b23592286db1) ) // ESD labels but not numbered ROM_REGION( 0x40000, "audiocpu", 0 ) // Z80 Code - ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(80e97dbe) SHA1(d6fae689cd3737777f36c980b9a7d9e42b06a467) ) // 2 roms on PCB with an ESD3 label + ROM_LOAD( "esd3.su06", 0x00000, 0x40000, CRC(80e97dbe) SHA1(d6fae689cd3737777f36c980b9a7d9e42b06a467) ) // 2 ROMs on PCB with an ESD3 label ROM_REGION( 0x300000, "spr", 0 ) // Sprites, 16x16x5 ROM_LOAD16_BYTE( "esd4.ju06", 0x000000, 0x080000, CRC(bde1b130) SHA1(e45a2257f8c4d107dfb7401b5ae1b79951052bc6) ) @@ -1636,11 +1963,11 @@ ROM_START( swatpolc ) // SWAT Police ROM_LOAD16_BYTE( "esd5.ju07", 0x200000, 0x080000, CRC(d2c27f03) SHA1(7cbdf7f7ff17df16ca81823f69e82ae1cf96b714) ) ROM_REGION( 0x400000, "bgs", 0 ) // Layers, 16x16x8 - ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(c55897c5) SHA1(f6e0ef1c2fcfe6a511fe787a3abeff4da16d1b54) ) // No labels on the flash roms - ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(7117a6a2) SHA1(17c0ab02698cffa0582ed2d2b7dbb7fed8cd9393) ) // No labels on the flash roms + ROM_LOAD32_WORD( "fu35", 0x000000, 0x200000, CRC(c55897c5) SHA1(f6e0ef1c2fcfe6a511fe787a3abeff4da16d1b54) ) // No labels on the flash ROMs + ROM_LOAD32_WORD( "fu34", 0x000002, 0x200000, CRC(7117a6a2) SHA1(17c0ab02698cffa0582ed2d2b7dbb7fed8cd9393) ) // No labels on the flash ROMs ROM_REGION( 0x40000, "oki", 0 ) // Samples - ROM_LOAD( "at27c020.su10", 0x00000, 0x40000, CRC(c43efec2) SHA1(4ef328d8703b81328de09ecc4328763aba06e883) ) // AT27C020 mask rom with no label + ROM_LOAD( "at27c020.su10", 0x00000, 0x40000, CRC(c43efec2) SHA1(4ef328d8703b81328de09ecc4328763aba06e883) ) // AT27C020 mask ROM with no label ROM_END @@ -1823,6 +2150,9 @@ ROM_START( fantstrya ) // PCB marked: PNXND-MULTI 2002 01 01 - Only EPROMs dumpe ROM_LOAD16_BYTE( "graphics_rom_1", 0x200000, 0x080000, CRC(c8caa752) SHA1(cecc7a18a0bb59554316ed24ed0dc01d58d6ae53) ) // 1bpp, 27c040 ROM_END +} // anonymous namespace + + /*************************************************************************** @@ -1832,13 +2162,16 @@ ROM_END ***************************************************************************/ // ESD 11-09-98 -GAME( 1999, multchmp, 0, esd16, multchmp, esd16_state, empty_init, ROT0, "ESD", "Multi Champ (World, ver. 2.5)", MACHINE_SUPPORTS_SAVE ) +GAME( 1999, multchmp25, multchmp, esd16, multchmp, esd16_state, empty_init, ROT0, "ESD", "Multi Champ (World, ver. 2.5)", MACHINE_SUPPORTS_SAVE ) GAME( 1998, multchmpk, multchmp, esd16, multchmp, esd16_state, empty_init, ROT0, "ESD", "Multi Champ (Korea, older)", MACHINE_SUPPORTS_SAVE ) GAME( 1998, multchmpa, multchmp, esd16, multchmp, esd16_state, empty_init, ROT0, "ESD", "Multi Champ (World, older)", MACHINE_SUPPORTS_SAVE ) GAME( 2001, jumppop, 0, jumppop, jumppop, esd16_state, empty_init, ROT0, "ESD", "Jumping Pop (set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 2001, jumppope, jumppop, jumppop, jumppop, esd16_state, empty_init, ROT0, "Emag Soft", "Jumping Pop (set 2)", MACHINE_SUPPORTS_SAVE ) +// ESD 05-17-99 +GAME( 1999, multchmp, 0, esd16, multchmp, esd16_state, empty_init, ROT0, "ESD", "Multi Champ (World, ver. 9.6)", MACHINE_SUPPORTS_SAVE ) + // ESD 05-28-99 GAME( 1999, hedpanico, hedpanic, hedpanio, hedpanic, esd16_state, empty_init, ROT0, "ESD", "Head Panic (ver. 0615, 15/06/1999)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/misc/esd16.h b/src/mame/misc/esd16.h deleted file mode 100644 index b2062d3c149..00000000000 --- a/src/mame/misc/esd16.h +++ /dev/null @@ -1,111 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Luca Elia, David Haywood -/*************************************************************************** - - ESD 16 Bit Games - -***************************************************************************/ -#ifndef MAME_MISC_ESD16_H -#define MAME_MISC_ESD16_H - -#pragma once - -#include "decospr.h" - -#include "machine/eepromser.h" -#include "machine/gen_latch.h" - -#include "tilemap.h" - - -class esd16_state : public driver_device -{ -public: - esd16_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_vram(*this, "vram_%u", 0U), - m_scroll(*this, "scroll_%u", 0U), - m_spriteram(*this, "spriteram"), - m_layersize(*this, "head_layersize"), - m_platform_x(*this, "platform_x"), - m_platform_y(*this, "platform_y"), - m_audiobank(*this, "audiobank"), - m_io_eepromout(*this, "EEPROMOUT"), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_gfxdecode(*this, "gfxdecode"), - m_sprgen(*this, "spritegen"), - m_eeprom(*this, "eeprom"), - m_soundlatch(*this, "soundlatch") - { } - - void jumppop(machine_config &config); - void esd16_nosound(machine_config &config); - void esd16(machine_config &config); - void tangtang(machine_config &config); - void mchampdx(machine_config &config); - void hedpanio(machine_config &config); - void hedpanic(machine_config &config); - void fantstry(machine_config &config); - void fantstrya(machine_config &config); - -protected: - virtual void machine_start() override ATTR_COLD; - virtual void machine_reset() override ATTR_COLD; - virtual void video_start() override ATTR_COLD; - -private: - // memory pointers - required_shared_ptr_array m_vram; - required_shared_ptr_array m_scroll; - required_shared_ptr m_spriteram; - required_shared_ptr m_layersize; - required_shared_ptr m_platform_x; - required_shared_ptr m_platform_y; - - optional_memory_bank m_audiobank; - optional_ioport m_io_eepromout; - - // video-related - tilemap_t *m_tilemap_16x16[2]{}; - tilemap_t *m_tilemap[2]{}; - u32 m_tilemap_color[2]{}; - - // devices - required_device m_maincpu; - optional_device m_audiocpu; - required_device m_gfxdecode; - optional_device m_sprgen; - optional_device m_eeprom; - optional_device m_soundlatch; - - void sound_command_w(u8 data); - void platform_w(u16 data); - u8 eeprom_r(); - void eeprom_w(u8 data); - void sound_rombank_w(u8 data); - template void vram_w(offs_t offset, u16 data, u16 mem_mask = ~0); - void tilemap0_color_w(u16 data); - void tilemap0_color_jumppop_w(u16 data); - template TILE_GET_INFO_MEMBER(get_tile_info); - template TILE_GET_INFO_MEMBER(get_tile_info_16x16); - u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - DECOSPR_PRIORITY_CB_MEMBER(pri_callback); - void fantstrya_map(address_map &map) ATTR_COLD; - void hedpanic_map(address_map &map) ATTR_COLD; - void jumppop_map(address_map &map) ATTR_COLD; - void mchampdx_map(address_map &map) ATTR_COLD; - void multchmp_map(address_map &map) ATTR_COLD; - void sound_io_map(address_map &map) ATTR_COLD; - void sound_map(address_map &map) ATTR_COLD; - void tangtang_map(address_map &map) ATTR_COLD; - - void io_area_dsw(address_map &map, u32 base) ATTR_COLD; - void io_area_eeprom(address_map &map, u32 base) ATTR_COLD; - void palette_area(address_map &map, u32 base) ATTR_COLD; - void sprite_area(address_map &map, u32 base) ATTR_COLD; - void vid_attr_area(address_map &map, u32 base) ATTR_COLD; - void vram_area(address_map &map, u32 base) ATTR_COLD; -}; - -#endif // MAME_MISC_ESD16_H diff --git a/src/mame/misc/esd16_v.cpp b/src/mame/misc/esd16_v.cpp deleted file mode 100644 index 910e1af686d..00000000000 --- a/src/mame/misc/esd16_v.cpp +++ /dev/null @@ -1,197 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Luca Elia, David Haywood -/*************************************************************************** - - -= ESD 16 Bit Games =- - - driver by Luca Elia (l.elia@tin.it) - - -Note: if MAME_DEBUG is defined, pressing Z with: - - Q / W Shows Layer 0 / 1 - A Shows Sprites - - Keys can be used together! - - - [ 2 Scrolling Layers ] - - Tile Size: 8 x 8 x 8 - Color Codes: 1 per Layer (banked for Layer 0) - Layer Size (tiles) : 128 x 64 - Layer Size (pixels): 1024 x 512 - - [ 256 Sprites ] - - Sprites are made of 16 x 16 x 5 tiles. Size can vary from 1 to - 8 tiles vertically, while their width is always 1 tile. - - [ Priorities ] - - The game only uses this scheme: - - Back -> Front: Layer 0, Layer 1, Sprites - -***************************************************************************/ - -#include "emu.h" -#include "esd16.h" -#include "screen.h" - - -/*************************************************************************** - - Tilemaps - - Offset: Bits: Value: - - 0.w Code - - Color code: layer 0 (backmost) can bank at every 256 colors, - layer 1 uses the first 256. - -***************************************************************************/ - -template -TILE_GET_INFO_MEMBER(esd16_state::get_tile_info) -{ - const u16 code = m_vram[Layer][tile_index]; - tileinfo.set(0, - code, - m_tilemap_color[Layer], - 0); -} - -template -TILE_GET_INFO_MEMBER(esd16_state::get_tile_info_16x16) -{ - const u16 code = m_vram[Layer][tile_index]; - tileinfo.set(1, - code, - m_tilemap_color[Layer], - 0); -} - - -void esd16_state::tilemap0_color_w(u16 data) -{ - m_tilemap_color[0] = data & 0x03; - m_tilemap[0]->mark_all_dirty(); - m_tilemap_16x16[0]->mark_all_dirty(); - - bool const flip = BIT(data, 7); - flip_screen_set(flip); - m_sprgen->set_flip_screen(flip); -} - -void esd16_state::tilemap0_color_jumppop_w(u16 data) -{ - // todo - m_tilemap_color[0] = 2; - m_tilemap_color[1] = 1; - - bool const flip = BIT(data, 7); - flip_screen_set(flip); - m_sprgen->set_flip_screen(flip); -} - - -/*************************************************************************** - - - Video Hardware Init - - -***************************************************************************/ - - -void esd16_state::video_start() -{ - m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); - m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 8, 0x80, 0x40); - - // swatpolc changes tilemap 0 to 16x16 at various times - m_tilemap_16x16[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info_16x16<0>)), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); - - // hedpanic changes tilemap 1 to 16x16 at various times - m_tilemap_16x16[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(esd16_state::get_tile_info_16x16<1>)), TILEMAP_SCAN_ROWS, 16,16, 0x40, 0x40); - - m_tilemap[0]->set_scrolldx(-0x60 + 2, -0x60); - m_tilemap[1]->set_scrolldx(-0x60, -0x60 + 2); - m_tilemap_16x16[0]->set_scrolldx(-0x60 + 2, -0x60); - m_tilemap_16x16[1]->set_scrolldx(-0x60, -0x60 + 2); - - m_tilemap[1]->set_transparent_pen(0x00); - m_tilemap_16x16[1]->set_transparent_pen(0x00); -} - - -/*************************************************************************** - - - Screen Drawing - - -***************************************************************************/ - -u32 esd16_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - int layers_ctrl = -1; - - screen.priority().fill(0, cliprect); - -#ifdef MAME_DEBUG -if (machine().input().code_pressed(KEYCODE_Z)) -{ - int msk = 0; - if (machine().input().code_pressed(KEYCODE_Q)) msk |= 1; - if (machine().input().code_pressed(KEYCODE_W)) msk |= 2; - if (machine().input().code_pressed(KEYCODE_A)) msk |= 4; - if (msk != 0) layers_ctrl &= msk; -} -#endif - - if (layers_ctrl & 1) - { - if (m_layersize[0] & 0x0001) - { - m_tilemap_16x16[0]->set_scrollx(0, m_scroll[0][0]); - m_tilemap_16x16[0]->set_scrolly(0, m_scroll[0][1]); - m_tilemap_16x16[0]->draw(screen, bitmap, cliprect, 0, 0); - } - else - { - m_tilemap[0]->set_scrollx(0, m_scroll[0][0]); - m_tilemap[0]->set_scrolly(0, m_scroll[0][1]); - m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); - } - } - else - { - bitmap.fill(0, cliprect); - } - - - if (layers_ctrl & 2) - { - if (m_layersize[0] & 0x0002) - { - m_tilemap_16x16[1]->set_scrollx(0, m_scroll[1][0]); - m_tilemap_16x16[1]->set_scrolly(0, m_scroll[1][1]); - m_tilemap_16x16[1]->draw(screen, bitmap, cliprect, 0, 1); - } - else - { - m_tilemap[1]->set_scrollx(0, m_scroll[1][0]); - m_tilemap[1]->set_scrolly(0, m_scroll[1][1]); - m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 1); - } - - } - - if (layers_ctrl & 4) m_sprgen->draw_sprites(bitmap, cliprect, m_spriteram, 0x400); - -// popmessage("%04x %04x %04x %04x %04x",head_unknown1[0],head_layersize[0],head_unknown3[0],head_unknown4[0],head_unknown5[0]); - return 0; -}