summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2021-04-24 01:23:03 +0100
committer GitHub <noreply@github.com>2021-04-24 02:23:03 +0200
commit18ead2f86f90426d74ff68abc80ae3a73a710ec1 (patch)
treedbcaa735ce4ba66c243a0d2660f166358f5b460c
parentf14602896d8e8547e2d77650f65168cb053bca5a (diff)
tweaks to the funkyjet addition, also apply single pixel video offset to match hardware (#7996)
-rw-r--r--src/mame/drivers/funkyjet.cpp53
-rw-r--r--src/mame/includes/funkyjet.h4
-rw-r--r--src/mame/video/funkyjet.cpp16
3 files changed, 56 insertions, 17 deletions
diff --git a/src/mame/drivers/funkyjet.cpp b/src/mame/drivers/funkyjet.cpp
index 3576571ff30..7f6918de7b9 100644
--- a/src/mame/drivers/funkyjet.cpp
+++ b/src/mame/drivers/funkyjet.cpp
@@ -2,6 +2,8 @@
// copyright-holders:Bryan McPhail
/***************************************************************************
+ All game use a DE-0372-0 PCB (see below for layout)
+
Funky Jet (c) 1992 Data East / Mitchell Corporation
Sotsugyo Shousho (c) 1995 Mitchell Corporation
@@ -98,7 +100,6 @@ Notes:
#include "sound/okim6295.h"
#include "sound/ym2151.h"
#include "emupal.h"
-#include "screen.h"
#include "speaker.h"
/******************************************************************************/
@@ -244,6 +245,17 @@ static INPUT_PORTS_START( funkyjetj )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
+static INPUT_PORTS_START( funkyjeta2 )
+ PORT_INCLUDE(funkyjetj)
+
+ PORT_MODIFY("DSW")
+ PORT_DIPNAME( 0xc000, 0xc000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:2,1")
+ PORT_DIPSETTING( 0x0000, "0" )
+ PORT_DIPSETTING( 0x8000, "1" )
+ PORT_DIPSETTING( 0xc000, "2" )
+ PORT_DIPSETTING( 0x4000, "3" )
+INPUT_PORTS_END
+
static INPUT_PORTS_START( sotsugyo )
PORT_INCLUDE(funkyjet)
@@ -305,7 +317,7 @@ GFXDECODE_END
void funkyjet_state::funkyjet(machine_config &config)
{
/* basic machine hardware */
- M68000(config, m_maincpu, XTAL(28'000'000)/2); /* 28 MHz crystal */
+ M68000(config, m_maincpu, XTAL(28'322'000)/2); /* 28 MHz crystal - 28.322000 on funkyjeta2 PCB at least*/
m_maincpu->set_addrmap(AS_PROGRAM, &funkyjet_state::funkyjet_map);
m_maincpu->set_vblank_int("screen", FUNC(funkyjet_state::irq6_line_hold));
@@ -315,13 +327,13 @@ void funkyjet_state::funkyjet(machine_config &config)
m_audiocpu->add_route(ALL_OUTPUTS, "rspeaker", 0);
/* video hardware */
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
- screen.set_refresh_hz(58);
- screen.set_vblank_time(ATTOSECONDS_IN_USEC(529));
- screen.set_size(40*8, 32*8);
- screen.set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
- screen.set_screen_update(FUNC(funkyjet_state::screen_update));
- screen.set_palette("palette");
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(58);
+ m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(529));
+ m_screen->set_size(40*8, 32*8);
+ m_screen->set_visarea(0*8, 40*8-1, 1*8, 31*8-1);
+ m_screen->set_screen_update(FUNC(funkyjet_state::screen_update));
+ m_screen->set_palette("palette");
DECO146PROT(config, m_deco146, 0);
m_deco146->port_a_cb().set_ioport("INPUTS");
@@ -380,7 +392,9 @@ ROM_START( funkyjet )
ROM_LOAD( "mat00", 0x080000, 0x80000, CRC(fbda0228) SHA1(815d49898d02e699393e370209181f2ca8301949) )
ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "jk03.15h", 0x00000, 0x20000, CRC(69a0eaf7) SHA1(05038e82ee03106625f05082fe9912e16be181ee) )
+ // needs verifying, looks like a bad dump compared to the ROM in funkyjeta2
+ // 0x20 bytes at 0x79e0 are blanked out and 0x20 bytes at 0xa6a0 are replaced with different (bad?) data
+ ROM_LOAD( "jk03.15h", 0x00000, 0x20000, BAD_DUMP CRC(69a0eaf7) SHA1(05038e82ee03106625f05082fe9912e16be181ee) )
ROM_END
ROM_START( funkyjeta )
@@ -399,16 +413,17 @@ ROM_START( funkyjeta )
ROM_LOAD( "mat00", 0x080000, 0x80000, CRC(fbda0228) SHA1(815d49898d02e699393e370209181f2ca8301949) )
ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "jk03.15h", 0x00000, 0x20000, CRC(69a0eaf7) SHA1(05038e82ee03106625f05082fe9912e16be181ee) )
+ // see comment in funkyjet set
+ ROM_LOAD( "jk03.15h", 0x00000, 0x20000, BAD_DUMP CRC(69a0eaf7) SHA1(05038e82ee03106625f05082fe9912e16be181ee) )
ROM_END
ROM_START( funkyjeta2 )
ROM_REGION( 0x80000, "maincpu", 0 ) /* 68000 code */
- ROM_LOAD16_BYTE( "jk00-1.12f", 0x00000, 0x40000, CRC(a18de697) SHA1(063f7f4c31c80b8fd807699e0412abb9271ddc59) ) /* sldh */
- ROM_LOAD16_BYTE( "jk01-1.13f", 0x00001, 0x40000, CRC(695a27cd) SHA1(79b4e61e7c6bdab439d70993c296443f97339351) ) /* sldh */
+ ROM_LOAD16_BYTE( "12f", 0x00000, 0x40000, CRC(a18de697) SHA1(063f7f4c31c80b8fd807699e0412abb9271ddc59) ) // labels were blank
+ ROM_LOAD16_BYTE( "13f", 0x00001, 0x40000, CRC(695a27cd) SHA1(79b4e61e7c6bdab439d70993c296443f97339351) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Sound CPU */
- ROM_LOAD( "jk02.16f", 0x00000, 0x10000, CRC(748c0bd8) SHA1(35910e6a4c4f198fb76bde0f5b053e2c66cfa0ff) )
+ ROM_LOAD( "16f", 0x00000, 0x10000, CRC(748c0bd8) SHA1(35910e6a4c4f198fb76bde0f5b053e2c66cfa0ff) )
ROM_REGION( 0x080000, "gfx1", 0 )
ROM_LOAD( "mat02", 0x000000, 0x80000, CRC(e4b94c7e) SHA1(7b6ddd0bd388c8d32277fce4b3abb102724bc7d1) ) /* Encrypted chars */
@@ -418,7 +433,7 @@ ROM_START( funkyjeta2 )
ROM_LOAD( "mat00", 0x080000, 0x80000, CRC(fbda0228) SHA1(815d49898d02e699393e370209181f2ca8301949) )
ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "jk03.15h", 0x00000, 0x20000, CRC(d7c0f0fe) SHA1(7a4a21bbf0da27767de099fba66011732b2c835a) ) /* sldh */
+ ROM_LOAD( "15h", 0x00000, 0x20000, CRC(d7c0f0fe) SHA1(7a4a21bbf0da27767de099fba66011732b2c835a) )
ROM_END
ROM_START( funkyjetj )
@@ -437,7 +452,8 @@ ROM_START( funkyjetj )
ROM_LOAD( "mat00", 0x080000, 0x80000, CRC(fbda0228) SHA1(815d49898d02e699393e370209181f2ca8301949) )
ROM_REGION( 0x40000, "oki", 0 ) /* ADPCM samples */
- ROM_LOAD( "jh03.15h", 0x00000, 0x20000, CRC(69a0eaf7) SHA1(05038e82ee03106625f05082fe9912e16be181ee) ) /* same as jk03.15h from world set */
+ // see comment in funkyjet set, was this verified as label is different?
+ ROM_LOAD( "jh03.15h", 0x00000, 0x20000, BAD_DUMP CRC(69a0eaf7) SHA1(05038e82ee03106625f05082fe9912e16be181ee) ) /* same as jk03.15h from world set */
ROM_END
ROM_START( sotsugyo )
@@ -468,6 +484,9 @@ void funkyjet_state::init_funkyjet()
GAME( 1992, funkyjet, 0, funkyjet, funkyjet, funkyjet_state, init_funkyjet, ROT0, "Mitchell", "Funky Jet (World, rev 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, funkyjeta, funkyjet, funkyjet, funkyjet, funkyjet_state, init_funkyjet, ROT0, "Mitchell", "Funky Jet (World)", MACHINE_SUPPORTS_SAVE )
-GAME( 1992, funkyjeta2,funkyjet, funkyjet, funkyjet, funkyjet_state, init_funkyjet, ROT0, "Mitchell", "Funky Jet (World, alternate demo)", MACHINE_SUPPORTS_SAVE )
+// This set, from a Korean PCB, has numerous changes, including a different 'how to play' demo, modified stage layouts
+// It also has you collecting smiley faces rather than fuel cells to charge your super
+GAME( 1992, funkyjeta2,funkyjet, funkyjet, funkyjeta2,funkyjet_state, init_funkyjet, ROT0, "Mitchell", "Funky Jet (Korea, prototype?)", MACHINE_SUPPORTS_SAVE )
GAME( 1992, funkyjetj, funkyjet, funkyjet, funkyjetj, funkyjet_state, init_funkyjet, ROT0, "Mitchell (Data East Corporation license)", "Funky Jet (Japan, rev 2)", MACHINE_SUPPORTS_SAVE )
+
GAME( 1995, sotsugyo, 0, funkyjet, sotsugyo, funkyjet_state, init_funkyjet, ROT0, "Mitchell (Atlus license)", "Sotsugyo Shousho", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/funkyjet.h b/src/mame/includes/funkyjet.h
index b70f5db8bfa..ff705f5bf85 100644
--- a/src/mame/includes/funkyjet.h
+++ b/src/mame/includes/funkyjet.h
@@ -6,6 +6,8 @@
*************************************************************************/
+#include "screen.h"
+
#include "cpu/h6280/h6280.h"
#include "video/decospr.h"
#include "video/deco16ic.h"
@@ -19,6 +21,7 @@ public:
: driver_device(mconfig, type, tag)
, m_spriteram(*this, "spriteram")
, m_pf_rowscroll(*this, "pf%u_rowscroll", 1)
+ , m_screen(*this, "screen")
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_deco146(*this, "ioprot")
@@ -36,6 +39,7 @@ private:
required_shared_ptr_array<uint16_t, 2> m_pf_rowscroll;
/* devices */
+ required_device<screen_device> m_screen;
required_device<cpu_device> m_maincpu;
required_device<h6280_device> m_audiocpu;
required_device<deco146_device> m_deco146;
diff --git a/src/mame/video/funkyjet.cpp b/src/mame/video/funkyjet.cpp
index 5a6b56964f2..00bc1975d1b 100644
--- a/src/mame/video/funkyjet.cpp
+++ b/src/mame/video/funkyjet.cpp
@@ -13,6 +13,22 @@
uint32_t funkyjet_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
+ // Similar to chinatwn and tumblep, see video/supbtime.cpp
+ //
+ // This causes a 2 pixel gap on the left side of the first stage of all worlds in funkyjet
+ // but allows subsequent stages to be centered and avoids corruption on the world select
+ // screen after each world. It also correctly aligns the graphics in sotsugyo.
+ //
+ // The 2 pixel gap on the first stage of each world has been verified to occur on hardware.
+ // (it can easily be seen by moving your player sprite to the far left)
+ //
+ // it is unclear where this offset comes from, but real hardware videos confirm it is needed
+
+ m_deco_tilegen->set_scrolldx(0, 0, 1, 1);
+ m_deco_tilegen->set_scrolldx(0, 1, 1, 1);
+ m_deco_tilegen->set_scrolldx(1, 0, 1, 1);
+ m_deco_tilegen->set_scrolldx(1, 1, 1, 1);
+
uint16_t flip = m_deco_tilegen->pf_control_r(0);
flip_screen_set(BIT(flip, 7));