mirror of
https://github.com/holub/mame
synced 2025-05-25 07:15:25 +03:00
small cleanup to merlin.c, it is very similar to simon.c
I want to redo the merlin layout later, make it more similar/appealing.
This commit is contained in:
parent
d185076946
commit
282a6e03a5
@ -1,73 +1,63 @@
|
|||||||
/*
|
/***************************************************************************
|
||||||
|
|
||||||
Parker Bros Merlin handheld computer game
|
Parker Bros Merlin handheld computer game
|
||||||
|
* TMS1100NLL MP3404A-N2 (has internal ROM)
|
||||||
|
|
||||||
|
Other games assumed to be on similar hardware:
|
||||||
|
- Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin,
|
||||||
|
let's assume for now that the ROM contents is identical)
|
||||||
|
- Master Merlin
|
||||||
|
|
||||||
|
Another sequel, called Split Second, looks like different hardware.
|
||||||
|
|
||||||
*/
|
|
||||||
|
TODO:
|
||||||
|
- accurate rc osc
|
||||||
|
- is the rom dump good?
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
#include "cpu/tms0980/tms0980.h"
|
#include "cpu/tms0980/tms0980.h"
|
||||||
#include "sound/speaker.h"
|
#include "sound/speaker.h"
|
||||||
|
|
||||||
/* Layout */
|
|
||||||
#include "merlin.lh"
|
#include "merlin.lh"
|
||||||
|
|
||||||
|
// master clock is a single stage RC oscillator: R=?, C=?
|
||||||
|
#define MERLIN_RC_CLOCK (500000)
|
||||||
|
|
||||||
|
|
||||||
class merlin_state : public driver_device
|
class merlin_state : public driver_device
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
merlin_state(const machine_config &mconfig, device_type type, const char *tag)
|
merlin_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_speaker(*this, "speaker") ,
|
m_maincpu(*this, "maincpu"),
|
||||||
m_maincpu(*this, "maincpu") { }
|
m_button_matrix(*this, "O"),
|
||||||
|
m_speaker(*this, "speaker")
|
||||||
virtual void machine_start();
|
{ }
|
||||||
|
|
||||||
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_ioport_array<4> m_button_matrix;
|
||||||
required_device<speaker_sound_device> m_speaker;
|
required_device<speaker_sound_device> m_speaker;
|
||||||
|
|
||||||
|
UINT16 m_o;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(read_k);
|
DECLARE_READ8_MEMBER(read_k);
|
||||||
DECLARE_WRITE16_MEMBER(write_o);
|
DECLARE_WRITE16_MEMBER(write_o);
|
||||||
DECLARE_WRITE16_MEMBER(write_r);
|
DECLARE_WRITE16_MEMBER(write_r);
|
||||||
|
|
||||||
protected:
|
virtual void machine_start();
|
||||||
UINT16 m_o;
|
|
||||||
UINT16 m_r;
|
|
||||||
required_device<cpu_device> m_maincpu;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define LOG 0
|
/***************************************************************************
|
||||||
|
|
||||||
|
I/O
|
||||||
|
|
||||||
static INPUT_PORTS_START( merlin )
|
***************************************************************************/
|
||||||
PORT_START("O0")
|
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(KEYCODE_0) PORT_NAME("R0") // R0
|
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(KEYCODE_1) PORT_NAME("R1") // R1
|
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_3) PORT_NAME("R3") // R3
|
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(KEYCODE_2) PORT_NAME("R2") // R2
|
|
||||||
|
|
||||||
PORT_START("O1")
|
/* The keypad is a 4*4 matrix, connected like so:
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CODE(KEYCODE_4) PORT_NAME("R4") // R4
|
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_5) PORT_NAME("R5") // R5
|
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CODE(KEYCODE_7) PORT_NAME("R7") // R7
|
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CODE(KEYCODE_6) PORT_NAME("R6") // R6
|
|
||||||
|
|
||||||
PORT_START("O2")
|
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CODE(KEYCODE_8) PORT_NAME("R8") // R8
|
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CODE(KEYCODE_9) PORT_NAME("R9") // R9
|
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON13) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game") // SG - same game
|
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON11) PORT_CODE(KEYCODE_MINUS) PORT_NAME("R10") // R10
|
|
||||||
|
|
||||||
PORT_START("O3")
|
|
||||||
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
|
|
||||||
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON15) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn") // Comp Turn
|
|
||||||
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON14) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me") // Hit me
|
|
||||||
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON12) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") // NG - new game
|
|
||||||
|
|
||||||
INPUT_PORTS_END
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
The keypad is a 4*4 matrix, connected like so:
|
|
||||||
|
|
||||||
+----+ +----+ +----+ +----+
|
+----+ +----+ +----+ +----+
|
||||||
O0 o---| R0 |--| R1 |--| R2 |--| R3 |
|
O0 o---| R0 |--| R1 |--| R2 |--| R3 |
|
||||||
@ -88,97 +78,93 @@ O3 o------+----| CT |--| NG |--| HM |
|
|||||||
o o o o
|
o o o o
|
||||||
K1 K2 K8 K4
|
K1 K2 K8 K4
|
||||||
|
|
||||||
SG = same game, CT = comp turn, NG = new game, HM = hit me
|
SG = same game, CT = comp turn, NG = new game, HM = hit me */
|
||||||
*/
|
|
||||||
|
|
||||||
READ8_MEMBER(merlin_state::read_k)
|
READ8_MEMBER(merlin_state::read_k)
|
||||||
{
|
{
|
||||||
UINT8 data = 0;
|
UINT8 k = 0;
|
||||||
|
|
||||||
|
// read selected button rows
|
||||||
|
for (int i = 0; i < 4; i++)
|
||||||
|
if (m_o & (1 << i))
|
||||||
|
k |= m_button_matrix[i]->read();
|
||||||
|
|
||||||
if (LOG)
|
return k;
|
||||||
logerror( "read_k\n" );
|
|
||||||
|
|
||||||
if ( m_o & 0x01 )
|
|
||||||
{
|
|
||||||
data |= ioport("O0")->read();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( m_o & 0x02 )
|
|
||||||
{
|
|
||||||
data |= ioport("O1")->read();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( m_o & 0x04 )
|
|
||||||
{
|
|
||||||
data |= ioport("O2")->read();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( m_o & 0x08 )
|
|
||||||
{
|
|
||||||
data |= ioport("O3")->read();
|
|
||||||
}
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
The speaker is connected to O4 through O6. The 3 outputs are paralleled for
|
|
||||||
increased current driving capability. They are passed thru a 220 ohm resistor
|
|
||||||
and then to the speaker, which has the other side grounded. The software then
|
|
||||||
toggles these lines to make sounds and noises. (There is no audio generator
|
|
||||||
other than toggling it with a software delay between to make tones).
|
|
||||||
*/
|
|
||||||
|
|
||||||
WRITE16_MEMBER(merlin_state::write_o)
|
WRITE16_MEMBER(merlin_state::write_o)
|
||||||
{
|
{
|
||||||
if (LOG)
|
// O0-O3: input mux
|
||||||
logerror( "write_o: write %02x\n", data );
|
|
||||||
|
|
||||||
m_o = data;
|
m_o = data;
|
||||||
|
|
||||||
|
/* The speaker is connected to O4 through O6. The 3 outputs are paralleled for
|
||||||
|
increased current driving capability. They are passed thru a 220 ohm resistor
|
||||||
|
and then to the speaker, which has the other side grounded. The software then
|
||||||
|
toggles these lines to make sounds and noises. (There is no audio generator
|
||||||
|
other than toggling it with a software delay between to make tones). */
|
||||||
m_speaker->level_w(m_o & 0x70);
|
m_speaker->level_w(m_o & 0x70);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
LEDs:
|
|
||||||
|
|
||||||
R0
|
|
||||||
R1 R2 R3
|
|
||||||
R4 R5 R6
|
|
||||||
R7 R8 R9
|
|
||||||
R10
|
|
||||||
|
|
||||||
When that particular R output is high, that LED is on.
|
|
||||||
*/
|
|
||||||
|
|
||||||
WRITE16_MEMBER(merlin_state::write_r)
|
WRITE16_MEMBER(merlin_state::write_r)
|
||||||
{
|
{
|
||||||
if (LOG)
|
/* LEDs:
|
||||||
logerror( "write_r: write %04x\n", data );
|
|
||||||
|
|
||||||
m_r = data;
|
R0
|
||||||
|
R1 R2 R3
|
||||||
output_set_value( "led_0", BIT( m_r, 0 ) );
|
R4 R5 R6
|
||||||
output_set_value( "led_1", BIT( m_r, 1 ) );
|
R7 R8 R9
|
||||||
output_set_value( "led_2", BIT( m_r, 2 ) );
|
R10
|
||||||
output_set_value( "led_3", BIT( m_r, 3 ) );
|
*/
|
||||||
output_set_value( "led_4", BIT( m_r, 4 ) );
|
for (int i = 0; i < 11; i++)
|
||||||
output_set_value( "led_5", BIT( m_r, 5 ) );
|
output_set_lamp_value(i, data >> i & 1);
|
||||||
output_set_value( "led_6", BIT( m_r, 6 ) );
|
|
||||||
output_set_value( "led_7", BIT( m_r, 7 ) );
|
|
||||||
output_set_value( "led_8", BIT( m_r, 8 ) );
|
|
||||||
output_set_value( "led_9", BIT( m_r, 9 ) );
|
|
||||||
output_set_value( "led_10", BIT( m_r, 10 ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Inputs
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( merlin )
|
||||||
|
PORT_START("O.0")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(KEYCODE_0) PORT_NAME("Button R0")
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(KEYCODE_1) PORT_NAME("Button R1")
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_3) PORT_NAME("Button R3")
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(KEYCODE_2) PORT_NAME("Button R2")
|
||||||
|
|
||||||
|
PORT_START("O.1")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CODE(KEYCODE_4) PORT_NAME("Button R4")
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_5) PORT_NAME("Button R5")
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CODE(KEYCODE_7) PORT_NAME("Button R7")
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CODE(KEYCODE_6) PORT_NAME("Button R6")
|
||||||
|
|
||||||
|
PORT_START("O.2")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CODE(KEYCODE_8) PORT_NAME("Button R8")
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CODE(KEYCODE_9) PORT_NAME("Button R9")
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON13) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON11) PORT_CODE(KEYCODE_MINUS) PORT_NAME("Button R10")
|
||||||
|
|
||||||
|
PORT_START("O.3")
|
||||||
|
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||||
|
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON15) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
|
||||||
|
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON14) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
|
||||||
|
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON12) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Machine Config
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
void merlin_state::machine_start()
|
void merlin_state::machine_start()
|
||||||
{
|
{
|
||||||
|
m_o = 0;
|
||||||
save_item(NAME(m_o));
|
save_item(NAME(m_o));
|
||||||
save_item(NAME(m_r));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -193,20 +179,32 @@ static const UINT16 merlin_output_pla[0x20] =
|
|||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( merlin, merlin_state )
|
static MACHINE_CONFIG_START( merlin, merlin_state )
|
||||||
MCFG_CPU_ADD( "maincpu", TMS1100, 500000 ) /* Clock may be wrong */
|
|
||||||
MCFG_TMS1XXX_OUTPUT_PLA( merlin_output_pla )
|
/* basic machine hardware */
|
||||||
MCFG_TMS1XXX_READ_K( READ8( merlin_state, read_k ) )
|
MCFG_CPU_ADD( "maincpu", TMS1100, MERLIN_RC_CLOCK )
|
||||||
MCFG_TMS1XXX_WRITE_O( WRITE16( merlin_state, write_o ) )
|
MCFG_TMS1XXX_OUTPUT_PLA(merlin_output_pla)
|
||||||
MCFG_TMS1XXX_WRITE_R( WRITE16( merlin_state, write_r ) )
|
MCFG_TMS1XXX_READ_K(READ8( merlin_state, read_k))
|
||||||
|
MCFG_TMS1XXX_WRITE_O(WRITE16( merlin_state, write_o))
|
||||||
|
MCFG_TMS1XXX_WRITE_R(WRITE16( merlin_state, write_r))
|
||||||
|
|
||||||
MCFG_DEFAULT_LAYOUT(layout_merlin)
|
MCFG_DEFAULT_LAYOUT(layout_merlin)
|
||||||
|
|
||||||
|
/* no video! */
|
||||||
|
|
||||||
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Game driver(s)
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
ROM_START( merlin )
|
ROM_START( merlin )
|
||||||
ROM_REGION( 0x800, "maincpu", 0 )
|
ROM_REGION( 0x800, "maincpu", 0 )
|
||||||
// This rom needs verification, that's why it is marked as a bad dump
|
// This rom needs verification, that's why it is marked as a bad dump
|
||||||
@ -216,11 +214,5 @@ ROM_START( merlin )
|
|||||||
ROM_LOAD( "mp3404", 0x0000, 0x800, BAD_DUMP CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) )
|
ROM_LOAD( "mp3404", 0x0000, 0x800, BAD_DUMP CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/***************************************************************************
|
|
||||||
|
|
||||||
Game driver(s)
|
CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", GAME_SUPPORTS_SAVE )
|
||||||
|
|
||||||
***************************************************************************/
|
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
|
||||||
CONS( 1978, merlin, 0, 0, merlin, merlin, driver_device, 0, "Parker Brothers", "Merlin", 0 )
|
|
||||||
|
@ -8,10 +8,15 @@
|
|||||||
* TMS1000 (has internal ROM), SN75494 lamp driver
|
* TMS1000 (has internal ROM), SN75494 lamp driver
|
||||||
|
|
||||||
Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000.
|
Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000.
|
||||||
It has been decapped, but we couldn't yet find the internal ROM.
|
This one has been decapped too, but we couldn't yet find the internal ROM.
|
||||||
|
|
||||||
|
Other games assumed to be on similar hardware:
|
||||||
|
- Pocket Simon
|
||||||
|
- Super Simon
|
||||||
|
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
- accurate rc osc
|
||||||
- where's the skill switch?
|
- where's the skill switch?
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
@ -22,6 +27,10 @@
|
|||||||
|
|
||||||
#include "simon.lh"
|
#include "simon.lh"
|
||||||
|
|
||||||
|
// master clock is a single stage RC oscillator: R=?, C=?
|
||||||
|
// this is an approximation compared with old recordings
|
||||||
|
#define SIMON_RC_CLOCK (330000)
|
||||||
|
|
||||||
|
|
||||||
class simon_state : public driver_device
|
class simon_state : public driver_device
|
||||||
{
|
{
|
||||||
@ -37,7 +46,6 @@ public:
|
|||||||
required_ioport_array<3> m_button_matrix;
|
required_ioport_array<3> m_button_matrix;
|
||||||
required_device<speaker_sound_device> m_speaker;
|
required_device<speaker_sound_device> m_speaker;
|
||||||
|
|
||||||
UINT16 m_o;
|
|
||||||
UINT16 m_r;
|
UINT16 m_r;
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(read_k);
|
DECLARE_READ8_MEMBER(read_k);
|
||||||
@ -45,7 +53,6 @@ public:
|
|||||||
DECLARE_WRITE16_MEMBER(write_r);
|
DECLARE_WRITE16_MEMBER(write_r);
|
||||||
|
|
||||||
virtual void machine_start();
|
virtual void machine_start();
|
||||||
virtual void machine_reset();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -57,14 +64,14 @@ public:
|
|||||||
|
|
||||||
READ8_MEMBER(simon_state::read_k)
|
READ8_MEMBER(simon_state::read_k)
|
||||||
{
|
{
|
||||||
UINT8 ret = 0;
|
UINT8 k = 0;
|
||||||
|
|
||||||
// read selected button rows
|
// read selected button rows
|
||||||
for (int i = 0; i < 3; i++)
|
for (int i = 0; i < 3; i++)
|
||||||
if (m_r & (1 << i))
|
if (m_r & (1 << i))
|
||||||
ret |= m_button_matrix[i]->read();
|
k |= m_button_matrix[i]->read();
|
||||||
|
|
||||||
return ret;
|
return k;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE16_MEMBER(simon_state::write_r)
|
WRITE16_MEMBER(simon_state::write_r)
|
||||||
@ -85,7 +92,6 @@ WRITE16_MEMBER(simon_state::write_r)
|
|||||||
WRITE16_MEMBER(simon_state::write_o)
|
WRITE16_MEMBER(simon_state::write_o)
|
||||||
{
|
{
|
||||||
// N/C
|
// N/C
|
||||||
m_o = data;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -125,16 +131,9 @@ INPUT_PORTS_END
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
void simon_state::machine_reset()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void simon_state::machine_start()
|
void simon_state::machine_start()
|
||||||
{
|
{
|
||||||
m_o = 0;
|
|
||||||
m_r = 0;
|
m_r = 0;
|
||||||
|
|
||||||
save_item(NAME(m_o));
|
|
||||||
save_item(NAME(m_r));
|
save_item(NAME(m_r));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -152,7 +151,7 @@ static const UINT16 simon_output_pla[0x20] =
|
|||||||
static MACHINE_CONFIG_START( simon, simon_state )
|
static MACHINE_CONFIG_START( simon, simon_state )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
MCFG_CPU_ADD( "maincpu", TMS1000, 330000 ) // RC osc, approximation compared with recordings
|
MCFG_CPU_ADD( "maincpu", TMS1000, SIMON_RC_CLOCK )
|
||||||
MCFG_TMS1XXX_OUTPUT_PLA(simon_output_pla)
|
MCFG_TMS1XXX_OUTPUT_PLA(simon_output_pla)
|
||||||
MCFG_TMS1XXX_READ_K(READ8(simon_state, read_k))
|
MCFG_TMS1XXX_READ_K(READ8(simon_state, read_k))
|
||||||
MCFG_TMS1XXX_WRITE_O(WRITE16(simon_state, write_o))
|
MCFG_TMS1XXX_WRITE_O(WRITE16(simon_state, write_o))
|
||||||
@ -172,7 +171,7 @@ MACHINE_CONFIG_END
|
|||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Game drivers
|
Game driver(s)
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
@ -370,98 +370,98 @@
|
|||||||
|
|
||||||
<!-- LEDs and number buttons -->
|
<!-- LEDs and number buttons -->
|
||||||
|
|
||||||
<bezel name="led_0" element="led">
|
<bezel name="lamp0" element="led">
|
||||||
<bounds x="100" y="20" width="20" height="10" />
|
<bounds x="100" y="20" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="0" inputtag="O0" inputmask="0x01">
|
<bezel element="0" inputtag="O.0" inputmask="0x01">
|
||||||
<bounds x="100" y="32" width="20" height="10" />
|
<bounds x="100" y="32" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
<bezel name="led_1" element="led">
|
<bezel name="lamp1" element="led">
|
||||||
<bounds x="50" y="50" width="20" height="10" />
|
<bounds x="50" y="50" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="1" inputtag="O0" inputmask="0x02">
|
<bezel element="1" inputtag="O.0" inputmask="0x02">
|
||||||
<bounds x="50" y="62" width="20" height="10" />
|
<bounds x="50" y="62" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
<bezel name="led_2" element="led">
|
<bezel name="lamp2" element="led">
|
||||||
<bounds x="100" y="50" width="20" height="10" />
|
<bounds x="100" y="50" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="2" inputtag="O0" inputmask="0x08">
|
<bezel element="2" inputtag="O.0" inputmask="0x08">
|
||||||
<bounds x="100" y="62" width="20" height="10" />
|
<bounds x="100" y="62" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
<bezel name="led_3" element="led">
|
<bezel name="lamp3" element="led">
|
||||||
<bounds x="150" y="50" width="20" height="10" />
|
<bounds x="150" y="50" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="3" inputtag="O0" inputmask="0x04">
|
<bezel element="3" inputtag="O.0" inputmask="0x04">
|
||||||
<bounds x="150" y="62" width="20" height="10" />
|
<bounds x="150" y="62" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
|
|
||||||
<bezel name="led_4" element="led">
|
<bezel name="lamp4" element="led">
|
||||||
<bounds x="50" y="80" width="20" height="10" />
|
<bounds x="50" y="80" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="4" inputtag="O1" inputmask="0x01">
|
<bezel element="4" inputtag="O.1" inputmask="0x01">
|
||||||
<bounds x="50" y="92" width="20" height="10" />
|
<bounds x="50" y="92" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
<bezel name="led_5" element="led">
|
<bezel name="lamp5" element="led">
|
||||||
<bounds x="100" y="80" width="20" height="10" />
|
<bounds x="100" y="80" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="5" inputtag="O1" inputmask="0x02">
|
<bezel element="5" inputtag="O.1" inputmask="0x02">
|
||||||
<bounds x="100" y="92" width="20" height="10" />
|
<bounds x="100" y="92" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
<bezel name="led_6" element="led">
|
<bezel name="lamp6" element="led">
|
||||||
<bounds x="150" y="80" width="20" height="10" />
|
<bounds x="150" y="80" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="6" inputtag="O1" inputmask="0x08">
|
<bezel element="6" inputtag="O.1" inputmask="0x08">
|
||||||
<bounds x="150" y="92" width="20" height="10" />
|
<bounds x="150" y="92" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
|
|
||||||
<bezel name="led_7" element="led">
|
<bezel name="lamp7" element="led">
|
||||||
<bounds x="50" y="110" width="20" height="10" />
|
<bounds x="50" y="110" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="7" inputtag="O1" inputmask="0x04">
|
<bezel element="7" inputtag="O.1" inputmask="0x04">
|
||||||
<bounds x="50" y="122" width="20" height="10" />
|
<bounds x="50" y="122" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel name="led_8" element="led">
|
<bezel name="lamp8" element="led">
|
||||||
<bounds x="100" y="110" width="20" height="10" />
|
<bounds x="100" y="110" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="8" inputtag="O2" inputmask="0x01">
|
<bezel element="8" inputtag="O.2" inputmask="0x01">
|
||||||
<bounds x="100" y="122" width="20" height="10" />
|
<bounds x="100" y="122" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel name="led_9" element="led">
|
<bezel name="lamp9" element="led">
|
||||||
<bounds x="150" y="110" width="20" height="10" />
|
<bounds x="150" y="110" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="9" inputtag="O2" inputmask="0x02">
|
<bezel element="9" inputtag="O.2" inputmask="0x02">
|
||||||
<bounds x="150" y="122" width="20" height="10" />
|
<bounds x="150" y="122" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
|
|
||||||
<bezel name="led_10" element="led">
|
<bezel name="lamp10" element="led">
|
||||||
<bounds x="100" y="140" width="20" height="10" />
|
<bounds x="100" y="140" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="10" inputtag="O2" inputmask="0x08">
|
<bezel element="10" inputtag="O.2" inputmask="0x08">
|
||||||
<bounds x="100" y="152" width="20" height="10" />
|
<bounds x="100" y="152" width="20" height="10" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
|
|
||||||
<!-- Other buttons -->
|
<!-- Other buttons -->
|
||||||
|
|
||||||
<bezel element="new_game" inputtag="O3" inputmask="0x08">
|
<bezel element="new_game" inputtag="O.3" inputmask="0x08">
|
||||||
<bounds x="75" y="170" width="30" height="30" />
|
<bounds x="75" y="170" width="30" height="30" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="same_game" inputtag="O2" inputmask="0x04">
|
<bezel element="same_game" inputtag="O.2" inputmask="0x04">
|
||||||
<bounds x="125" y="170" width="30" height="30" />
|
<bounds x="125" y="170" width="30" height="30" />
|
||||||
</bezel>
|
</bezel>
|
||||||
|
|
||||||
<bezel element="hit_me" inputtag="O3" inputmask="0x04">
|
<bezel element="hit_me" inputtag="O.3" inputmask="0x04">
|
||||||
<bounds x="75" y="210" width="30" height="30" />
|
<bounds x="75" y="210" width="30" height="30" />
|
||||||
</bezel>
|
</bezel>
|
||||||
<bezel element="comp_turn" inputtag="O3" inputmask="0x02">
|
<bezel element="comp_turn" inputtag="O.3" inputmask="0x02">
|
||||||
<bounds x="125" y="210" width="30" height="30" />
|
<bounds x="125" y="210" width="30" height="30" />
|
||||||
</bezel>
|
</bezel>
|
||||||
</view>
|
</view>
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
</disk>
|
</disk>
|
||||||
<disk state="1">
|
<disk state="1">
|
||||||
<color red="0.8" green="0.25" blue="0.1" />
|
<color red="0.8" green="0.25" blue="0.1" />
|
||||||
<bounds x="0.30" y="0.30" width="0.4" height="0.4" />
|
<bounds x="0.28" y="0.28" width="0.44" height="0.44" />
|
||||||
</disk>
|
</disk>
|
||||||
</element>
|
</element>
|
||||||
<element name="button_y" defstate="0">
|
<element name="button_y" defstate="0">
|
||||||
@ -60,7 +60,7 @@
|
|||||||
</disk>
|
</disk>
|
||||||
<disk state="1">
|
<disk state="1">
|
||||||
<color red="0.8" green="0.78" blue="0.1" />
|
<color red="0.8" green="0.78" blue="0.1" />
|
||||||
<bounds x="0.30" y="0.30" width="0.4" height="0.4" />
|
<bounds x="0.28" y="0.28" width="0.44" height="0.44" />
|
||||||
</disk>
|
</disk>
|
||||||
</element>
|
</element>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user