This commit is contained in:
Michaël Banaan Ananas 2012-09-25 02:21:15 +00:00
parent dcccfc3d36
commit bb40e5f86a
3 changed files with 360 additions and 270 deletions

View File

@ -34,11 +34,19 @@ I/O
The 2 ay-8910 read ports are responsible for reading the sound commands. The 2 ay-8910 read ports are responsible for reading the sound commands.
Notes: Notes:
* "Jack to Mame no Ki (Jack the Giant Killer)" and - "Jack to Mame no Ki (Jack the Giant Killer)" and
"Pro Billiard (Tri Pool)" is developed by Noma Trading "Pro Billiard (Tri Pool)" is developed by Noma Trading
(distributed via SNK). Hara Industries probably a bootlegger. (distributed via SNK). Hara Industries probably a bootlegger.
Todo:
- fix striv hanging notes
- fix tripool palette problems (see attract)
The tripool driver used to have a hack making the vblank interrupt go off
twice per frame, this made the game run way too fast, but no palette bug.
- what's the correct irq0 frequency of joinem/unclepoo/loverboy?
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
@ -47,6 +55,7 @@ The 2 ay-8910 read ports are responsible for reading the sound commands.
#include "includes/jack.h" #include "includes/jack.h"
/************************************* /*************************************
* *
* Memory handlers * Memory handlers
@ -60,7 +69,6 @@ READ8_MEMBER(jack_state::timer_r)
return m_audiocpu->total_cycles() / m_timer_rate; return m_audiocpu->total_cycles() / m_timer_rate;
} }
WRITE8_MEMBER(jack_state::jack_sh_command_w) WRITE8_MEMBER(jack_state::jack_sh_command_w)
{ {
soundlatch_byte_w(space, 0, data); soundlatch_byte_w(space, 0, data);
@ -68,35 +76,7 @@ WRITE8_MEMBER(jack_state::jack_sh_command_w)
} }
/***************************************************************/
WRITE8_MEMBER(jack_state::joinem_control_w)
{
// d0: related to test mode?
// d1: unused?
// d2: ?
// d3-d4: palette bank
int palette_bank = data & (machine().total_colors() - 1) >> 3 & 0x18;
if (m_joinem_palette_bank != palette_bank)
{
m_joinem_palette_bank = palette_bank;
m_bg_tilemap->mark_all_dirty();
}
// d5: assume nmi enable
m_joinem_nmi_enable = data & 0x20;
// d6: unused?
// d7: flip screen
flip_screen_set(data & 0x80);
}
/*
Super Triv questions read handler
*/
READ8_MEMBER(jack_state::striv_question_r) READ8_MEMBER(jack_state::striv_question_r)
{ {
@ -131,6 +111,32 @@ READ8_MEMBER(jack_state::striv_question_r)
return 0; // the value read from the configuration reads is discarded return 0; // the value read from the configuration reads is discarded
} }
WRITE8_MEMBER(jack_state::joinem_control_w)
{
// d0: related to test mode?
// d1: unused?
// d2: ?
// d3-d4: palette bank
int palette_bank = data & (machine().total_colors() - 1) >> 3 & 0x18;
if (m_joinem_palette_bank != palette_bank)
{
m_joinem_palette_bank = palette_bank;
m_bg_tilemap->mark_all_dirty();
}
// d5: assume nmi enable
m_joinem_nmi_enable = data & 0x20;
// d6: unused?
// d7: flip screen
flip_screen_set(data & 0x80);
}
/************************************* /*************************************
* *
* Address maps * Address maps
@ -155,6 +161,13 @@ static ADDRESS_MAP_START( jack_map, AS_PROGRAM, 8, jack_state )
AM_RANGE(0xc000, 0xffff) AM_ROM AM_RANGE(0xc000, 0xffff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( striv_map, AS_PROGRAM, 8, jack_state )
AM_RANGE(0xb000, 0xb0ff) AM_WRITENOP
AM_RANGE(0xc000, 0xcfff) AM_READ(striv_question_r)
AM_IMPORT_FROM( jack_map )
ADDRESS_MAP_END
static ADDRESS_MAP_START( joinem_map, AS_PROGRAM, 8, jack_state ) static ADDRESS_MAP_START( joinem_map, AS_PROGRAM, 8, jack_state )
AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x0000, 0x7fff) AM_ROM
AM_RANGE(0x8000, 0x8fff) AM_RAM AM_RANGE(0x8000, 0x8fff) AM_RAM
@ -191,6 +204,7 @@ static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, jack_state )
ADDRESS_MAP_END ADDRESS_MAP_END
/************************************* /*************************************
* *
* Input ports * Input ports
@ -267,6 +281,7 @@ static INPUT_PORTS_START( jack )
PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
/* Same as 'jack', but different coinage */ /* Same as 'jack', but different coinage */
static INPUT_PORTS_START( jack2 ) static INPUT_PORTS_START( jack2 )
PORT_INCLUDE( jack ) PORT_INCLUDE( jack )
@ -284,6 +299,7 @@ static INPUT_PORTS_START( jack2 )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
INPUT_PORTS_END INPUT_PORTS_END
/* Same as 'jack', but another different coinage */ /* Same as 'jack', but another different coinage */
static INPUT_PORTS_START( jack3 ) static INPUT_PORTS_START( jack3 )
PORT_INCLUDE( jack ) PORT_INCLUDE( jack )
@ -301,6 +317,7 @@ static INPUT_PORTS_START( jack3 )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
INPUT_PORTS_END INPUT_PORTS_END
/* Same as 'jack', but different "Bullets per Bean Collected" and "Difficulty" Dip Switches */ /* Same as 'jack', but different "Bullets per Bean Collected" and "Difficulty" Dip Switches */
static INPUT_PORTS_START( treahunt ) static INPUT_PORTS_START( treahunt )
PORT_INCLUDE( jack ) PORT_INCLUDE( jack )
@ -314,6 +331,7 @@ static INPUT_PORTS_START( treahunt )
PORT_DIPSETTING( 0x80, "20" ) PORT_DIPSETTING( 0x80, "20" )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( zzyzzyxx ) static INPUT_PORTS_START( zzyzzyxx )
PORT_START("DSW1") PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!1,!2") PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!1,!2")
@ -386,6 +404,7 @@ static INPUT_PORTS_START( zzyzzyxx )
PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( freeze ) static INPUT_PORTS_START( freeze )
PORT_START("DSW1") PORT_START("DSW1")
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:!1") PORT_DIPNAME( 0x01, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:!1")
@ -454,6 +473,7 @@ static INPUT_PORTS_START( freeze )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( sucasino ) static INPUT_PORTS_START( sucasino )
PORT_START("DSW1") PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!1,!2") PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!1,!2")
@ -499,6 +519,7 @@ static INPUT_PORTS_START( sucasino )
PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( tripool ) static INPUT_PORTS_START( tripool )
PORT_START("DSW1") PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!1,!2") PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:!1,!2")
@ -557,6 +578,75 @@ static INPUT_PORTS_START( tripool )
PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( striv )
PORT_START("DSW1")
PORT_DIPNAME( 0x02, 0x00, "Monitor" ) PORT_DIPLOCATION("SW1:!2")
PORT_DIPSETTING( 0x02, "Horizontal" )
PORT_DIPSETTING( 0x00, "Vertical" )
PORT_DIPNAME( 0x05, 0x05, "Gaming Option Number" ) PORT_DIPLOCATION("SW1:!1,!3")
PORT_DIPSETTING( 0x01, "2" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x05, "3" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x00, "4" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x04, "5" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x01, "4" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPSETTING( 0x05, "5" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPSETTING( 0x00, "6" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPSETTING( 0x04, "7" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!4")
PORT_DIPSETTING( 0x08, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!5")
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 1C_1C ) )
PORT_DIPNAME( 0x20, 0x20, "Gaming Option" ) PORT_DIPLOCATION("SW1:!6")
PORT_DIPSETTING( 0x20, "Number of Wrong Answer" )
PORT_DIPSETTING( 0x00, "Number of Questions" )
PORT_DIPNAME( 0x40, 0x40, "Show Correct Answer" ) PORT_DIPLOCATION("SW1:!7")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:!8")
PORT_START("DSW2")
PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:!1" )
PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW2:!2" )
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW2:!3" )
PORT_DIPUNKNOWN_DIPLOC( 0x08, 0x00, "SW2:!4" )
PORT_DIPUNKNOWN_DIPLOC( 0x10, 0x00, "SW2:!5" )
PORT_DIPUNKNOWN_DIPLOC( 0x20, 0x00, "SW2:!6" )
PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x00, "SW2:!7" )
PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x00, "SW2:!8" )
// PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) //?
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON4 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN2")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0xfd, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN3")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) //?
INPUT_PORTS_END
static INPUT_PORTS_START( joinem ) static INPUT_PORTS_START( joinem )
PORT_START("DSW1") PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!1,!2") PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:!1,!2")
@ -621,6 +711,7 @@ static INPUT_PORTS_START( joinem )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // ? PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // ?
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( unclepoo ) static INPUT_PORTS_START( unclepoo )
PORT_INCLUDE( joinem ) PORT_INCLUDE( joinem )
@ -633,8 +724,11 @@ static INPUT_PORTS_START( unclepoo )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_COCKTAIL
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( loverboy ) static INPUT_PORTS_START( loverboy )
PORT_START("DSW1") PORT_INCLUDE( joinem )
PORT_MODIFY("DSW1")
PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!1,!2,!3,!4") PORT_DIPNAME( 0x0f, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!1,!2,!3,!4")
PORT_DIPSETTING( 0x0c, DEF_STR( 4C_1C ) ) PORT_DIPSETTING( 0x0c, DEF_STR( 4C_1C ) )
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) ) PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
@ -663,7 +757,7 @@ static INPUT_PORTS_START( loverboy )
PORT_DIPSETTING( 0x80, DEF_STR( Upright ) ) PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
PORT_START("DSW2") PORT_MODIFY("DSW2")
PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:!1" ) PORT_DIPUNKNOWN_DIPLOC( 0x01, 0x00, "SW2:!1" )
PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW2:!2" ) PORT_DIPUNKNOWN_DIPLOC( 0x02, 0x00, "SW2:!2" )
PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW2:!3" ) PORT_DIPUNKNOWN_DIPLOC( 0x04, 0x00, "SW2:!3" )
@ -673,118 +767,37 @@ static INPUT_PORTS_START( loverboy )
PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x00, "SW2:!7" ) PORT_DIPUNKNOWN_DIPLOC( 0x40, 0x00, "SW2:!7" )
PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x00, "SW2:!8" ) PORT_DIPUNKNOWN_DIPLOC( 0x80, 0x00, "SW2:!8" )
PORT_START("IN0") PORT_MODIFY("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("IN1") PORT_MODIFY("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_SPECIAL ) // otherwise it doesn't boot because the code is buggy
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END INPUT_PORTS_END
static INPUT_PORTS_START( striv )
PORT_START("DSW1")
PORT_DIPNAME( 0x02, 0x00, "Monitor" ) PORT_DIPLOCATION("SW1:!2")
PORT_DIPSETTING( 0x02, "Horizontal" )
PORT_DIPSETTING( 0x00, "Vertical" )
PORT_DIPNAME( 0x05, 0x05, "Gaming Option Number" ) PORT_DIPLOCATION("SW1:!1,!3")
PORT_DIPSETTING( 0x01, "2" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x05, "3" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x00, "4" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x04, "5" ) PORT_CONDITION("DSW1", 0x20, EQUALS, 0x20)
PORT_DIPSETTING( 0x01, "4" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPSETTING( 0x05, "5" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPSETTING( 0x00, "6" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPSETTING( 0x04, "7" ) PORT_CONDITION("DSW1", 0x20, NOTEQUALS, 0x20)
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:!4")
PORT_DIPSETTING( 0x08, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:!5")
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x10, DEF_STR( 1C_1C ) )
PORT_DIPNAME( 0x20, 0x20, "Gaming Option" ) PORT_DIPLOCATION("SW1:!6")
PORT_DIPSETTING( 0x20, "Number of Wrong Answer" )
PORT_DIPSETTING( 0x00, "Number of Questions" )
PORT_DIPNAME( 0x40, 0x40, "Show Correct Answer" ) PORT_DIPLOCATION("SW1:!7")
PORT_DIPSETTING( 0x00, DEF_STR( No ) )
PORT_DIPSETTING( 0x40, DEF_STR( Yes ) )
PORT_SERVICE( 0x80, IP_ACTIVE_LOW ) PORT_DIPLOCATION("SW1:!8")
PORT_START("DSW2")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) //?
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON4 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN1")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_PLAYER(2)
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN2")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_BIT( 0xfd, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("IN3")
PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) //?
INPUT_PORTS_END
/************************************* /*************************************
* *
* Graphics definitions * Machine configs
* *
*************************************/ *************************************/
static const gfx_layout charlayout = static const gfx_layout charlayout =
{ {
8,8, /* 8*8 characters */ 8,8,
RGN_FRAC(1,2), /* 1024 characters */ RGN_FRAC(1,2),
2, /* 2 bits per pixel */ 2,
{ RGN_FRAC(0,2), RGN_FRAC(1,2) }, /* the two bitplanes are separated */ { RGN_FRAC(0,2), RGN_FRAC(1,2) },
{ 0, 1, 2, 3, 4, 5, 6, 7 }, { 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 }, { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8 /* every char takes 16 bytes */ 8*8
}; };
static GFXDECODE_START( jack ) static GFXDECODE_START( jack )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 8 ) GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 8 )
GFXDECODE_END GFXDECODE_END
static const gfx_layout joinem_charlayout = static const gfx_layout joinem_charlayout =
{ {
8,8, 8,8,
@ -800,6 +813,7 @@ static GFXDECODE_START( joinem )
GFXDECODE_ENTRY( "gfx1", 0, joinem_charlayout, 0, 32 ) GFXDECODE_ENTRY( "gfx1", 0, joinem_charlayout, 0, 32 )
GFXDECODE_END GFXDECODE_END
static const ay8910_interface ay8910_config = static const ay8910_interface ay8910_config =
{ {
AY8910_LEGACY_OUTPUT, AY8910_LEGACY_OUTPUT,
@ -809,39 +823,56 @@ static const ay8910_interface ay8910_config =
}; };
/************************************* /***************************************************************/
*
* Machine driver
*
*************************************/
void jack_state::machine_start() void jack_state::machine_start()
{
}
void jack_state::machine_reset()
{
}
MACHINE_START_MEMBER(jack_state,striv)
{ {
save_item(NAME(m_question_address)); save_item(NAME(m_question_address));
save_item(NAME(m_question_rom)); save_item(NAME(m_question_rom));
save_item(NAME(m_remap_address)); save_item(NAME(m_remap_address));
} }
void jack_state::machine_reset() MACHINE_RESET_MEMBER(jack_state,striv)
{ {
joinem_control_w(m_maincpu->space(AS_PROGRAM), 0, 0, 0xff);
int i;
m_question_address = 0; m_question_address = 0;
m_question_rom = 0; m_question_rom = 0;
for (i = 0; i < 16; i++) for (int i = 0; i < 16; i++)
m_remap_address[i] = 0; m_remap_address[i] = 0;
} }
MACHINE_START_MEMBER(jack_state,joinem)
{
save_item(NAME(m_joinem_nmi_enable));
save_item(NAME(m_joinem_palette_bank));
}
MACHINE_RESET_MEMBER(jack_state,joinem)
{
joinem_control_w(m_maincpu->space(AS_PROGRAM), 0, 0, 0xff);
}
/***************************************************************/
static MACHINE_CONFIG_START( jack, jack_state ) static MACHINE_CONFIG_START( jack, jack_state )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 18000000/6) /* 3 MHz */ MCFG_CPU_ADD("maincpu", Z80, XTAL_18MHz/6)
MCFG_CPU_PROGRAM_MAP(jack_map) MCFG_CPU_PROGRAM_MAP(jack_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", jack_state, irq0_line_hold) MCFG_CPU_VBLANK_INT_DRIVER("screen", jack_state, irq0_line_hold)
MCFG_CPU_ADD("audiocpu", Z80,18000000/12) /* 1.5 MHz */ MCFG_CPU_ADD("audiocpu", Z80, XTAL_18MHz/6)
MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_PROGRAM_MAP(sound_map)
MCFG_CPU_IO_MAP(sound_io_map) MCFG_CPU_IO_MAP(sound_io_map)
@ -859,18 +890,29 @@ static MACHINE_CONFIG_START( jack, jack_state )
/* sound hardware */ /* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("aysnd", AY8910, 18000000/12) MCFG_SOUND_ADD("aysnd", AY8910, XTAL_18MHz/12)
MCFG_SOUND_CONFIG(ay8910_config) MCFG_SOUND_CONFIG(ay8910_config)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( tripool, jack )
static MACHINE_CONFIG_DERIVED( striv, jack )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PERIODIC_INT_DRIVER(jack_state, irq0_line_hold, 2*60) /* tripool needs 2 or the palette is broken */ MCFG_CPU_PROGRAM_MAP(striv_map)
MCFG_MACHINE_START_OVERRIDE(jack_state,striv)
MCFG_MACHINE_RESET_OVERRIDE(jack_state,striv)
/* video hardware */
MCFG_SCREEN_MODIFY("screen")
MCFG_SCREEN_UPDATE_DRIVER(jack_state, screen_update_striv)
MACHINE_CONFIG_END MACHINE_CONFIG_END
/***************************************************************/
INTERRUPT_GEN_MEMBER(jack_state::joinem_vblank_irq) INTERRUPT_GEN_MEMBER(jack_state::joinem_vblank_irq)
{ {
if (m_joinem_nmi_enable) if (m_joinem_nmi_enable)
@ -883,7 +925,10 @@ static MACHINE_CONFIG_DERIVED( joinem, jack )
MCFG_CPU_MODIFY("maincpu") MCFG_CPU_MODIFY("maincpu")
MCFG_CPU_PROGRAM_MAP(joinem_map) MCFG_CPU_PROGRAM_MAP(joinem_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", jack_state, joinem_vblank_irq) MCFG_CPU_VBLANK_INT_DRIVER("screen", jack_state, joinem_vblank_irq)
MCFG_CPU_PERIODIC_INT_DRIVER(jack_state, irq0_line_hold, 2*60) MCFG_CPU_PERIODIC_INT_DRIVER(jack_state, irq0_line_hold, 250) // ??? controls game speed
MCFG_MACHINE_START_OVERRIDE(jack_state,joinem)
MCFG_MACHINE_RESET_OVERRIDE(jack_state,joinem)
/* video hardware */ /* video hardware */
MCFG_SCREEN_MODIFY("screen") MCFG_SCREEN_MODIFY("screen")
@ -911,6 +956,7 @@ static MACHINE_CONFIG_DERIVED( unclepoo, joinem )
MACHINE_CONFIG_END MACHINE_CONFIG_END
/************************************* /*************************************
* *
* ROM definition(s) * ROM definition(s)
@ -938,6 +984,7 @@ ROM_START( jack )
ROM_LOAD( "jgk.j10", 0x3000, 0x1000, CRC(eab890b2) SHA1(a5b83dff6bc6fd51f80db136fad8075262720f01) ) ROM_LOAD( "jgk.j10", 0x3000, 0x1000, CRC(eab890b2) SHA1(a5b83dff6bc6fd51f80db136fad8075262720f01) )
ROM_END ROM_END
ROM_START( jack2 ) ROM_START( jack2 )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "jgk.j8", 0x0000, 0x1000, CRC(fe229e20) SHA1(191cfb7bb08d46cab713e23abd69f27db1685346) ) ROM_LOAD( "jgk.j8", 0x0000, 0x1000, CRC(fe229e20) SHA1(191cfb7bb08d46cab713e23abd69f27db1685346) )
@ -959,6 +1006,7 @@ ROM_START( jack2 )
ROM_LOAD( "jgk.j10", 0x3000, 0x1000, CRC(eab890b2) SHA1(a5b83dff6bc6fd51f80db136fad8075262720f01) ) ROM_LOAD( "jgk.j10", 0x3000, 0x1000, CRC(eab890b2) SHA1(a5b83dff6bc6fd51f80db136fad8075262720f01) )
ROM_END ROM_END
ROM_START( jack3 ) ROM_START( jack3 )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "jack8", 0x0000, 0x1000, CRC(632151d2) SHA1(080f29818d537474c821b9920427bda47f5a7254) ) ROM_LOAD( "jack8", 0x0000, 0x1000, CRC(632151d2) SHA1(080f29818d537474c821b9920427bda47f5a7254) )
@ -980,6 +1028,7 @@ ROM_START( jack3 )
ROM_LOAD( "jgk.j10", 0x3000, 0x1000, CRC(eab890b2) SHA1(a5b83dff6bc6fd51f80db136fad8075262720f01) ) ROM_LOAD( "jgk.j10", 0x3000, 0x1000, CRC(eab890b2) SHA1(a5b83dff6bc6fd51f80db136fad8075262720f01) )
ROM_END ROM_END
ROM_START( treahunt ) ROM_START( treahunt )
ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */ ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + 64k for decrypted opcodes */
ROM_LOAD( "thunt-1.f2", 0x0000, 0x1000, CRC(0b35858c) SHA1(b8f80c69fcbce71e1b85c8f39599f8bebfeb2585) ) ROM_LOAD( "thunt-1.f2", 0x0000, 0x1000, CRC(0b35858c) SHA1(b8f80c69fcbce71e1b85c8f39599f8bebfeb2585) )
@ -1001,6 +1050,7 @@ ROM_START( treahunt )
ROM_LOAD( "thunt-11.a2", 0x3000, 0x1000, CRC(f9781143) SHA1(f168648a78240fdf02063d39f324838f4dfe9a56) ) ROM_LOAD( "thunt-11.a2", 0x3000, 0x1000, CRC(f9781143) SHA1(f168648a78240fdf02063d39f324838f4dfe9a56) )
ROM_END ROM_END
ROM_START( zzyzzyxx ) ROM_START( zzyzzyxx )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "a.2f", 0x0000, 0x1000, CRC(a9102e34) SHA1(80d71df7d235980603f35aa3f474aaf58fb39946) ) ROM_LOAD( "a.2f", 0x0000, 0x1000, CRC(a9102e34) SHA1(80d71df7d235980603f35aa3f474aaf58fb39946) )
@ -1023,6 +1073,7 @@ ROM_START( zzyzzyxx )
ROM_LOAD( "l.1a", 0x3000, 0x1000, CRC(ab421a83) SHA1(1cc3e1bcf9e90ffbf7bfeeb0caa8a4f63b34146a) ) ROM_LOAD( "l.1a", 0x3000, 0x1000, CRC(ab421a83) SHA1(1cc3e1bcf9e90ffbf7bfeeb0caa8a4f63b34146a) )
ROM_END ROM_END
ROM_START( zzyzzyxx2 ) ROM_START( zzyzzyxx2 )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "a.2f", 0x0000, 0x1000, CRC(a9102e34) SHA1(80d71df7d235980603f35aa3f474aaf58fb39946) ) ROM_LOAD( "a.2f", 0x0000, 0x1000, CRC(a9102e34) SHA1(80d71df7d235980603f35aa3f474aaf58fb39946) )
@ -1045,6 +1096,7 @@ ROM_START( zzyzzyxx2 )
ROM_LOAD( "l.1a", 0x3000, 0x1000, CRC(ab421a83) SHA1(1cc3e1bcf9e90ffbf7bfeeb0caa8a4f63b34146a) ) ROM_LOAD( "l.1a", 0x3000, 0x1000, CRC(ab421a83) SHA1(1cc3e1bcf9e90ffbf7bfeeb0caa8a4f63b34146a) )
ROM_END ROM_END
ROM_START( brix ) ROM_START( brix )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "a", 0x0000, 0x1000, CRC(050e0d70) SHA1(f5e0ed0845443701233de194d9ce24ec35e03a27) ) ROM_LOAD( "a", 0x0000, 0x1000, CRC(050e0d70) SHA1(f5e0ed0845443701233de194d9ce24ec35e03a27) )
@ -1067,6 +1119,7 @@ ROM_START( brix )
ROM_LOAD( "l.1a", 0x3000, 0x1000, CRC(ab421a83) SHA1(1cc3e1bcf9e90ffbf7bfeeb0caa8a4f63b34146a) ) ROM_LOAD( "l.1a", 0x3000, 0x1000, CRC(ab421a83) SHA1(1cc3e1bcf9e90ffbf7bfeeb0caa8a4f63b34146a) )
ROM_END ROM_END
ROM_START( freeze ) ROM_START( freeze )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "freeze.f2", 0x0000, 0x1000, CRC(0a431665) SHA1(57b7fc72c7e3b0d09b4a0676a4e7094657e2b742) ) ROM_LOAD( "freeze.f2", 0x0000, 0x1000, CRC(0a431665) SHA1(57b7fc72c7e3b0d09b4a0676a4e7094657e2b742) )
@ -1088,6 +1141,7 @@ ROM_START( freeze )
ROM_LOAD( "freeze.2a", 0x3000, 0x1000, CRC(dd70ddd6) SHA1(d03cac0b4248da5d49ffac6ee57a3f8dd368731b) ) ROM_LOAD( "freeze.2a", 0x3000, 0x1000, CRC(dd70ddd6) SHA1(d03cac0b4248da5d49ffac6ee57a3f8dd368731b) )
ROM_END ROM_END
ROM_START( sucasino ) ROM_START( sucasino )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "1", 0x0000, 0x1000, CRC(e116e979) SHA1(99b0c783ace93e643738a1a924cafb690d2c1127) ) ROM_LOAD( "1", 0x0000, 0x1000, CRC(e116e979) SHA1(99b0c783ace93e643738a1a924cafb690d2c1127) )
@ -1109,6 +1163,7 @@ ROM_START( sucasino )
/* 3000-3fff empty */ /* 3000-3fff empty */
ROM_END ROM_END
ROM_START( tripool ) ROM_START( tripool )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "tri73a.bin", 0x0000, 0x1000, CRC(96893aa7) SHA1(ea1dc5824d89c1bb131850625a65d018a9127179) ) ROM_LOAD( "tri73a.bin", 0x0000, 0x1000, CRC(96893aa7) SHA1(ea1dc5824d89c1bb131850625a65d018a9127179) )
@ -1127,6 +1182,7 @@ ROM_START( tripool )
ROM_LOAD( "tri105a.bin", 0x0000, 0x1000, CRC(366a753c) SHA1(30fa8d80e42287e3e8677aefd15beab384265728) ) ROM_LOAD( "tri105a.bin", 0x0000, 0x1000, CRC(366a753c) SHA1(30fa8d80e42287e3e8677aefd15beab384265728) )
ROM_END ROM_END
ROM_START( tripoola ) ROM_START( tripoola )
ROM_REGION( 0x10000, "maincpu", 0 ) ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "tri73a.bin", 0x0000, 0x1000, CRC(96893aa7) SHA1(ea1dc5824d89c1bb131850625a65d018a9127179) ) ROM_LOAD( "tri73a.bin", 0x0000, 0x1000, CRC(96893aa7) SHA1(ea1dc5824d89c1bb131850625a65d018a9127179) )
@ -1145,67 +1201,6 @@ ROM_START( tripoola )
ROM_LOAD( "tri105a.bin", 0x0000, 0x1000, CRC(366a753c) SHA1(30fa8d80e42287e3e8677aefd15beab384265728) ) ROM_LOAD( "tri105a.bin", 0x0000, 0x1000, CRC(366a753c) SHA1(30fa8d80e42287e3e8677aefd15beab384265728) )
ROM_END ROM_END
ROM_START( joinem )
ROM_REGION( 0x10000, "maincpu", 0 ) /* main z80 cpu */
ROM_LOAD( "join1.r0", 0x0000, 0x2000, CRC(b5b2e2cc) SHA1(e939478d19ac27807ba4180835c512b5fcb8d0c5) )
ROM_LOAD( "join2.r2", 0x2000, 0x2000, CRC(bcf140e6) SHA1(3fb4fbb758518d8ae26abbe76f12678cf988bd0e) )
ROM_LOAD( "join3.r4", 0x4000, 0x2000, CRC(fe04e4d4) SHA1(9b34cc5915dd78340d1cedb34f5d397d3b39ca14) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound z80 cpu */
ROM_LOAD( "join7.s0", 0x0000, 0x1000, CRC(bb8a7814) SHA1(cfb85408827b96a81401223256e23082b7e9598f) )
ROM_REGION( 0x3000, "gfx1", 0 ) /* gfx - 8x8x3bpp */
ROM_LOAD( "join4.p3", 0x0000, 0x1000, CRC(4964c82c) SHA1(7a45399db20f9bbdb2de58243732e3951ffe358c) )
ROM_LOAD( "join5.p2", 0x1000, 0x1000, CRC(ae78fa89) SHA1(8f43fd2ec037185a1b9bd9c61c49ad891c504d4d) )
ROM_LOAD( "join6.p1", 0x2000, 0x1000, CRC(2b533261) SHA1(ce6c1fa833b34aeb401f430d212415c33beb2922) )
ROM_REGION( 0x100, "proms", 0 ) /* colours */
ROM_LOAD_NIB_LOW( "l82s129.11n", 0x000, 0x100, CRC(7b724211) SHA1(7396c773e8d48dea856d9482d6c48de966616c83) )
ROM_LOAD_NIB_HIGH( "h82s129.12n", 0x000, 0x100, CRC(2e81c5ff) SHA1(e103c8813af704d5de11fe705de5105ff3a691c3) )
ROM_END
ROM_START( unclepoop )
ROM_REGION( 0x10000, "maincpu", 0 ) /* main z80 cpu */
ROM_LOAD( "01.f17", 0x00000, 0x2000, CRC(92fb238c) SHA1(e9476c5c1a0bf9e8c6c364ac022ed1d97ae66d2e) )
ROM_LOAD( "02.f14", 0x02000, 0x2000, CRC(b99214ef) SHA1(c8e4af0efbc5ea543277b2764dc6f119aae477ca) )
ROM_LOAD( "03.f11", 0x04000, 0x2000, CRC(a136af97) SHA1(cfa610bf357870053617fed8aef6bb30bd996422) )
ROM_LOAD( "04.f09", 0x06000, 0x2000, CRC(c4bcd414) SHA1(df3125358530f5fb8d202bddcb0ef5e322fabb7b) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound z80 cpu */
ROM_LOAD( "08.c15", 0x00000, 0x1000, CRC(fd84106b) SHA1(891853d2b39850a981016108b74ca20337d2cdd8) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* gfx - 8x8x3bpp */
ROM_LOAD( "07.h04", 0x0000, 0x2000, CRC(e2f73e99) SHA1(61cb09ff424ba63b892b4822e7ed916af73412f1) )
ROM_LOAD( "06.j04", 0x2000, 0x2000, CRC(94b5f676) SHA1(32c27854726636c4ce03bb6a83b32d04ed6c42af) )
ROM_LOAD( "05.k04", 0x4000, 0x2000, CRC(64026934) SHA1(a5342335d02d34fa6ba2b29484ed71ecc96292f2) )
ROM_REGION( 0x200, "proms", 0 ) /* colours */
ROM_LOAD_NIB_LOW( "diatec_l.bin", 0x000, 0x100, CRC(b04d466a) SHA1(1438abeae76ef807ba34bd6d3e4c44f707dbde6e) )
ROM_LOAD_NIB_HIGH( "diatec_h.bin", 0x000, 0x100, CRC(938601b1) SHA1(8213284989bebb5f7375878181840de8079dc1f3) )
ROM_END
ROM_START( loverboy )
ROM_REGION( 0x10000, "maincpu", 0 ) /* main z80 cpu */
ROM_LOAD( "lover.r0", 0x0000, 0x2000, CRC(ffec4e41) SHA1(65428ebcb3af47071fef70a35388e070a019f692) )
ROM_LOAD( "lover.r2", 0x2000, 0x2000, CRC(04052262) SHA1(056a225c8625e53881753b0b0330f9b277d14a7d) )
ROM_LOAD( "lover.r4", 0x4000, 0x2000, CRC(ce5f3b49) SHA1(cb55e1f7c3df59389ac14b7da4f584ae054abca3) )
ROM_LOAD( "lover.r6", 0x6000, 0x1000, CRC(839d79b7) SHA1(ac1c0fbf23e7d1a53b47dae16170857c55e6ae48) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound z80 cpu */
ROM_LOAD( "lover.s0", 0x0000, 0x1000, CRC(ec38111c) SHA1(09efded9e905658bdbcde4ad4f0b4cb9585bdb33) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* gfx - 8x8x3bpp */
ROM_LOAD( "lover.p3", 0x0000, 0x2000, CRC(1a519c8f) SHA1(36f546deaf36e8cd3bd113d84fd5e5f6e98d5de5) )
ROM_LOAD( "lover.p2", 0x2000, 0x2000, CRC(e465372f) SHA1(345b769ebc33f60daa9692b64e8ef43062552a33) )
ROM_LOAD( "lover.p1", 0x4000, 0x2000, CRC(cda0d87e) SHA1(efff230e994e21705902f252e50ee40a20444c0f) )
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD_NIB_LOW( "color.n11", 0x000, 0x200, CRC(cf4a16ae) SHA1(e17c5dfd73c5bc55c0a929cf65ee5b516c9776a5) )
ROM_LOAD_NIB_HIGH( "color.n12", 0x000, 0x200, CRC(4b11ac21) SHA1(d9e7cecfb7237335288ab6f94bb35696d8291bdf) )
ROM_END
/* /*
@ -1280,7 +1275,6 @@ ROM Daughterboard
|PR1.F2 TBFD2.U8 TBFD1.U15 | |PR1.F2 TBFD2.U8 TBFD1.U15 |
|-----------------------------| |-----------------------------|
*/ */
ROM_START( striv ) ROM_START( striv )
@ -1321,12 +1315,87 @@ ROM_START( striv )
ROM_END ROM_END
ROM_START( joinem )
ROM_REGION( 0x10000, "maincpu", 0 ) /* main z80 cpu */
ROM_LOAD( "join1.r0", 0x0000, 0x2000, CRC(b5b2e2cc) SHA1(e939478d19ac27807ba4180835c512b5fcb8d0c5) )
ROM_LOAD( "join2.r2", 0x2000, 0x2000, CRC(bcf140e6) SHA1(3fb4fbb758518d8ae26abbe76f12678cf988bd0e) )
ROM_LOAD( "join3.r4", 0x4000, 0x2000, CRC(fe04e4d4) SHA1(9b34cc5915dd78340d1cedb34f5d397d3b39ca14) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound z80 cpu */
ROM_LOAD( "join7.s0", 0x0000, 0x1000, CRC(bb8a7814) SHA1(cfb85408827b96a81401223256e23082b7e9598f) )
ROM_REGION( 0x3000, "gfx1", 0 ) /* gfx - 8x8x3bpp */
ROM_LOAD( "join4.p3", 0x0000, 0x1000, CRC(4964c82c) SHA1(7a45399db20f9bbdb2de58243732e3951ffe358c) )
ROM_LOAD( "join5.p2", 0x1000, 0x1000, CRC(ae78fa89) SHA1(8f43fd2ec037185a1b9bd9c61c49ad891c504d4d) )
ROM_LOAD( "join6.p1", 0x2000, 0x1000, CRC(2b533261) SHA1(ce6c1fa833b34aeb401f430d212415c33beb2922) )
ROM_REGION( 0x100, "proms", 0 ) /* colours */
ROM_LOAD_NIB_LOW( "l82s129.11n", 0x000, 0x100, CRC(7b724211) SHA1(7396c773e8d48dea856d9482d6c48de966616c83) )
ROM_LOAD_NIB_HIGH( "h82s129.12n", 0x000, 0x100, CRC(2e81c5ff) SHA1(e103c8813af704d5de11fe705de5105ff3a691c3) )
ROM_END
ROM_START( unclepoop )
ROM_REGION( 0x10000, "maincpu", 0 ) /* main z80 cpu */
ROM_LOAD( "01.f17", 0x0000, 0x2000, CRC(92fb238c) SHA1(e9476c5c1a0bf9e8c6c364ac022ed1d97ae66d2e) )
ROM_LOAD( "02.f14", 0x2000, 0x2000, CRC(b99214ef) SHA1(c8e4af0efbc5ea543277b2764dc6f119aae477ca) )
ROM_LOAD( "03.f11", 0x4000, 0x2000, CRC(a136af97) SHA1(cfa610bf357870053617fed8aef6bb30bd996422) )
ROM_LOAD( "04.f09", 0x6000, 0x2000, CRC(c4bcd414) SHA1(df3125358530f5fb8d202bddcb0ef5e322fabb7b) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound z80 cpu */
ROM_LOAD( "08.c15", 0x0000, 0x1000, CRC(fd84106b) SHA1(891853d2b39850a981016108b74ca20337d2cdd8) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* gfx - 8x8x3bpp */
ROM_LOAD( "07.h04", 0x0000, 0x2000, CRC(e2f73e99) SHA1(61cb09ff424ba63b892b4822e7ed916af73412f1) )
ROM_LOAD( "06.j04", 0x2000, 0x2000, CRC(94b5f676) SHA1(32c27854726636c4ce03bb6a83b32d04ed6c42af) )
ROM_LOAD( "05.k04", 0x4000, 0x2000, CRC(64026934) SHA1(a5342335d02d34fa6ba2b29484ed71ecc96292f2) )
ROM_REGION( 0x200, "proms", 0 ) /* colours */
ROM_LOAD_NIB_LOW( "diatec_l.bin", 0x000, 0x100, CRC(b04d466a) SHA1(1438abeae76ef807ba34bd6d3e4c44f707dbde6e) )
ROM_LOAD_NIB_HIGH( "diatec_h.bin", 0x000, 0x100, CRC(938601b1) SHA1(8213284989bebb5f7375878181840de8079dc1f3) )
ROM_END
ROM_START( loverboy )
ROM_REGION( 0x10000, "maincpu", 0 ) /* main z80 cpu */
ROM_LOAD( "lover.r0", 0x0000, 0x2000, CRC(ffec4e41) SHA1(65428ebcb3af47071fef70a35388e070a019f692) )
ROM_LOAD( "lover.r2", 0x2000, 0x2000, CRC(04052262) SHA1(056a225c8625e53881753b0b0330f9b277d14a7d) )
ROM_LOAD( "lover.r4", 0x4000, 0x2000, CRC(ce5f3b49) SHA1(cb55e1f7c3df59389ac14b7da4f584ae054abca3) )
ROM_LOAD( "lover.r6", 0x6000, 0x1000, CRC(839d79b7) SHA1(ac1c0fbf23e7d1a53b47dae16170857c55e6ae48) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound z80 cpu */
ROM_LOAD( "lover.s0", 0x0000, 0x1000, CRC(ec38111c) SHA1(09efded9e905658bdbcde4ad4f0b4cb9585bdb33) )
ROM_REGION( 0x6000, "gfx1", 0 ) /* gfx - 8x8x3bpp */
ROM_LOAD( "lover.p3", 0x0000, 0x2000, CRC(1a519c8f) SHA1(36f546deaf36e8cd3bd113d84fd5e5f6e98d5de5) )
ROM_LOAD( "lover.p2", 0x2000, 0x2000, CRC(e465372f) SHA1(345b769ebc33f60daa9692b64e8ef43062552a33) )
ROM_LOAD( "lover.p1", 0x4000, 0x2000, CRC(cda0d87e) SHA1(efff230e994e21705902f252e50ee40a20444c0f) )
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD_NIB_LOW( "color.n11", 0x000, 0x200, CRC(cf4a16ae) SHA1(e17c5dfd73c5bc55c0a929cf65ee5b516c9776a5) )
ROM_LOAD_NIB_HIGH( "color.n12", 0x000, 0x200, CRC(4b11ac21) SHA1(d9e7cecfb7237335288ab6f94bb35696d8291bdf) )
ROM_END
/************************************* /*************************************
* *
* Driver initialization * Driver initialization
* *
*************************************/ *************************************/
DRIVER_INIT_MEMBER(jack_state,jack)
{
m_timer_rate = 256;
}
DRIVER_INIT_MEMBER(jack_state,zzyzzyxx)
{
m_timer_rate = 32;
}
static void treahunt_decode( running_machine &machine ) static void treahunt_decode( running_machine &machine )
{ {
int A; int A;
@ -1372,21 +1441,12 @@ static void treahunt_decode( running_machine &machine )
} }
} }
DRIVER_INIT_MEMBER(jack_state,jack)
{
m_timer_rate = 128;
}
DRIVER_INIT_MEMBER(jack_state,treahunt) DRIVER_INIT_MEMBER(jack_state,treahunt)
{ {
m_timer_rate = 128; m_timer_rate = 256;
treahunt_decode(machine()); treahunt_decode(machine());
} }
DRIVER_INIT_MEMBER(jack_state,zzyzzyxx)
{
m_timer_rate = 16;
}
DRIVER_INIT_MEMBER(jack_state,loverboy) DRIVER_INIT_MEMBER(jack_state,loverboy)
{ {
@ -1405,7 +1465,7 @@ DRIVER_INIT_MEMBER(jack_state,loverboy)
ROM[0x13] = 0x01; ROM[0x13] = 0x01;
ROM[0x12] = 0x9d; ROM[0x12] = 0x9d;
m_timer_rate = 16; m_timer_rate = 32;
} }
@ -1437,15 +1497,11 @@ DRIVER_INIT_MEMBER(jack_state,striv)
} }
} }
// Set-up the weirdest questions read ever done m_timer_rate = 256;
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0xc000, 0xcfff, read8_delegate(FUNC(jack_state::striv_question_r),this));
// Nop out unused sprites writes
machine().device("maincpu")->memory().space(AS_PROGRAM).nop_write(0xb000, 0xb0ff);
m_timer_rate = 128;
} }
/************************************* /*************************************
* *
* Game driver(s) * Game driver(s)
@ -1460,10 +1516,10 @@ GAME( 1982, zzyzzyxx, 0, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90,
GAME( 1982, zzyzzyxx2, zzyzzyxx, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90, "Cinematronics / Advanced Microcomputer Systems", "Zzyzzyxx (set 2)", GAME_SUPPORTS_SAVE ) GAME( 1982, zzyzzyxx2, zzyzzyxx, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90, "Cinematronics / Advanced Microcomputer Systems", "Zzyzzyxx (set 2)", GAME_SUPPORTS_SAVE )
GAME( 1982, brix, zzyzzyxx, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90, "Cinematronics / Advanced Microcomputer Systems", "Brix", GAME_SUPPORTS_SAVE ) GAME( 1982, brix, zzyzzyxx, jack, zzyzzyxx, jack_state, zzyzzyxx, ROT90, "Cinematronics / Advanced Microcomputer Systems", "Brix", GAME_SUPPORTS_SAVE )
GAME( 1984, freeze, 0, jack, freeze, jack_state, jack, ROT90, "Cinematronics", "Freeze", GAME_SUPPORTS_SAVE | GAME_NO_COCKTAIL ) GAME( 1984, freeze, 0, jack, freeze, jack_state, jack, ROT90, "Cinematronics", "Freeze", GAME_SUPPORTS_SAVE | GAME_NO_COCKTAIL )
GAME( 1981, tripool, 0, jack, tripool, jack_state, jack, ROT90, "Noma (Casino Tech license)", "Tri-Pool (Casino Tech)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
GAME( 1981, tripoola, tripool, jack, tripool, jack_state, jack, ROT90, "Noma (Costal Games license)", "Tri-Pool (Costal Games)", GAME_WRONG_COLORS | GAME_SUPPORTS_SAVE )
GAME( 1984, sucasino, 0, jack, sucasino, jack_state, jack, ROT90, "Data Amusement", "Super Casino", GAME_SUPPORTS_SAVE ) GAME( 1984, sucasino, 0, jack, sucasino, jack_state, jack, ROT90, "Data Amusement", "Super Casino", GAME_SUPPORTS_SAVE )
GAME( 1981, tripool, 0, tripool, tripool, jack_state, jack, ROT90, "Noma (Casino Tech license)", "Tri-Pool (Casino Tech)", GAME_SUPPORTS_SAVE ) GAME( 1985, striv, 0, striv, striv, jack_state, striv, ROT270, "Nova du Canada", "Super Triv", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) // Hara Industries PCB
GAME( 1981, tripoola, tripool, tripool, tripool, jack_state, jack, ROT90, "Noma (Costal Games license)", "Tri-Pool (Costal Games)", GAME_SUPPORTS_SAVE )
GAME( 1983, joinem, 0, joinem, joinem, jack_state, zzyzzyxx, ROT90, "Global Corporation", "Joinem", GAME_SUPPORTS_SAVE ) GAME( 1983, joinem, 0, joinem, joinem, jack_state, zzyzzyxx, ROT90, "Global Corporation", "Joinem", GAME_SUPPORTS_SAVE )
GAME( 1983, unclepoop, unclepoo, unclepoo, unclepoo, jack_state, zzyzzyxx, ROT90, "Diatec", "Uncle Poo (nincompoop version)", GAME_NOT_WORKING ) GAME( 1983, unclepoop, unclepoo, unclepoo, unclepoo, jack_state, zzyzzyxx, ROT90, "Diatec", "Uncle Poo (nincompoop version)", GAME_NOT_WORKING ) // based on Joinem?
GAME( 1983, loverboy, 0, joinem,loverboy, jack_state, loverboy, ROT90, "G.T Enterprise Inc", "Lover Boy", GAME_SUPPORTS_SAVE ) GAME( 1983, loverboy, 0, joinem, loverboy, jack_state, loverboy, ROT90, "G.T Enterprise Inc.", "Lover Boy", GAME_SUPPORTS_SAVE )
GAME( 1985, striv, 0, jack, striv, jack_state, striv, ROT270, "Hara Industries", "Super Triv", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )

View File

@ -20,7 +20,7 @@ public:
/* device- and memory pointers */ /* device- and memory pointers */
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu; required_device<cpu_device> m_audiocpu;
required_shared_ptr<UINT8> m_spriteram; optional_shared_ptr<UINT8> m_spriteram;
optional_shared_ptr<UINT8> m_scrollram; optional_shared_ptr<UINT8> m_scrollram;
required_shared_ptr<UINT8> m_videoram; required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_colorram; required_shared_ptr<UINT8> m_colorram;
@ -58,8 +58,13 @@ public:
TILE_GET_INFO_MEMBER(joinem_get_bg_tile_info); TILE_GET_INFO_MEMBER(joinem_get_bg_tile_info);
DECLARE_VIDEO_START(joinem); DECLARE_VIDEO_START(joinem);
DECLARE_PALETTE_INIT(joinem); DECLARE_PALETTE_INIT(joinem);
DECLARE_MACHINE_START(striv);
DECLARE_MACHINE_RESET(striv);
DECLARE_MACHINE_START(joinem);
DECLARE_MACHINE_RESET(joinem);
UINT32 screen_update_jack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_jack(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_striv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_joinem(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_joinem(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
virtual void machine_start(); virtual void machine_start();

View File

@ -10,6 +10,7 @@
#include "includes/jack.h" #include "includes/jack.h"
WRITE8_MEMBER(jack_state::jack_videoram_w) WRITE8_MEMBER(jack_state::jack_videoram_w)
{ {
m_videoram[offset] = data; m_videoram[offset] = data;
@ -39,6 +40,9 @@ WRITE8_MEMBER(jack_state::jack_flipscreen_w)
flip_screen_set(offset); flip_screen_set(offset);
} }
/**************************************************************************/
TILE_GET_INFO_MEMBER(jack_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(jack_state::get_bg_tile_info)
{ {
int code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x18) << 5); int code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x18) << 5);
@ -60,6 +64,9 @@ void jack_state::video_start()
m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(jack_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(jack_state::tilemap_scan_cols_flipy),this), 8, 8, 32, 32); m_bg_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(jack_state::get_bg_tile_info),this), tilemap_mapper_delegate(FUNC(jack_state::tilemap_scan_cols_flipy),this), 8, 8, 32, 32);
} }
/**************************************************************************/
static void jack_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) static void jack_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
jack_state *state = machine.driver_data<jack_state>(); jack_state *state = machine.driver_data<jack_state>();
@ -98,10 +105,25 @@ UINT32 jack_state::screen_update_jack(screen_device &screen, bitmap_ind16 &bitma
return 0; return 0;
} }
/*
UINT32 jack_state::screen_update_striv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// no sprites
m_bg_tilemap->draw(bitmap, cliprect, 0, 0);
return 0;
}
/***************************************************************************
Joinem has a bit different video hardware with proms based palette, Joinem has a bit different video hardware with proms based palette,
3bpp gfx and different banking / colors bits 3bpp gfx and different banking / colors bits
*/
***************************************************************************/
WRITE8_MEMBER(jack_state::joinem_scroll_w) WRITE8_MEMBER(jack_state::joinem_scroll_w)
{ {
@ -120,6 +142,9 @@ WRITE8_MEMBER(jack_state::joinem_scroll_w)
m_scrollram[offset] = data; m_scrollram[offset] = data;
} }
/**************************************************************************/
PALETTE_INIT_MEMBER(jack_state,joinem) PALETTE_INIT_MEMBER(jack_state,joinem)
{ {
const UINT8 *color_prom = machine().root_device().memregion("proms")->base(); const UINT8 *color_prom = machine().root_device().memregion("proms")->base();
@ -145,6 +170,7 @@ PALETTE_INIT_MEMBER(jack_state,joinem)
} }
} }
TILE_GET_INFO_MEMBER(jack_state::joinem_get_bg_tile_info) TILE_GET_INFO_MEMBER(jack_state::joinem_get_bg_tile_info)
{ {
int code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x03) << 8); int code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x03) << 8);
@ -159,6 +185,9 @@ VIDEO_START_MEMBER(jack_state,joinem)
m_bg_tilemap->set_scroll_cols(32); m_bg_tilemap->set_scroll_cols(32);
} }
/**************************************************************************/
static void joinem_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect ) static void joinem_draw_sprites( running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect )
{ {
jack_state *state = machine.driver_data<jack_state>(); jack_state *state = machine.driver_data<jack_state>();