From 41a009484f35399dcf007cb248a5d33abd20a57b Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Fri, 8 May 2020 15:53:20 +0200 Subject: [PATCH] New working clones ------------------ Circus / Acrobat TV (bootleg) [f205v, caius] --- src/mame/audio/circus.cpp | 2 +- src/mame/drivers/circus.cpp | 39 +++++++++++++++++++++++++++++++++++-- src/mame/includes/circus.h | 37 ++++++++++++++++++++--------------- src/mame/mame.lst | 1 + src/mame/video/circus.cpp | 6 +++--- 5 files changed, 63 insertions(+), 22 deletions(-) diff --git a/src/mame/audio/circus.cpp b/src/mame/audio/circus.cpp index c5e27151029..a1d302e77ac 100644 --- a/src/mame/audio/circus.cpp +++ b/src/mame/audio/circus.cpp @@ -149,7 +149,7 @@ DISCRETE_SOUND_END /* and also is used to enable the amplifier and trigger the */ /* discrete circuitry that produces sound effects and music */ -WRITE8_MEMBER(circus_state::circus_clown_z_w) +void circus_state::circus_clown_z_w(uint8_t data) { m_clown_z = (data & 0x0f); *(memregion("maincpu")->base() + 0x8000) = data; logerror("Z:%02x\n",data); //DEBUG diff --git a/src/mame/drivers/circus.cpp b/src/mame/drivers/circus.cpp index 2a1f9bd0c0d..906b0a1f2b2 100644 --- a/src/mame/drivers/circus.cpp +++ b/src/mame/drivers/circus.cpp @@ -35,7 +35,7 @@ C000 Option Switches D000 Paddle Position and Interrupt Reset (where applicable) NOTES: - - Circus: Taito licensed and releasd the game as "Acrobat TV" + - Circus: Taito licensed and released the game as "Acrobat TV" TODO: - generic video timing (vsync, vblank, # of scanlines) @@ -56,7 +56,7 @@ D000 Paddle Position and Interrupt Reset (where applicable) #include "crash.lh" -READ8_MEMBER(circus_state::circus_paddle_r) +uint8_t circus_state::circus_paddle_r() { // also clears irq m_maincpu->set_input_line(0, CLEAR_LINE); @@ -441,6 +441,10 @@ ROM_START( circus ) ROM_REGION( 0x0200, "gfx2", 0 ) // clown sprite ROM_LOAD( "9012.14d", 0x0000, 0x0200, CRC(2fde3930) SHA1(a21e2d342f16a39a07edf4bea8d698a52216ecba) ) + + ROM_REGION( 0x400, "extra_proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but should match + ROM_LOAD( "dm74s570-d4.4d", 0x000, 0x200, BAD_DUMP CRC(aad8da33) SHA1(1d60a6b75b94f5be5bad190ef56e9e3da20bf81a) ) + ROM_LOAD( "dm74s570-d5.5d", 0x200, 0x200, BAD_DUMP CRC(ed2493fa) SHA1(57ee357b68383b0880bfa385820605bede500747) ) ROM_END ROM_START( springbd ) @@ -463,6 +467,36 @@ ROM_START( springbd ) ROM_REGION( 0x0200, "gfx2", 0 ) // clown sprite ROM_LOAD( "93448.14d", 0x0000, 0x0200, CRC(2fde3930) SHA1(a21e2d342f16a39a07edf4bea8d698a52216ecba) ) + + ROM_REGION( 0x400, "extra_proms", 0 ) // timing? not used by the emulation, dumped for the circusb bootleg but should match + ROM_LOAD( "dm74s570-d4.4d", 0x000, 0x200, BAD_DUMP CRC(aad8da33) SHA1(1d60a6b75b94f5be5bad190ef56e9e3da20bf81a) ) + ROM_LOAD( "dm74s570-d5.5d", 0x200, 0x200, BAD_DUMP CRC(ed2493fa) SHA1(57ee357b68383b0880bfa385820605bede500747) ) +ROM_END + +ROM_START( circusb ) // bootleg found both on a PCB and a PROMs blister, labeled 'Circus - punteggio basso' ('Circus - low scoring') + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "6341-1j-a1.1a", 0x1000, 0x0200, CRC(68e710ba) SHA1(63957802f8db3b4ac7bbab83376771ce1744c6b3) ) + ROM_LOAD( "f93448bpc-a2.2a", 0x1200, 0x0200, CRC(b8acdbc5) SHA1(634bb11089f7a57a316b6829954cc4da4523f267) ) + ROM_LOAD( "sn74s474n1-a3.3a", 0x1400, 0x0200, CRC(901dfff6) SHA1(c1f48845456e88d54981608afd00ddb92d97da99) ) + ROM_LOAD( "sn74s474n1-a5.5a", 0x1600, 0x0200, CRC(9dfdae38) SHA1(dc59a5f90a5a49fa071aada67eda768d3ecef010) ) + ROM_LOAD( "sn74s474n1-a6.6a", 0x1800, 0x0200, CRC(c8681cf6) SHA1(681cfea75bee8a86f9f4645e6c6b94b44762dae9) ) + ROM_LOAD( "6341-1j-a7.7a", 0x1a00, 0x0200, CRC(585f633e) SHA1(46133409f42e8cbc095dde576ce07d97b235972d) ) + ROM_LOAD( "6341-1j-a8.8a", 0x1c00, 0x0200, CRC(69cc409f) SHA1(b77289e62313e8535ce40686df7238aa9c0035bc) ) + ROM_LOAD( "6341-1j-a9.9a", 0x1e00, 0x0200, CRC(aff835eb) SHA1(d6d95510d4a046f48358fef01103bcc760eb71ed) ) + ROM_RELOAD( 0xfe00, 0x0200 ) // for the reset and interrupt vectors + + ROM_REGION( 0x0800, "gfx1", 0 ) // character set + ROM_LOAD( "sn74s474n1-c4.4c", 0x0000, 0x0200, CRC(6efc315a) SHA1(d5a4a64a901853fff56df3c65512afea8336aad2) ) + ROM_LOAD( "sn74s474n1-c3.3c", 0x0200, 0x0200, CRC(30d72ef5) SHA1(45fc8285e213bf3906a26205a8c0b22f311fd6c3) ) + ROM_LOAD( "sn74s474n1-c2.2c", 0x0400, 0x0200, CRC(361da7ee) SHA1(6e6fe5b37ccb4c11aa4abbd9b7df772953abfe7e) ) + ROM_LOAD( "sn74s474n1-c1.1c", 0x0600, 0x0200, CRC(1f954bb3) SHA1(62a958b48078caa639b96f62a690583a1c8e83f5) ) + + ROM_REGION( 0x0200, "gfx2", 0 ) // clown sprite + ROM_LOAD( "sn74s474n1-d14.14d", 0x0000, 0x0200, CRC(2fde3930) SHA1(a21e2d342f16a39a07edf4bea8d698a52216ecba) ) + + ROM_REGION( 0x400, "extra_proms", 0 ) // timing? not used by the emulation + ROM_LOAD( "dm74s570-d4.4d", 0x000, 0x200, CRC(aad8da33) SHA1(1d60a6b75b94f5be5bad190ef56e9e3da20bf81a) ) + ROM_LOAD( "dm74s570-d5.5d", 0x200, 0x200, CRC(ed2493fa) SHA1(57ee357b68383b0880bfa385820605bede500747) ) ROM_END ROM_START( robotbwl ) @@ -589,6 +623,7 @@ void circus_state::init_ripcord() GAMEL( 1977, circus, 0, circus, circus, circus_state, init_circus, ROT0, "Exidy / Taito", "Circus / Acrobat TV", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) GAMEL( 1977, springbd, circus, circus, circus, circus_state, init_circus, ROT0, "bootleg (Sub-Electro)", "Springboard (bootleg of Circus)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) // looks like a text hack, but we've seen 2 identical copies so it's worth supporting +GAMEL( 1977, circusb, circus, circus, circus, circus_state, init_circus, ROT0, "bootleg", "Circus / Acrobat TV (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_circus ) GAME( 1977, robotbwl, 0, robotbwl, robotbwl, circus_state, init_robotbwl, ROT0, "Exidy", "Robot Bowl", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND ) GAMEL( 1979, crash, 0, crash, crash, circus_state, init_crash, ROT0, "Exidy", "Crash", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash ) GAMEL( 1979, crasha, crash, crash, crash, circus_state, init_crash, ROT0, "Exidy", "Crash (alt)", MACHINE_IMPERFECT_COLORS | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND, layout_crash ) diff --git a/src/mame/includes/circus.h b/src/mame/includes/circus.h index d081c378530..80b439aee0e 100644 --- a/src/mame/includes/circus.h +++ b/src/mame/includes/circus.h @@ -24,6 +24,22 @@ public: m_palette(*this, "palette") { } + void robotbwl(machine_config &config); + void ripcord(machine_config &config); + void crash(machine_config &config); + void circus(machine_config &config); + + void init_ripcord(); + void init_circus(); + void init_robotbwl(); + void init_crash(); + +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + +private: /* memory pointers */ required_shared_ptr m_videoram; @@ -42,19 +58,12 @@ public: /* game id */ int m_game_id; - DECLARE_READ8_MEMBER(circus_paddle_r); - DECLARE_WRITE8_MEMBER(circus_videoram_w); - DECLARE_WRITE8_MEMBER(circus_clown_x_w); - DECLARE_WRITE8_MEMBER(circus_clown_y_w); - DECLARE_WRITE8_MEMBER(circus_clown_z_w); - void init_ripcord(); - void init_circus(); - void init_robotbwl(); - void init_crash(); + uint8_t circus_paddle_r(); + void circus_videoram_w(offs_t offset, uint8_t data); + void circus_clown_x_w(uint8_t data); + void circus_clown_y_w(uint8_t data); + void circus_clown_z_w(uint8_t data); TILE_GET_INFO_MEMBER(get_bg_tile_info); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; uint32_t screen_update_circus(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_robotbwl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_crash(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -68,10 +77,6 @@ public: void robotbwl_draw_bowling_alley( bitmap_ind16 &bitmap, const rectangle &cliprect ); void robotbwl_draw_ball( bitmap_ind16 &bitmap, const rectangle &cliprect ); void crash_draw_car( bitmap_ind16 &bitmap, const rectangle &cliprect ); - void robotbwl(machine_config &config); - void ripcord(machine_config &config); - void crash(machine_config &config); - void circus(machine_config &config); void circus_map(address_map &map); }; /*----------- defined in audio/circus.c -----------*/ diff --git a/src/mame/mame.lst b/src/mame/mame.lst index cb656fd318c..585ac1eb14a 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -10282,6 +10282,7 @@ wotwc // (c) 1981 @source:circus.cpp circus // no copyright notice [1977?] +circusb // bootleg crash // Exidy [1979?] crasha // no copyright notice [1979?] ripcord // Exidy [1977?] diff --git a/src/mame/video/circus.cpp b/src/mame/video/circus.cpp index 366470bf735..e70aad8cb83 100644 --- a/src/mame/video/circus.cpp +++ b/src/mame/video/circus.cpp @@ -13,18 +13,18 @@ #include "includes/circus.h" -WRITE8_MEMBER(circus_state::circus_videoram_w) +void circus_state::circus_videoram_w(offs_t offset, uint8_t data) { m_videoram[offset] = data; m_bg_tilemap->mark_tile_dirty(offset); } -WRITE8_MEMBER(circus_state::circus_clown_x_w) +void circus_state::circus_clown_x_w(uint8_t data) { m_clown_x = 240 - data; } -WRITE8_MEMBER(circus_state::circus_clown_y_w) +void circus_state::circus_clown_y_w(uint8_t data) { m_clown_y = 240 - data; }