mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
Flicker: added remaining inputs, some notes, sound (of sorts), marked as working. [Robbbert]
This commit is contained in:
parent
e1cd97408c
commit
9b6503ac95
@ -12,13 +12,15 @@
|
||||
Some clues from PinMAME
|
||||
|
||||
ToDo:
|
||||
- Add remaining inputs
|
||||
- Better artwork
|
||||
- It freezes when F3 pressed or game tilted
|
||||
|
||||
|
||||
************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/i4004/i4004.h"
|
||||
#include "sound/beep.h"
|
||||
#include "flicker.lh"
|
||||
|
||||
class flicker_state : public driver_device
|
||||
@ -26,8 +28,10 @@ class flicker_state : public driver_device
|
||||
public:
|
||||
flicker_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu")
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_beeper(*this, BEEPER_TAG)
|
||||
{ }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(port00_w);
|
||||
DECLARE_WRITE8_MEMBER(port01_w);
|
||||
DECLARE_WRITE8_MEMBER(port10_w);
|
||||
@ -37,11 +41,10 @@ protected:
|
||||
|
||||
// devices
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<device_t> m_beeper;
|
||||
|
||||
// driver_device overrides
|
||||
virtual void machine_reset();
|
||||
public:
|
||||
DECLARE_DRIVER_INIT(flicker);
|
||||
};
|
||||
|
||||
|
||||
@ -53,20 +56,16 @@ static ADDRESS_MAP_START(flicker_map, AS_DATA, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x00FF) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( flicker_io , AS_IO, 8, flicker_state )
|
||||
static ADDRESS_MAP_START( flicker_io, AS_IO, 8, flicker_state )
|
||||
AM_RANGE(0x0000, 0x0000) AM_WRITE(port00_w)
|
||||
AM_RANGE(0x0001, 0x0001) AM_WRITE(port01_w)
|
||||
AM_RANGE(0x0002, 0x0002) AM_READ(port02_r)
|
||||
AM_RANGE(0x0010, 0x0010) AM_WRITE(port10_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
// from us patent 4093232
|
||||
static INPUT_PORTS_START( flicker )
|
||||
PORT_START("TEST")
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Door Slam") PORT_CODE(KEYCODE_HOME)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("4 coins")
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3 coins")
|
||||
PORT_BIT(0x0010, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("2 coins")
|
||||
PORT_BIT(0x0020, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1 coin credit") PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT(0x0040, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("2 credit") PORT_CODE(KEYCODE_6)
|
||||
PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3 credit") PORT_CODE(KEYCODE_7)
|
||||
@ -75,20 +74,52 @@ static INPUT_PORTS_START( flicker )
|
||||
PORT_BIT(0x0400, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("6 credit") PORT_CODE(KEYCODE_0)
|
||||
PORT_BIT(0x0800, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Tilt") PORT_CODE(KEYCODE_T)
|
||||
PORT_BIT(0x1000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Start") PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test") PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x8000, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Test")
|
||||
|
||||
PORT_START("B0")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Lane Target") PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/B Target") PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Lane 1000") PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/A Target") PORT_CODE(KEYCODE_Y)
|
||||
PORT_START("B1")
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Bumper") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Lane Target") PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/C Target") PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Lane 1000") PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("/D Target") PORT_CODE(KEYCODE_A)
|
||||
PORT_START("B2")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Spinner") PORT_CODE(KEYCODE_S)
|
||||
PORT_START("B3")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("10's Target") PORT_CODE(KEYCODE_D)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("100's Target") PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Pot Bumper") PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("3000 Hole") PORT_CODE(KEYCODE_H)
|
||||
PORT_START("B4")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("1000 Bonus") PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("500 Target") PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Out Hole") PORT_CODE(KEYCODE_X)
|
||||
PORT_START("B5")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left 500 Out") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Left Bumper") PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right 500 Out") PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("Right Bumper") PORT_CODE(KEYCODE_V)
|
||||
PORT_START("B6")
|
||||
PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("A Target") PORT_CODE(KEYCODE_B)
|
||||
PORT_BIT(0x0002, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("B target") PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT(0x0004, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("C target") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x0008, IP_ACTIVE_HIGH, IPT_OTHER) PORT_NAME("D Target") PORT_CODE(KEYCODE_COMMA)
|
||||
INPUT_PORTS_END
|
||||
|
||||
READ8_MEMBER( flicker_state::port02_r )
|
||||
{
|
||||
offset = cpu_get_reg(m_maincpu, I4004_RAM) - 0x20; // we need the full address
|
||||
|
||||
if (offset == 0)
|
||||
return ioport("B1")->read();
|
||||
else
|
||||
return 0;
|
||||
if (offset < 7)
|
||||
{
|
||||
char kbdrow[6];
|
||||
sprintf(kbdrow,"B%X",offset);
|
||||
return ioport(kbdrow)->read();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( flicker_state::port00_w )
|
||||
@ -100,6 +131,7 @@ WRITE8_MEMBER( flicker_state::port00_w )
|
||||
|
||||
WRITE8_MEMBER( flicker_state::port01_w )
|
||||
{
|
||||
// The output lines operate the various lamps (44 of them)
|
||||
offset = cpu_get_reg(m_maincpu, I4004_RAM) - 0x10; // we need the full address
|
||||
|
||||
if (offset < 0x10)
|
||||
@ -108,7 +140,49 @@ WRITE8_MEMBER( flicker_state::port01_w )
|
||||
|
||||
WRITE8_MEMBER( flicker_state::port10_w )
|
||||
{
|
||||
//offset = cpu_get_reg(m_maincpu, I4004_RAM) - 0x10; // we need the full address
|
||||
/* Outputs depend on data:
|
||||
1 = tens chime
|
||||
2 = hundreds chime
|
||||
3 = thousands chime
|
||||
4 = left bumper
|
||||
5 = right bumper
|
||||
6 = pot bumper
|
||||
7 = out hole
|
||||
8 = 3000 hole
|
||||
9 = knocker
|
||||
A = coin counter
|
||||
B = coin acceptor */
|
||||
offset = cpu_get_reg(m_maincpu, I4004_RAM) - 0x10; // we need the full address
|
||||
if (data && data != offset)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x01:
|
||||
beep_set_state(m_beeper, 1);
|
||||
beep_set_frequency(m_beeper, 2000);
|
||||
break;
|
||||
case 0x02:
|
||||
beep_set_state(m_beeper, 1);
|
||||
beep_set_frequency(m_beeper, 1500);
|
||||
break;
|
||||
case 0x03:
|
||||
beep_set_state(m_beeper, 1);
|
||||
beep_set_frequency(m_beeper, 800);
|
||||
break;
|
||||
case 0x09:
|
||||
beep_set_state(m_beeper, 1);
|
||||
beep_set_frequency(m_beeper, 200);
|
||||
break;
|
||||
case 0x0a:
|
||||
coin_counter_w(machine(), 0, 1);
|
||||
coin_counter_w(machine(), 0, 0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
beep_set_state(m_beeper, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -116,10 +190,6 @@ void flicker_state::machine_reset()
|
||||
{
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(flicker_state,flicker)
|
||||
{
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( flicker, flicker_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", I4004, XTAL_5MHz / 8)
|
||||
@ -129,6 +199,11 @@ static MACHINE_CONFIG_START( flicker, flicker_state )
|
||||
|
||||
/* Video */
|
||||
MCFG_DEFAULT_LAYOUT(layout_flicker)
|
||||
|
||||
/* Sound */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
MCFG_SOUND_ADD(BEEPER_TAG, BEEP, 0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
@ -138,4 +213,4 @@ ROM_START(flicker)
|
||||
ROM_END
|
||||
|
||||
// YEAR GAME PARENT MACHINE INPUT CLASS INIT ORIENTATION COMPANY DESCRIPTION FLAGS
|
||||
GAME(1974, flicker, 0, flicker, flicker, flicker_state, flicker, ROT0, "Nutting Associates", "Flicker (Prototype)", GAME_IS_SKELETON_MECHANICAL)
|
||||
GAME(1974, flicker, 0, flicker, flicker, driver_device, 0, ROT0, "Nutting Associates", "Flicker (Prototype)", GAME_MECHANICAL )
|
||||
|
Loading…
Reference in New Issue
Block a user