From d73120e360baccf0cfc12a26520ae373d17ded54 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 20 Jun 2023 05:06:22 +0200 Subject: New systems marked not working ------------------------------ Lost Island (V1.03) [caius] New working clones ------------------ Euro League (Italian hack of Tecmo World Cup '90, set 3) [Nnap] Psycho-Nics Oscar (World revision 0, bootleg) [Armando78] Sky Fire [IZ8DWF] - nintendo/snes51.cpp: dumped a newer bios for snes4sl [Bonky] --- src/mame/cinematronics/cinemat.cpp | 22 +++++ src/mame/dataeast/dec8.cpp | 43 +++++++++ src/mame/dataeast/dec8.h | 2 + src/mame/mame.lst | 10 ++- src/mame/misc/chsuper.cpp | 173 ++++++++++++++++++++++--------------- src/mame/nintendo/snesb51.cpp | 14 +-- src/mame/tecmo/wc90b.cpp | 44 ++++++++++ 7 files changed, 231 insertions(+), 77 deletions(-) diff --git a/src/mame/cinematronics/cinemat.cpp b/src/mame/cinematronics/cinemat.cpp index b2ca86e1b98..d8cb9b7ada9 100644 --- a/src/mame/cinematronics/cinemat.cpp +++ b/src/mame/cinematronics/cinemat.cpp @@ -1356,6 +1356,27 @@ ROM_START( tailg ) ROM_END +ROM_START( skyfire ) // found on a set of 2 PCBs manufactured by Microhard, stickered 'Sky Fire'. Only difference from the original is that the title's ROM area has been 0-ed out + ROM_REGION( 0x2000, "maincpu", 0 ) // all 2708 + ROM_LOAD16_BYTE( "rom3-x1-2.3t", 0x0000, 0x0400, CRC(211182e2) SHA1(0a5828c93f85d861fe0619c3681bf1f41269b889) ) + ROM_LOAD16_BYTE( "x9-1.3t", 0x0001, 0x0400, CRC(99bd1c6b) SHA1(37040caac25e0334e83333348cc19be3009f4b52) ) + ROM_LOAD16_BYTE( "rom4-y1-2.4t", 0x0800, 0x0400, CRC(e915fae5) SHA1(0f8edd7d5be0d37dd6b5f803f8ea5c2c6e362ed2) ) + ROM_LOAD16_BYTE( "y9-1.4t", 0x0801, 0x0400, CRC(e22adbd2) SHA1(864d22a66004c7b3b559f8e3578b11cdd913db51) ) + ROM_LOAD16_BYTE( "rom1-v1-2.1t", 0x1000, 0x0400, CRC(9850ba5e) SHA1(453cfa09f77faf6b9090b2f209a980c25f890850) ) + ROM_LOAD16_BYTE( "v9-1.1t", 0x1001, 0x0400, CRC(51509bc6) SHA1(42c8786c39c92df3d5560a772ffaf011ccf8927c) ) + ROM_LOAD16_BYTE( "rom2-w1-2.2t", 0x1800, 0x0400, CRC(85bd4353) SHA1(a2f7371ec528feb0c6cb4470fcc4eb35adc5aeb0) ) + ROM_LOAD16_BYTE( "w9-1.2t", 0x1801, 0x0400, CRC(b5f45d46) SHA1(d1fe69a630ee244645952bcbcdb9a44a3f67b04a) ) + + ROM_REGION( 0x1a0, "proms", 0 ) // all MMI 6331 but f14 which is Fairchild 93417 + ROM_LOAD("f14", 0x000, 0x100, CRC(025996b1) SHA1(16e927c3a94c46ab2d870a37aa0dfacb4f95bdbf) ) // this one differs from the default, bad or intended? + ROM_LOAD("e14", 0x100, 0x020, CRC(29dbfb87) SHA1(d8c40ab010b2ea30f29b2c443819e2b69f376c04) ) + ROM_LOAD("d14", 0x120, 0x020, CRC(9a05afbf) SHA1(5d806a42424942ba5ef0b70a1d629315b37f931b) ) + ROM_LOAD("c14", 0x140, 0x020, CRC(07492cda) SHA1(32df9148797c23f70db47b840139c40e046dd710) ) + ROM_LOAD("j14", 0x160, 0x020, CRC(a481ca71) SHA1(ce145d61686f600cc16b77febfd5c783bf8c13b0) ) + ROM_LOAD("e8", 0x180, 0x020, CRC(791ec9e1) SHA1(6f7fcce4aa3be9020595235568381588adaab88e) ) +ROM_END + + ROM_START( warrior ) ROM_REGION( 0x2000, "maincpu", 0 ) ROM_LOAD16_BYTE( "warrior.t7", 0x0000, 0x0800, CRC(ac3646f9) SHA1(515c3acb638fad27fa57f6b438c8ec0b5b76f319) ) @@ -1616,6 +1637,7 @@ GAMEL( 1979, speedfrk, 0, speedfrk, speedfrk, cinemat_state, init GAME( 1979, starhawk, 0, starhawk, starhawk, cinemat_state, empty_init, ORIENTATION_FLIP_Y, "Cinematronics", "Starhawk", MACHINE_SUPPORTS_SAVE ) GAMEL( 1979, sundance, 0, sundance, sundance, cinemat_16level_state, init_sundance, ORIENTATION_FLIP_X ^ ROT270, "Cinematronics", "Sundance", MACHINE_SUPPORTS_SAVE, layout_sundance ) GAMEL( 1979, tailg, 0, tailg, tailg, cinemat_state, empty_init, ORIENTATION_FLIP_Y, "Cinematronics", "Tailgunner", MACHINE_SUPPORTS_SAVE, layout_tailg ) +GAMEL( 1979, skyfire, tailg, tailg, tailg, cinemat_state, empty_init, ORIENTATION_FLIP_Y, "bootleg (Microhard)", "Sky Fire", MACHINE_SUPPORTS_SAVE, layout_tailg ) GAMEL( 1979, warrior, 0, warrior, warrior, cinemat_state, empty_init, ORIENTATION_FLIP_Y, "Vectorbeam", "Warrior", MACHINE_SUPPORTS_SAVE, layout_warrior ) GAMEL( 1980, armora, 0, armora, armora, cinemat_state, empty_init, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack", MACHINE_SUPPORTS_SAVE, layout_armora ) GAMEL( 1980, armorap, armora, armora, armora, cinemat_state, empty_init, ORIENTATION_FLIP_Y, "Cinematronics", "Armor Attack (prototype)", MACHINE_SUPPORTS_SAVE, layout_armora ) diff --git a/src/mame/dataeast/dec8.cpp b/src/mame/dataeast/dec8.cpp index 421dc094ed9..d678b165d5d 100644 --- a/src/mame/dataeast/dec8.cpp +++ b/src/mame/dataeast/dec8.cpp @@ -606,6 +606,12 @@ void dec8_state::oscar_s_map(address_map &map) map(0x8000, 0xffff).rom(); } +// Used by the bootleg which has a standard M6502 with predecrypted opcodes +void dec8_state::oscarbl_s_opcodes_map(address_map &map) +{ + map(0x8000, 0xffff).rom().region("audiocpu", 0x10000); +} + /* Used by Last Mission, Shackled & Breywood */ void dec8_state::ym3526_s_map(address_map &map) { @@ -2288,6 +2294,15 @@ void dec8_state::oscar(machine_config &config) ym2.add_route(ALL_OUTPUTS, "mono", 0.70); } +void dec8_state::oscarbl(machine_config &config) +{ + oscar(config); + + M6502(config.replace(), m_audiocpu, XTAL(12'000'000)/8); + m_audiocpu->set_addrmap(AS_PROGRAM, &dec8_state::oscar_s_map); /* NMIs are caused by the main CPU */ + m_audiocpu->set_addrmap(AS_OPCODES, &dec8_state::oscarbl_s_opcodes_map); +} + void dec8_state::srdarwin(machine_config &config) { /* basic machine hardware */ @@ -3367,6 +3382,33 @@ ROM_START( oscar ) ROM_LOAD( "ed02", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) ROM_END +ROM_START( oscarbl ) // very similar to the original, main difference it's it uses a standard M6502 for sound with predecrypted opcodes. + ROM_REGION( 0x20000, "maincpu", 0 ) // same as the original + ROM_LOAD( "m27c256.3", 0x08000, 0x08000, CRC(120040d8) SHA1(22d5f84f3ca724cbf39dfc4790f2175ba4945aaf) ) + ROM_LOAD( "at27c512.2", 0x10000, 0x10000, CRC(e2d4bba9) SHA1(99f0310debe51f4bcd00b5fdaedc1caf2eeccdeb) ) + + ROM_REGION( 0x10000, "sub", 0 ) + ROM_LOAD( "at27c512.4", 0x00000, 0x10000, CRC(2ad9ef5d) SHA1(19db4446a6a5f75c7ddb2807b69d7c40d8b2d55a) ) + + ROM_REGION( 2*0x10000, "audiocpu", 0 ) + ROM_LOAD( "at27c512.1", 0x08000, 0x10000, CRC(302ff92c) SHA1(222cc1e4673a5439da1cdd07cc65dc23f522da1c) ) // data in the first half, opcodes in the second + + ROM_REGION( 0x08000, "gfx1", 0 ) /* characters */ + ROM_LOAD( "ed08", 0x00000, 0x04000, BAD_DUMP CRC(308ac264) SHA1(fd1c4ec4e4f99c33e93cd15e178c4714251a9b7e) ) // not included in this set, probably same + + ROM_REGION( 0x80000, "gfx2", 0 ) /* sprites */ + ROM_LOAD( "at27c512.6", 0x00000, 0x10000, CRC(967315b5) SHA1(b7a081241477ab8e62fe3df1b7025b50ceaba180) ) + ROM_LOAD( "at27c512.7", 0x20000, 0x10000, CRC(fcdba431) SHA1(0be2194519c36ddf136610f60890506eda1faf0b) ) + ROM_LOAD( "at27c512.8", 0x40000, 0x10000, CRC(7d50bebc) SHA1(06375f3273c48c7c7d81f1c15cbc5d3f3e05b8ed) ) + ROM_LOAD( "at27c512.9", 0x60000, 0x10000, CRC(8fdf0fa5) SHA1(2b4d1ca1436864e89b13b3fa151a4a3708592e0a) ) + + ROM_REGION( 0x80000, "gfx3", 0 ) /* tiles */ + ROM_LOAD( "at27c512.10", 0x00000, 0x10000, CRC(98cb4ffc) SHA1(75465a1e7c113db766e14d22b31bf999c520a8bf) ) + ROM_LOAD( "at27c512.11", 0x20000, 0x10000, CRC(bff7fddc) SHA1(129e99fa99920e647a53b9af64c9c288c1e8ad57) ) + ROM_LOAD( "at27c512.12", 0x40000, 0x10000, CRC(eff3b56c) SHA1(427d3aa053fa81ef004019eb8bb0aa97787f283e) ) + ROM_LOAD( "at27c512.13", 0x60000, 0x10000, CRC(7ddc5651) SHA1(f5ec5245cf3d9d4d9c1df6a8128c24565e331317) ) +ROM_END + ROM_START( oscaru ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "ed10", 0x08000, 0x08000, CRC(f9b0d4d4) SHA1(dc2aba978ba96f365027c7be5714728d5d7fb802) ) @@ -3823,6 +3865,7 @@ GAME( 1987, csilver, 0, csilver, csilver, csilver_state, empty_init GAME( 1987, csilverj, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 3)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, csilverja, csilver, csilver, csilverj, csilver_state, empty_init, ROT0, "Data East Corporation", "Captain Silver (Japan, revision 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, oscar, 0, oscar, oscar, dec8_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (World revision 0)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, oscarbl, oscar, oscarbl, oscar, dec8_state, empty_init, ROT0, "bootleg", "Psycho-Nics Oscar (World revision 0, bootleg)", MACHINE_SUPPORTS_SAVE ) GAME( 1988, oscaru, oscar, oscar, oscarj, dec8_state, empty_init, ROT0, "Data East USA", "Psycho-Nics Oscar (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, oscarj1, oscar, oscar, oscarj, dec8_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, oscarj2, oscar, oscar, oscarj, dec8_state, empty_init, ROT0, "Data East Corporation", "Psycho-Nics Oscar (Japan revision 2)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/dataeast/dec8.h b/src/mame/dataeast/dec8.h index 2d155fa62c7..64165cdbeb7 100644 --- a/src/mame/dataeast/dec8.h +++ b/src/mame/dataeast/dec8.h @@ -49,6 +49,7 @@ public: void srdarwin(machine_config &config); void ghostb(machine_config &config); void oscar(machine_config &config); + void oscarbl(machine_config &config); void gondo(machine_config &config); protected: @@ -207,6 +208,7 @@ private: void meikyuh_map(address_map &map); void oscar_map(address_map &map); void oscar_s_map(address_map &map); + void oscarbl_s_opcodes_map(address_map &map); void oscar_sub_map(address_map &map); void shackled_map(address_map &map); void shackled_sub_map(address_map &map); diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 00caa0e392d..c45d006bf1f 100755 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -15926,6 +15926,7 @@ boxingb // (c) 1981 demon // (c) 1982 Rock-ola qb3 // (c) 1982 Rock-ola - prototype ripoff // (c) 1980 +skyfire // bootleg solarq // (c) 1981 spaceftr // (c) 1981 Zaccaria spaceshp // (c) 1978 Cinematronics (Sega licence) @@ -16540,6 +16541,7 @@ makyosen // (c) 1987 Data East Corporation (Japan) meikyuh // (c) 1987 Data East Corporation (Japan) meikyuha // (c) 1987 Data East Corporation (Japan) oscar // (c) 1988 Data East Corporation (World) +oscarbl // bootleg oscarj1 // (c) 1987 Data East Corporation (Japan) oscarj2 // (c) 1987 Data East Corporation (Japan) oscaru // (c) 1987 Data East USA (US) @@ -28651,10 +28653,11 @@ changyu2 dmodrbcc // (c) 1976 Chicago Coin @source:misc/chsuper.cpp -chsuper2 // 1999, unknown -chsuper3 // 1999, unknown chmpnum // 1999, unknown chmpnuma // 1999, unknown +chsuper2 // 1999, unknown +chsuper3 // 1999, unknown +lstislnd // 1999, unknown @source:misc/cleartone.cpp bnstlkr // @@ -43525,11 +43528,12 @@ twcup90c // (c) 1989 Tecmo twcup90t // (c) 1989 Tecmo @source:tecmo/wc90b.cpp +eurogael // bootleg twcup90b1 // bootleg twcup90b2 // bootleg +twcup90b3 // bootleg twcup90ba // bootleg twcup90bb // bootleg -eurogael // bootleg @source:tektronix/tek405x.cpp tek4051 // diff --git a/src/mame/misc/chsuper.cpp b/src/mame/misc/chsuper.cpp index 68efab16983..00479aba411 100644 --- a/src/mame/misc/chsuper.cpp +++ b/src/mame/misc/chsuper.cpp @@ -1,11 +1,12 @@ // license:BSD-3-Clause -// copyright-holders:Angelo Salese, David Haywood, Roberto Fresca +// copyright-holders: Angelo Salese, David Haywood, Roberto Fresca + /******************************************************************************************* Champion Super (c) 1999 Driver by Angelo Salese & David Haywood - Addittional work by Roberto Fresca. + Additional work by Roberto Fresca. Notes: - To init chsuper3, chmpnum & chmpnuma, just keep pressed both service keys (9 & 0), @@ -16,15 +17,18 @@ - ticket dispenser. - Trace the hold3 lamp line on the pcb, for a proper implementation. + - proper GFX decode / descramble for lstislnd (game seems to run after init above). *******************************************************************************************/ #include "emu.h" + #include "cpu/z180/z180.h" #include "machine/nvram.h" #include "sound/dac.h" #include "video/ramdac.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -45,28 +49,18 @@ public: , m_lamps(*this, "lamp%u", 0U) { } - void chsuper_vram_w(offs_t offset, uint8_t data); - void chsuper_outporta_w(uint8_t data); - void chsuper_outportb_w(uint8_t data); - - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void chsuper(machine_config &config); - void chsuper_portmap(address_map &map); - void chsuper_prg_map(address_map &map); - void ramdac_map(address_map &map); + void init_chsuper3(); void init_chmpnum(); void init_chsuper2(); + void init_lstislnd(); protected: - // driver_device overrides virtual void machine_start() override { m_lamps.resolve(); } - //virtual void machine_reset(); - virtual void video_start() override; - +private: int m_tilexor = 0; uint8_t m_blacklamp = 0; uint8_t m_redlamp = 0; @@ -76,6 +70,16 @@ protected: required_device m_gfxdecode; required_device m_palette; output_finder<7> m_lamps; + + void vram_w(offs_t offset, uint8_t data); + void outporta_w(uint8_t data); + void outportb_w(uint8_t data); + + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void portmap(address_map &map); + void prg_map(address_map &map); + void ramdac_map(address_map &map); }; @@ -87,29 +91,32 @@ protected: void chsuper_state::video_start() { m_vram = make_unique_clear(1 << 14); + + save_item(NAME(m_blacklamp)); + save_item(NAME(m_redlamp)); + save_pointer(NAME(m_vram), 0x4000); } uint32_t chsuper_state::screen_update( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ) { gfx_element *gfx = m_gfxdecode->gfx(0); int count = 0x0000; - int y,x; - for (y=0;y<64;y++) + for (int y = 0; y < 64; y++) { - for (x=0;x<128;x++) + for (int x = 0; x < 128; x++) { - int tile = ((m_vram[count+1]<<8) | m_vram[count]) & 0xffff; + int const tile = ((m_vram[count + 1] << 8) | m_vram[count]) & 0xffff; - gfx->opaque(bitmap,cliprect,tile,0,0,0,x*4,y*8); - count+=2; + gfx->opaque(bitmap, cliprect, tile, 0, 0, 0, x * 4, y * 8); + count += 2; } } return 0; } -void chsuper_state::chsuper_vram_w(offs_t offset, uint8_t data) +void chsuper_state::vram_w(offs_t offset, uint8_t data) { m_vram[offset] = data; } @@ -143,20 +150,20 @@ void chsuper_state::chsuper_vram_w(offs_t offset, uint8_t data) Port EDh seems to be a mirror of EFh, but with bit0 always active. - After reversed any port, I've not found a proper and dedicated line - for the Hold 3 lamp, so my guess is that is created through TTL'ing + After reversing every port, I've not found a proper and dedicated line + for the Hold 3 lamp, so my guess is that it's created through TTL'ing other lines through some kind of circuitry. Since holds 1 & 5 lamps *and* holds 2 & 4 lamps are flashing in a complementary way for the double-up "Black/Red" and "High/Low" functions, I strongly think that hold 3 lamp is lit when both - of a complementary pair are lite together simultaneously. + of a complementary pair are lit together simultaneously. Anyways... Need to be checked against a real PCB. */ -void chsuper_state::chsuper_outporta_w(uint8_t data) // Port EEh +void chsuper_state::outporta_w(uint8_t data) // Port EEh { machine().bookkeeping().coin_counter_w(0, data & 0x01); // Coin counter m_lamps[0] = BIT(data, 1); // Hold 1 / Black (Nero) lamp. @@ -182,7 +189,7 @@ void chsuper_state::chsuper_outporta_w(uint8_t data) // Port EEh } } -void chsuper_state::chsuper_outportb_w(uint8_t data) // Port EFh +void chsuper_state::outportb_w(uint8_t data) // Port EFh { // D0: unknown... // D1: unused... @@ -213,25 +220,22 @@ void chsuper_state::chsuper_outportb_w(uint8_t data) // Port EFh * Memory Map handlers * ***************************/ -void chsuper_state::chsuper_prg_map(address_map &map) +void chsuper_state::prg_map(address_map &map) { - map(0x00000, 0x0efff).rom(); - map(0x00000, 0x01fff).w(FUNC(chsuper_state::chsuper_vram_w)); - map(0x0f000, 0x0ffff).ram(); + map(0x00000, 0x1ffff).rom(); + map(0x00000, 0x01fff).w(FUNC(chsuper_state::vram_w)); map(0xfb000, 0xfbfff).ram().share("nvram"); } -// map(0xaff8, 0xaff8).w("oki", FUNC(okim6295_device::write)); - -void chsuper_state::chsuper_portmap(address_map &map) +void chsuper_state::portmap(address_map &map) { map(0x0000, 0x003f).ram(); // Z180 internal regs map(0x00e8, 0x00e8).portr("IN0"); map(0x00e9, 0x00e9).portr("IN1"); map(0x00ea, 0x00ea).portr("DSW"); map(0x00ed, 0x00ed).nopw(); // mirror of EFh, but with bit0 active... - map(0x00ee, 0x00ee).w(FUNC(chsuper_state::chsuper_outporta_w)); - map(0x00ef, 0x00ef).w(FUNC(chsuper_state::chsuper_outportb_w)); + map(0x00ee, 0x00ee).w(FUNC(chsuper_state::outporta_w)); + map(0x00ef, 0x00ef).w(FUNC(chsuper_state::outportb_w)); map(0x00fc, 0x00fc).w("ramdac", FUNC(ramdac_device::index_w)); map(0x00fd, 0x00fd).w("ramdac", FUNC(ramdac_device::pal_w)); map(0x00fe, 0x00fe).w("ramdac", FUNC(ramdac_device::mask_w)); @@ -239,6 +243,12 @@ void chsuper_state::chsuper_portmap(address_map &map) map(0xff20, 0xff3f).w("dac", FUNC(dac_byte_interface::data_w)); // unk writes } +void chsuper_state::ramdac_map(address_map &map) +{ + map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); +} + + /* About Sound... Samples are PCM unsigned 8-bit, mono. @@ -352,14 +362,9 @@ static const gfx_layout charlayout = }; static GFXDECODE_START( gfx_chsuper ) - GFXDECODE_ENTRY( "gfx1", 0x00000, charlayout, 0, 1 ) + GFXDECODE_ENTRY( "chars", 0x00000, charlayout, 0, 1 ) GFXDECODE_END -void chsuper_state::ramdac_map(address_map &map) -{ - map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); -} - /*************************** * Machine Drivers * @@ -367,13 +372,13 @@ void chsuper_state::ramdac_map(address_map &map) void chsuper_state::chsuper(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware Z80180(config, m_maincpu, 16_MHz_XTAL); // Z8018006VSC (but can actually take 8 MHz?) - m_maincpu->set_addrmap(AS_PROGRAM, &chsuper_state::chsuper_prg_map); - m_maincpu->set_addrmap(AS_IO, &chsuper_state::chsuper_portmap); + m_maincpu->set_addrmap(AS_PROGRAM, &chsuper_state::prg_map); + m_maincpu->set_addrmap(AS_IO, &chsuper_state::portmap); m_maincpu->set_vblank_int("screen", FUNC(chsuper_state::irq0_line_hold)); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(57); screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -390,7 +395,7 @@ void chsuper_state::chsuper(machine_config &config) ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); // ADV476KP50 ramdac.set_addrmap(0, &chsuper_state::ramdac_map); - /* sound hardware */ + // sound hardware SPEAKER(config, "speaker").front_center(); DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.25); // 74HC273 latch + R2R network (unknown values) @@ -405,7 +410,7 @@ ROM_START( chsuper3 ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "c.bin", 0x0000, 0x80000, CRC(e987ed1f) SHA1(8d1ee01914356714c7d1f8437d98b41a707a174a) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "a.bin", 0x00000, 0x80000, CRC(ace8b591) SHA1(e9ba5efebdc9b655056ed8b2621f062f50e0528f) ) ROM_LOAD( "b.bin", 0x80000, 0x80000, CRC(5f58c722) SHA1(d339ae27af010b058eae9084fba85fb2fbed3952) ) @@ -417,7 +422,7 @@ ROM_START( chsuper2 ) ROM_REGION( 0x80000, "maincpu", 0 ) ROM_LOAD( "chsuper2-c.bin", 0x0000, 0x80000, CRC(cbf59e69) SHA1(68e4b167fdf9103fd748cff401f4fe7c1d214552) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "chsuper2-a.bin", 0x00000, 0x80000, CRC(7caa8ebe) SHA1(440306a208ec8afd570b15f05b5dc542acc98510) ) ROM_LOAD( "chsuper2-b.bin", 0x80000, 0x80000, CRC(7bb463d7) SHA1(fb3842ba53e545fa47574c91df7281a9cb417395) ) @@ -429,7 +434,7 @@ ROM_START( chmpnum ) ROM_REGION( 0x80000, "maincpu", 0 ) // code + samples ROM_LOAD( "3.ic11", 0x00000, 0x80000, CRC(46aa2ce7) SHA1(036d67a26c890c4dc26599bfcd2c67f12e30fb52) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "1.ic18", 0x00000, 0x80000, CRC(8e202eaa) SHA1(156b498873111e5890c00d447201ba4bcbe6e633) ) ROM_LOAD( "2.ic19", 0x80000, 0x80000, CRC(dc0790b0) SHA1(4550f85e609338635a3987f7832517ed1d6388d4) ) @@ -468,7 +473,7 @@ ROM_START( chmpnuma ) ROM_REGION( 0x80000, "maincpu", 0 ) // code + samples ROM_LOAD( "c.n.v.6.7.ic11", 0x00000, 0x80000, CRC(11a8cfcc) SHA1(a8ac6cea23841df55d636f48e4071ea4ed16119b) ) - ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_REGION( 0x100000, "chars", 0 ) ROM_LOAD( "c.number_1.ic18", 0x00000, 0x80000, CRC(8e202eaa) SHA1(156b498873111e5890c00d447201ba4bcbe6e633) ) ROM_LOAD( "c.number_2.ic19", 0x80000, 0x80000, CRC(dc0790b0) SHA1(4550f85e609338635a3987f7832517ed1d6388d4) ) @@ -476,6 +481,20 @@ ROM_START( chmpnuma ) ROM_COPY( "maincpu", 0x10000, 0x00000, 0x70000 ) ROM_END +ROM_START( lstislnd ) // on a slightly newer PCB with more GFX ROM space + ROM_REGION( 0x80000, "maincpu", 0 ) // code + samples + ROM_LOAD( "lost_island_1.ic10", 0x00000, 0x80000, CRC(4444cf61) SHA1(d3d84a05042e3cf66c53648148f5e78035800cb9) ) + + ROM_REGION( 0x200000, "chars", ROMREGION_ERASE00 ) + ROM_LOAD( "lost_island_2.ic19", 0x000000, 0x080000, CRC(09d37a82) SHA1(92e131d3d6dfdc6a0f5d69cdf7a93539673852a4) ) + ROM_LOAD( "lost_island_3.ic15", 0x080000, 0x080000, CRC(48209662) SHA1(d921f6b39351b0c11818531b5f57fccb49f553af) ) + ROM_LOAD( "lost_island_4.ic16", 0x100000, 0x080000, CRC(866ec65e) SHA1(001ea242c07b79f334bce5c12d488188d1f38d1d) ) + // ic 17 empty socket (seems unused) + + ROM_REGION( 0x80000, "adpcm", 0 ) + ROM_COPY( "maincpu", 0x20000, 0x00000, 0x60000 ) // ? +ROM_END + /************************* * Driver Init * @@ -484,7 +503,7 @@ ROM_END void chsuper_state::init_chsuper2() { std::unique_ptr buffer; - uint8_t *rom = memregion("gfx1")->base(); + uint8_t *rom = memregion("chars")->base(); m_tilexor = 0x7f00; @@ -497,13 +516,13 @@ void chsuper_state::init_chsuper2() buffer[j] = rom[i]; } - memcpy(rom,buffer.get(),0x100000); + memcpy(rom, buffer.get(), 0x100000); } void chsuper_state::init_chsuper3() { std::unique_ptr buffer; - uint8_t *rom = memregion("gfx1")->base(); + uint8_t *rom = memregion("chars")->base(); m_tilexor = 0x0e00; @@ -511,20 +530,18 @@ void chsuper_state::init_chsuper3() for (int i = 0; i < 0x100000; i++) { - int j; - - j = i ^ (m_tilexor << 5); + int j = i ^ (m_tilexor << 5); buffer[j] = rom[i]; } - memcpy(rom,buffer.get(),0x100000); + memcpy(rom, buffer.get(), 0x100000); } void chsuper_state::init_chmpnum() { std::unique_ptr buffer; - uint8_t *rom = memregion("gfx1")->base(); + uint8_t *rom = memregion("chars")->base(); m_tilexor = 0x1800; @@ -534,14 +551,33 @@ void chsuper_state::init_chmpnum() { int j = i ^ (m_tilexor << 5); - j = bitswap<24>(j,23,22,21,20,19,18,17,13, 15,14,16,12, 11,10,9,8, 7,6,5,4, 3,2,1,0); - j = bitswap<24>(j,23,22,21,20,19,18,17,14, 15,16,13,12, 11,10,9,8, 7,6,5,4, 3,2,1,0); - j = bitswap<24>(j,23,22,21,20,19,18,17,15, 16,14,13,12, 11,10,9,8, 7,6,5,4, 3,2,1,0); + j = bitswap<24>(j , 23, 22, 21, 20, 19, 18, 17, 15, 14, 13, 16, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); + + buffer[j] = rom[i]; + } + + memcpy(rom, buffer.get(), 0x100000); +} + +void chsuper_state::init_lstislnd() +{ + std::unique_ptr buffer; + uint8_t *rom = memregion("chars")->base(); + + m_tilexor = 0x1500; // TODO + + buffer = std::make_unique(0x200000); + + for (int i = 0; i < 0x200000; i++) + { + int j = i ^ (m_tilexor << 5); + + j = bitswap<24>(j , 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); // TODO buffer[j] = rom[i]; } - memcpy(rom,buffer.get(),0x100000); + memcpy(rom, buffer.get(), 0x200000); } } // anonymous namespace @@ -551,8 +587,9 @@ void chsuper_state::init_chmpnum() * Game Drivers * *************************/ -/* YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT */ -GAMEL( 1999, chsuper3, 0, chsuper, chsuper, chsuper_state, init_chsuper3, ROT0, "", "Champion Super 3 (V0.35)", MACHINE_IMPERFECT_SOUND, layout_chsuper ) //24/02/99 -GAMEL( 1999, chsuper2, chsuper3, chsuper, chsuper, chsuper_state, init_chsuper2, ROT0, "", "Champion Super 2 (V0.13)", MACHINE_IMPERFECT_SOUND, layout_chsuper ) //26/01/99 -GAME( 1999, chmpnum, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "", "Champion Number (V0.74)", MACHINE_IMPERFECT_SOUND ) //10/11/99 -GAME( 1999, chmpnuma, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "", "Champion Number (V0.67)", MACHINE_IMPERFECT_SOUND ) //21/10/99 +// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS LAYOUT +GAMEL( 1999, chsuper3, 0, chsuper, chsuper, chsuper_state, init_chsuper3, ROT0, "", "Champion Super 3 (V0.35)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chsuper ) //24/02/99 +GAMEL( 1999, chsuper2, chsuper3, chsuper, chsuper, chsuper_state, init_chsuper2, ROT0, "", "Champion Super 2 (V0.13)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_chsuper ) //26/01/99 +GAME( 1999, chmpnum, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "", "Champion Number (V0.74)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //10/11/99 +GAME( 1999, chmpnuma, chsuper3, chsuper, chsuper, chsuper_state, init_chmpnum, ROT0, "", "Champion Number (V0.67)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //21/10/99 +GAME( 2001, lstislnd, 0, chsuper, chsuper, chsuper_state, init_lstislnd, ROT0, "", "Lost Island (V1.03)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //04/05/01, there's also a Lost Treasure string diff --git a/src/mame/nintendo/snesb51.cpp b/src/mame/nintendo/snesb51.cpp index 8acaf994703..6fa07f6a16b 100644 --- a/src/mame/nintendo/snesb51.cpp +++ b/src/mame/nintendo/snesb51.cpp @@ -344,12 +344,14 @@ ROM_START( snes4sl ) ROM_REGION(0x400000, "user3", ROMREGION_ERASEFF) ROM_REGION(0x8000, "mcu", 0) - ROM_SYSTEM_BIOS(0, "1207", "12-07") // Found on PCB with Siemens SAB 8051A-P (4KBytes internal ROM undumped) - ROMX_LOAD("27c256_12-07.bin", 0x0000, 0x8000, CRC(0922314d) SHA1(04f1265ddc753111e6fcd56162a917ae1791c164), ROM_BIOS(0)) - ROM_SYSTEM_BIOS(1, "1103", "11-03") // Found on PCB with WD1016D-PL - ROMX_LOAD("27c256_11-03.bin", 0x0000, 0x8000, CRC(4e471581) SHA1(0f23ad065d448097f56ab45c3850d53cf85f3670), ROM_BIOS(1)) - - ROM_DEFAULT_BIOS("1207") + ROM_SYSTEM_BIOS(0, "930601", "94-06-01") // Found on PCB with Intel P80C31BH, has 'SISTEME FRANCE' string in ROM + ROMX_LOAD("27c256_06_01.u43", 0x0000, 0x8000, CRC(d0f4849f) SHA1(971743c9b5a2c0ba267dd8a1ce9ff3821759b4fe), ROM_BIOS(0)) + ROM_SYSTEM_BIOS(1, "931207", "93-12-07") // Found on PCB with Siemens SAB 8051A-P (4KBytes internal ROM undumped) + ROMX_LOAD("27c256_12-07.bin", 0x0000, 0x8000, CRC(0922314d) SHA1(04f1265ddc753111e6fcd56162a917ae1791c164), ROM_BIOS(1)) + ROM_SYSTEM_BIOS(2, "931103", "93-11-03") // Found on PCB with WD1016D-PL + ROMX_LOAD("27c256_11-03.bin", 0x0000, 0x8000, CRC(4e471581) SHA1(0f23ad065d448097f56ab45c3850d53cf85f3670), ROM_BIOS(2)) + + ROM_DEFAULT_BIOS("930601") ROM_END ROM_START( snes4sln ) diff --git a/src/mame/tecmo/wc90b.cpp b/src/mame/tecmo/wc90b.cpp index d3bf19c8e85..c0903cc21ae 100644 --- a/src/mame/tecmo/wc90b.cpp +++ b/src/mame/tecmo/wc90b.cpp @@ -884,6 +884,49 @@ ROM_START( twcup90b2 ) ROM_END +ROM_START( twcup90b3 ) // most similar to twcup90b1. First main CPU ROM has a small routine added + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "03.bin", 0x00000, 0x10000, CRC(1e6e94c9) SHA1(1731e3e3b5d17ba676a7e42638d7206212a0080d) ) // c000-ffff is not used + ROM_LOAD( "02.bin", 0x10000, 0x10000, CRC(f54ff17a) SHA1(a19850fc28a5a0da20795a5cc6b56d9c16554bce) ) // banked at f000-f7ff + + ROM_REGION( 0x20000, "sub", 0 ) + ROM_LOAD( "05.bin", 0x00000, 0x10000, CRC(3d535e2f) SHA1(f1e1878b5a8316e770c74a1e1f29a7a81a4e5dfe) ) // c000-ffff is not used + ROM_LOAD( "04.bin", 0x10000, 0x10000, CRC(9e421c4b) SHA1(e23a1f1d5d1e960696f45df653869712eb889839) ) // banked at f000-f7ff + + ROM_REGION( 0x10000, "audiocpu", 0 ) + ROM_LOAD( "01.bin", 0x00000, 0x10000, CRC(3d317622) SHA1(ae4e8c5247bc215a2769786cb8639bce2f80db22) ) + + ROM_REGION( 0x010000, "chargfx", 0 ) // uses 0x10000 size ROMs instead of 0x4000 + ROM_LOAD( "07.bin", 0x000000, 0x04000, CRC(b82d19ba) SHA1(e6fcfee178d4b5c7a07af8b5637791d02703c5b7) ) + ROM_IGNORE( 0x0c000 ) // BADADDR --xxxxxxxxxxxxxx + ROM_LOAD( "09.bin", 0x004000, 0x04000, CRC(0a488017) SHA1(134606f9328118be6f8a5b403041b57ef2eaac90) ) + ROM_IGNORE( 0x0c000 ) // BADADDR --xxxxxxxxxxxxxx + ROM_LOAD( "11.bin", 0x008000, 0x04000, CRC(cf0dec64) SHA1(b66712408379572d5c0dc28a8207b08dd53f3d8f) ) + ROM_IGNORE( 0x0c000 ) // BADADDR --xxxxxxxxxxxxxx + ROM_LOAD( "13.bin", 0x00c000, 0x04000, CRC(11489cc6) SHA1(34aa4e4da2b5125d555b89894a77901673b89dd1) ) + ROM_IGNORE( 0x0c000 ) // BADADDR --xxxxxxxxxxxxxx + + ROM_REGION( 0x080000, "tilegfx", 0 ) + ROM_LOAD( "06.bin", 0x000000, 0x20000, CRC(38c31817) SHA1(cb24ed8702d62066366924c033c07ffc78bd1fad) ) + ROM_LOAD( "08.bin", 0x020000, 0x20000, CRC(32e39e29) SHA1(44f22ed6c983541c7fea5857ba0456aaa87b36d1) ) + ROM_LOAD( "10.bin", 0x040000, 0x20000, CRC(5ccec796) SHA1(2cc191a4267819eb31962726e2ed4567c825c39e) ) + ROM_LOAD( "12.bin", 0x060000, 0x20000, CRC(0c54a091) SHA1(3eecb285b5a7bbc310c87492516d7ffb2841aa3b) ) + + ROM_REGION( 0x080000, "spritegfx", ROMREGION_INVERT ) + ROM_LOAD( "15.bin", 0x000000, 0x10000, CRC(516b6c09) SHA1(9d02514dece864b087f67886009ce54bd51b5575) ) + ROM_LOAD( "14.bin", 0x010000, 0x10000, CRC(f36390a9) SHA1(e5ea36e91b3ced068281524ee79d0432f489715c) ) + ROM_LOAD( "17.bin", 0x020000, 0x10000, CRC(0da825f9) SHA1(cfba0c85fc767726c1d63f87468335d1c2f1eed8) ) + ROM_LOAD( "16.bin", 0x030000, 0x10000, CRC(228429d8) SHA1(3b2dbea53807929c24d593c469a83172f7747f66) ) + ROM_LOAD( "19.bin", 0x040000, 0x10000, CRC(26371c18) SHA1(0887041d86dc9f19dad264ae27dc56fb89ac3265) ) + ROM_LOAD( "18.bin", 0x050000, 0x10000, CRC(75aa9b86) SHA1(0c221bd2e8a5472bb0e515f27fb72b0c8e8c0ca4) ) + ROM_LOAD( "21.bin", 0x060000, 0x10000, CRC(d5a60096) SHA1(a8e351a4b020b4fc2b2cb7d3f0fdfb43fc44d7d9) ) + ROM_LOAD( "20.bin", 0x070000, 0x10000, CRC(36bbf467) SHA1(627b5847ffb098c92edfd58c25391799f3b209e0) ) + + ROM_REGION( 0x1000, "plds", 0 ) // from twcup90b2 set + TWCUP90B_PLD_DEVICES +ROM_END + + /* World Cup '90 Hack with European teams, like 'Euro League' @@ -1013,6 +1056,7 @@ void wc90b_state::init_wc90b() GAME( 1989, twcup90b1, twcup90, wc90b, wc90b, wc90b_state, init_wc90b, ROT0, "bootleg", "Euro League (Italian hack of Tecmo World Cup '90, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1989, twcup90ba, twcup90, wc90b, wc90b, wc90b_state, init_wc90b, ROT0, "bootleg", "Euro League (Italian hack of Tecmo World Cup '90, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1989, twcup90b3, twcup90, wc90b, wc90b, wc90b_state, init_wc90b, ROT0, "bootleg", "Euro League (Italian hack of Tecmo World Cup '90, set 3)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1989, twcup90b2, twcup90, wc90b, wc90b, wc90b_state, init_wc90b, ROT0, "bootleg", "Worldcup '90 (hack)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) GAME( 1989, twcup90bb, twcup90, wc90b, wc90b, wc90b_state, init_wc90b, ROT0, "bootleg", "World Cup '90 (European hack, different title)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // not sure if it best fits here, in wc90.cpp, or in a new driver, it shares the weird tile decoding with the bootlegs tho -- cgit v1.2.3