summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/igs009.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/igs009.cpp')
-rw-r--r--src/mame/drivers/igs009.cpp72
1 files changed, 42 insertions, 30 deletions
diff --git a/src/mame/drivers/igs009.cpp b/src/mame/drivers/igs009.cpp
index 78e1308068f..638a3260df2 100644
--- a/src/mame/drivers/igs009.cpp
+++ b/src/mame/drivers/igs009.cpp
@@ -18,11 +18,11 @@ NVRAM : Battery for main RAM
---------------------------------------------------------------------------
Year Game Manufacturer Notes
---------------------------------------------------------------------------
-1997 Jingle Bell (US, V157) IGS NMI issues...
-1997 Jingle Bell (EU, V155) IGS NMI issues...
-1997 Jingle Bell (EU, V153) IGS NMI issues...
-1995 Jingle Bell (EU, V141) IGS Working
-1995? Jingle Bell (Italy, V133I) IGS Working
+1997 Jingle Bell (US, V157US) IGS patched protection
+1997 Jingle Bell (EU, V155UE) IGS patched protection
+1997 Jingle Bell (EU, V153UE) IGS patched protection
+1995 Jingle Bell (EU, V141UE) IGS patched protection
+1995? Jingle Bell (Italy, V133I) IGS patched protection
1998 Grand Prix '98 Romtec 1 reel gfx rom is bad
---------------------------------------------------------------------------
@@ -35,7 +35,6 @@ Year Game Manufacturer Notes
#include "sound/okim6295.h"
#include "machine/nvram.h"
-
class igs009_state : public driver_device
{
public:
@@ -106,7 +105,10 @@ public:
TILE_GET_INFO_MEMBER(get_gp98_reel4_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
+ void decrypt_jingbell();
DECLARE_DRIVER_INIT(jingbell);
+ DECLARE_DRIVER_INIT(jingbelli);
+
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
@@ -314,7 +316,6 @@ UINT32 igs009_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
int startclipmin = 0;
const rectangle &visarea = screen.visible_area();
-
for (i= 0;i < 0x80;i++)
{
m_reel1_tilemap->set_scrolly(i, m_bg_scroll[i]*2);
@@ -323,9 +324,6 @@ UINT32 igs009_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
m_reel4_tilemap->set_scrolly(i, m_bg_scroll[i+0x180]*2);
}
-
-
-
for (zz=0;zz<0x80-8;zz++) // -8 because of visible area (2*8 = 16)
{
rectangle clip;
@@ -395,9 +393,9 @@ WRITE8_MEMBER(igs009_state::nmi_and_coins_w)
machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c
machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in
- machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin m_out mech
+ machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin out mech
- output().set_led_value(6, data & 0x40); // led for coin m_out / m_hopper active
+ output().set_led_value(6, data & 0x40); // led for coin out / m_hopper active
m_nmi_enable = data; // data & 0x80 // nmi enable?
@@ -525,7 +523,7 @@ static ADDRESS_MAP_START( gp98_portmap, AS_IO, 8, igs009_state )
AM_RANGE( 0x5000, 0x5fff ) AM_RAM_WRITE(fg_tile_w ) AM_SHARE("fg_tile_ram")
- // seems to lacks of PPI devices...
+ // seems to lack PPI devices...
AM_RANGE( 0x6480, 0x6480 ) AM_WRITE(nmi_and_coins_w )
AM_RANGE( 0x6481, 0x6481 ) AM_READ_PORT( "SERVICE" )
AM_RANGE( 0x6482, 0x6482 ) AM_READ_PORT( "COINS" )
@@ -727,7 +725,7 @@ static const gfx_layout layout_8x8x6 =
8, 8,
RGN_FRAC(1, 3),
6,
- { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
+ { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0,
RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 },
{ STEP8(0,1) },
@@ -740,7 +738,7 @@ static const gfx_layout layout_8x32x6 =
8, 32,
RGN_FRAC(1, 3),
6,
- { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
+ { RGN_FRAC(0,3)+8,RGN_FRAC(0,3)+0,
RGN_FRAC(1,3)+8,RGN_FRAC(1,3)+0,
RGN_FRAC(2,3)+8,RGN_FRAC(2,3)+0 },
{ STEP8(0,1) },
@@ -796,14 +794,14 @@ void igs009_state::machine_start()
void igs009_state::machine_reset()
{
- m_nmi_enable = 0;
- m_hopper = 0;
- m_video_enable = 1;
+ m_nmi_enable = 0;
+ m_hopper = 0;
+ m_video_enable = 1;
}
INTERRUPT_GEN_MEMBER(igs009_state::interrupt)
{
- if (m_nmi_enable & 0x80)
+ if (m_nmi_enable & 0x80)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
@@ -1028,6 +1026,7 @@ Notes:
12/02/2008 f205v
***************************************************************************/
+
ROM_START( jingbelli )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "jinglev133i.u44", 0x00000, 0x10000, CRC(df60dc39) SHA1(ff57afd50c045b621395353fdc50ffd1e1b65e9e) )
@@ -1055,14 +1054,12 @@ ROM_START( jingbelli )
ROM_LOAD( "palce22v10h-ch-jin-u27.u27", 0x000, 0x2dd, BAD_DUMP CRC(5c4e9024) SHA1(e9d1e4df3d79c21f4ce053a84bb7b7a43d650f91) )
ROM_END
-
-DRIVER_INIT_MEMBER(igs009_state,jingbell)
+void igs009_state::decrypt_jingbell()
{
- int i;
UINT8 *rom = (UINT8 *)memregion("maincpu")->base();
size_t size = memregion("maincpu")->bytes();
- for (i=0; i<size; i++)
+ for (int i=0; i<size; i++)
{
UINT8 x = rom[i];
if (i & 0x0080)
@@ -1080,11 +1077,26 @@ DRIVER_INIT_MEMBER(igs009_state,jingbell)
rom[i] = x;
}
+}
+
+DRIVER_INIT_MEMBER(igs009_state,jingbelli)
+{
+ decrypt_jingbell();
// protection patch
+ UINT8 *rom = (UINT8 *)memregion("maincpu")->base();
rom[0x01f19] = 0x18;
}
+DRIVER_INIT_MEMBER(igs009_state,jingbell)
+{
+ decrypt_jingbell();
+
+ // protection patch
+ UINT8 *rom = (UINT8 *)memregion("maincpu")->base();
+ rom[0x0e753] = 0x18;
+}
+
/***************************************************************************
Grand Prix '98
@@ -1145,10 +1157,10 @@ ROM_START( gp98 )
ROM_END
-/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
-GAME( 1997, jingbell, 0, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (US, V157)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 1997, jingbella, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V155)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 1997, jingbellb, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V153)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
-GAME( 1995, jingbellc, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V141)", MACHINE_SUPPORTS_SAVE )
-GAME( 1995?, jingbelli, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (Italy, V133I)", MACHINE_SUPPORTS_SAVE )
-GAME( 1998, gp98, 0, gp98, jingbell, driver_device, 0, ROT0, "Romtec Co. Ltd", "Grand Prix '98 (V100K)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+/* YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS */
+GAME( 1997, jingbell, 0, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (US, V157US)", MACHINE_SUPPORTS_SAVE )
+GAME( 1997, jingbella, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V155UE)", MACHINE_SUPPORTS_SAVE ) // Shows V154UE in test mode!
+GAME( 1997, jingbellb, jingbell, jingbell, jingbell, igs009_state, jingbell, ROT0, "IGS", "Jingle Bell (EU, V153UE)", MACHINE_SUPPORTS_SAVE )
+GAME( 1995, jingbellc, jingbell, jingbell, jingbell, igs009_state, jingbelli, ROT0, "IGS", "Jingle Bell (EU, V141UE)", MACHINE_SUPPORTS_SAVE )
+GAME( 1995?, jingbelli, jingbell, jingbell, jingbell, igs009_state, jingbelli, ROT0, "IGS", "Jingle Bell (Italy, V133I)", MACHINE_SUPPORTS_SAVE )
+GAME( 1998, gp98, 0, gp98, jingbell, driver_device, 0, ROT0, "Romtec Co. Ltd", "Grand Prix '98 (V100K)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )