Fixed input ports in Yumefuda and added Dip-Switches.

Game is now playable

New games added or promoted from NOT_WORKING status
---------------------------------------------------
(Medal) Yumefuda [Bet] [Angelo Salese]
This commit is contained in:
Angelo Salese 2008-10-19 16:58:12 +00:00
parent 9fc7f46095
commit a9c0fd7295

View File

@ -1,19 +1,18 @@
/******************************************************************************************* /*******************************************************************************************
Yumefuda (c) 198? Alba Yumefuda (c) 1991 Alba
driver by Angelo Salese driver by Angelo Salese
Notes: Notes:
-I think the name of this hardware is "Alba ZG board",an older(?) revision of the -I think the name of this hardware is "Alba ZG board",a newer revision of the
"Alba ZC board" used by Hanaroku (hanaroku.c driver). "Alba ZC board" used by Hanaroku (hanaroku.c driver).Test mode says clearly that this is
My guess is that this game is dated 1986/1987. from 1991.
TODO: TODO:
-Correct Bankswitch emulation.Obviously I'm not happy with the current implementation... -Add coin counter,coin lock etc.;
-Finish controls. -Dynamic controls if you change the Panel Type DIP-SW;
-"Custom RAM" emulation might be a simple protection issue. -"Custom RAM" emulation might be a simple protection issue;
-Need a proper screenshot of the real thing for the colors but I think they are accurate.
============================================================================================ ============================================================================================
Code disassembling Code disassembling
@ -87,8 +86,6 @@ static VIDEO_UPDATE( yumefuda )
/***************************************************************************************/ /***************************************************************************************/
static const gfx_layout charlayout = static const gfx_layout charlayout =
{ {
8,8, 8,8,
@ -164,10 +161,11 @@ static READ8_HANDLER( mux_r )
case 0x02: return input_port_read(machine, "IN2"); case 0x02: return input_port_read(machine, "IN2");
case 0x04: return input_port_read(machine, "IN3"); case 0x04: return input_port_read(machine, "IN3");
case 0x08: return input_port_read(machine, "IN4"); case 0x08: return input_port_read(machine, "IN4");
/* FIXME: Was this a quick hack? */ case 0x10: return input_port_read(machine, "IN5");
case 0x10: return 0xff; //return input_port_read(machine, "IN5"); case 0x20: return input_port_read(machine, "IN6");
case 0x20: return 0xff; //return input_port_read(machine, "IN6");
} }
//popmessage("%02x",mux_data);
return 0xff; return 0xff;
} }
@ -175,7 +173,7 @@ static WRITE8_HANDLER( mux_w )
{ {
int new_bank = (data&0xc0)>>6; int new_bank = (data&0xc0)>>6;
//0x10000 service mode //0x10000 "Learn Mode"
//0x12000 gameplay //0x12000 gameplay
//0x14000 bonus game //0x14000 bonus game
//0x16000 ? //0x16000 ?
@ -191,6 +189,26 @@ static WRITE8_HANDLER( mux_w )
mux_data = data & ~0xc0; mux_data = data & ~0xc0;
} }
static READ8_HANDLER( in7_r )
{
return input_port_read(machine, "DSW1");
}
static READ8_HANDLER( in8_r )
{
return input_port_read(machine, "DSW2");
}
static const ay8910_interface ay8910_config =
{
AY8910_LEGACY_OUTPUT,
AY8910_DEFAULT_LOADS,
in7_r,
in8_r,
NULL,
NULL
};
/***************************************************************************************/ /***************************************************************************************/
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 ) static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
@ -252,6 +270,7 @@ static MACHINE_DRIVER_START( yumefuda )
MDRV_SPEAKER_STANDARD_MONO("mono") MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD("ay", AY8910, 1500000) MDRV_SOUND_ADD("ay", AY8910, 1500000)
MDRV_SOUND_CONFIG(ay8910_config)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
MACHINE_DRIVER_END MACHINE_DRIVER_END
@ -259,166 +278,70 @@ MACHINE_DRIVER_END
static INPUT_PORTS_START( yumefuda ) static INPUT_PORTS_START( yumefuda )
PORT_START( "IN0") PORT_START( "IN0")
PORT_DIPNAME( 0x01, 0x01, "Port 0" ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 Flip-Flop") PORT_CODE(KEYCODE_F)
PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Coupon Credit") PORT_CODE(KEYCODE_7) PORT_IMPULSE(2) //coupon
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Note Credit") PORT_CODE(KEYCODE_6) PORT_IMPULSE(2) //note
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2)
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2)
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START( "IN1") PORT_START( "IN1")
PORT_DIPNAME( 0x01, 0x01, "Port 1" ) PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_Z)
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_X)
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_C)
PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_V)
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 BET Button") PORT_CODE(KEYCODE_RALT)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START( "IN2") PORT_START( "IN2")
PORT_DIPNAME( 0x01, 0x01, "Port 2" ) PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_B)
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P1 No Button") PORT_CODE(KEYCODE_A)
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("P1 Yes Button") PORT_CODE(KEYCODE_Q)
PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_CODE(KEYCODE_N)
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 )
PORT_START( "IN3") PORT_START( "IN3")
PORT_DIPNAME( 0x01, 0x01, "Port 3" ) PORT_BIT( 0x9f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("P1 BET Button") PORT_CODE(KEYCODE_2)
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("P1 Button 6 / Yes") PORT_CODE(KEYCODE_RCONTROL)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON5 )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
/*These three are actually used if you use the Mahjong Panel type*/
PORT_START( "IN4") PORT_START( "IN4")
PORT_DIPNAME( 0x01, 0x01, "Port 4" ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
/*
PORT_START( "IN5") PORT_START( "IN5")
PORT_DIPNAME( 0x01, 0x01, "Port 5" ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START( "IN6") PORT_START( "IN6")
PORT_DIPNAME( 0x01, 0x01, "Port 6" ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) /*Unused,on the PCB there's just one bank*/
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unused ) ) PORT_START("DSW1")
PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unused ) ) PORT_START("DSW2")
PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPNAME( 0x01, 0x01, "Learn Mode" )//SW Dip-Switches
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPNAME( 0x02, 0x02, DEF_STR( Service_Mode ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unused ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x08, "Panel Type" )
PORT_DIPSETTING( 0x08, "Hanafuda Panel" )
PORT_DIPSETTING( 0x00, "Mahjong Panel" )//TODO: needs dynamic controls
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unused ) ) PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )*/ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END INPUT_PORTS_END
/***************************************************************************************/ /***************************************************************************************/
@ -436,4 +359,4 @@ ROM_START( yumefuda )
ROM_LOAD("zg001003.u3", 0xc000, 0x4000, CRC(5822ff27) SHA1(d40fa0790de3c912f770ef8f610bd8c42bc3500f)) ROM_LOAD("zg001003.u3", 0xc000, 0x4000, CRC(5822ff27) SHA1(d40fa0790de3c912f770ef8f610bd8c42bc3500f))
ROM_END ROM_END
GAME( 198?, yumefuda, 0, yumefuda, yumefuda, 0, ROT0, "Alba", "(Medal) Yumefuda [BET]", GAME_NOT_WORKING ) GAME( 1991, yumefuda, 0, yumefuda, yumefuda, 0, ROT0, "Alba", "(Medal) Yumefuda [BET]", 0 )