mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
More improvements for breakout. (nw)
This commit is contained in:
parent
c9aa1ae686
commit
101cd369f0
@ -185,6 +185,7 @@ NETLIB_START(POT2)
|
||||
|
||||
register_param("R", m_R, 1.0 / netlist().gmin());
|
||||
register_param("DIAL", m_Dial, 0.5);
|
||||
register_param("REVERSE", m_Reverse, 0);
|
||||
register_param("DIALLOG", m_DialIsLog, 0);
|
||||
|
||||
}
|
||||
@ -202,8 +203,11 @@ NETLIB_UPDATE(POT2)
|
||||
NETLIB_UPDATE_PARAM(POT2)
|
||||
{
|
||||
nl_double v = m_Dial.Value();
|
||||
|
||||
if (m_DialIsLog.Value())
|
||||
v = (exp(v) - 1.0) / (exp(1.0) - 1.0);
|
||||
if (m_Reverse.Value())
|
||||
v = 1.0 - v;
|
||||
|
||||
// FIXME: Only attached nets should be brought up to current time
|
||||
//netlist().solver()->update_to_current_time(); // bring up current time
|
||||
|
@ -172,6 +172,7 @@ NETLIB_DEVICE_WITH_PARAMS(POT2,
|
||||
netlist_param_double_t m_R;
|
||||
netlist_param_double_t m_Dial;
|
||||
netlist_param_logic_t m_DialIsLog;
|
||||
netlist_param_logic_t m_Reverse;
|
||||
);
|
||||
|
||||
|
||||
|
@ -132,6 +132,7 @@ void nl_initialize_factory(netlist_factory_t &factory)
|
||||
ENTRY(NE555, NE555, "-")
|
||||
ENTRY(r2r_dac, R2R_DAC, "+VIN,R,N")
|
||||
ENTRY(4020_dip, CD_4020_DIP, "-")
|
||||
ENTRY(4016_dip, CD_4016_DIP, "-")
|
||||
ENTRY(4066_dip, CD_4066_DIP, "-")
|
||||
ENTRY(7400_dip, TTL_7400_DIP, "-")
|
||||
ENTRY(7402_dip, TTL_7402_DIP, "-")
|
||||
|
@ -10,6 +10,7 @@ NETLIB_START(4066)
|
||||
{
|
||||
register_input("CTL", m_control);
|
||||
register_sub(m_R, "R");
|
||||
m_base_r = 270.0;
|
||||
}
|
||||
|
||||
NETLIB_RESET(4066)
|
||||
@ -23,17 +24,31 @@ NETLIB_UPDATE(4066)
|
||||
nl_double low = 0.45 * sup;
|
||||
nl_double high = 0.55 * sup;
|
||||
nl_double in = INPANALOG(m_control) - m_supply.get()->vss();
|
||||
nl_double rON = 270.0 * 5.0 / sup;
|
||||
nl_double rON = m_base_r * 5.0 / sup;
|
||||
nl_double R = -1.0;
|
||||
|
||||
if (in < low)
|
||||
{
|
||||
m_R.set_R(1.0 / netlist().gmin());
|
||||
m_R.update_dev();
|
||||
R = 1.0 / netlist().gmin();
|
||||
}
|
||||
else if (in > high)
|
||||
{
|
||||
m_R.set_R(rON);
|
||||
m_R.update_dev();
|
||||
R = rON;
|
||||
}
|
||||
if (R > 0.0)
|
||||
{
|
||||
// We only need to update the net first if this is a time stepping net
|
||||
if (1) // m_R.m_P.net().as_analog().solver()->is_timestep())
|
||||
{
|
||||
m_R.update_dev();
|
||||
m_R.set_R(R);
|
||||
m_R.m_P.schedule_after(NLTIME_FROM_NS(1));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_R.set_R(R);
|
||||
m_R.update_dev();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -47,6 +62,8 @@ NETLIB_START(4066_dip)
|
||||
register_sub(m_C, "C");
|
||||
register_sub(m_D, "D");
|
||||
|
||||
m_A.m_base_r = m_B.m_base_r = m_C.m_base_r = m_D.m_base_r = 270;
|
||||
|
||||
register_subalias("1", m_A.m_R.m_P);
|
||||
register_subalias("2", m_A.m_R.m_N);
|
||||
register_subalias("3", m_B.m_R.m_P);
|
||||
@ -81,3 +98,21 @@ NETLIB_UPDATE(4066_dip)
|
||||
m_C.update_dev();
|
||||
m_D.update_dev();
|
||||
}
|
||||
|
||||
NETLIB_START(4016_dip)
|
||||
{
|
||||
NETLIB_NAME(4066_dip)::start();
|
||||
|
||||
m_A.m_base_r = m_B.m_base_r = m_C.m_base_r = m_D.m_base_r = 1000.0;
|
||||
}
|
||||
|
||||
NETLIB_RESET(4016_dip)
|
||||
{
|
||||
NETLIB_NAME(4066_dip)::reset();
|
||||
}
|
||||
|
||||
NETLIB_UPDATE(4016_dip)
|
||||
{
|
||||
/* only called during startup */
|
||||
NETLIB_NAME(4066_dip)::update();
|
||||
}
|
||||
|
@ -30,6 +30,9 @@
|
||||
#define CD_4066_DIP(_name) \
|
||||
NET_REGISTER_DEV(4066_dip, _name)
|
||||
|
||||
#define CD_4016_DIP(_name) \
|
||||
NET_REGISTER_DEV(4016_dip, _name)
|
||||
|
||||
NETLIB_SUBDEVICE(4066,
|
||||
NETLIB_LOGIC_FAMILY(CD4000)
|
||||
public:
|
||||
@ -38,6 +41,7 @@ public:
|
||||
NETLIB_NAME(R) m_R;
|
||||
|
||||
netlist_state_t<NETLIB_NAME(vdd_vss) *>m_supply;
|
||||
netlist_state_t<nl_double> m_base_r;
|
||||
);
|
||||
|
||||
NETLIB_DEVICE(4066_dip,
|
||||
@ -50,4 +54,7 @@ NETLIB_DEVICE(4066_dip,
|
||||
NETLIB_NAME(vdd_vss) m_supply;
|
||||
);
|
||||
|
||||
NETLIB_DEVICE_DERIVED(4016_dip, 4066_dip,
|
||||
);
|
||||
|
||||
#endif /* NLD_4066_H_ */
|
||||
|
@ -85,8 +85,8 @@ NETLIB_RESET(7474sub)
|
||||
|
||||
m_nextD = 0;
|
||||
/* FIXME: required by pong doubles - need a mechanism to set this from netlist */
|
||||
m_Q.initial(1);
|
||||
m_QQ.initial(1);
|
||||
//m_Q.initial(1);
|
||||
//m_QQ.initial(1);
|
||||
}
|
||||
|
||||
NETLIB_START(7474_dip)
|
||||
|
@ -36,6 +36,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
// FIXME: breakout doesn't like this
|
||||
#define USE_DEACTIVE_DEVICE (0)
|
||||
|
||||
#define USE_TRUTHTABLE (0)
|
||||
|
@ -169,6 +169,14 @@ CIRCUIT_LAYOUT( breakout )
|
||||
SWITCH(S1_3)
|
||||
SWITCH(S1_4)
|
||||
|
||||
SWITCH2(COIN1) // Coin 1
|
||||
SWITCH2(COIN2) // Coin 2
|
||||
|
||||
SWITCH(START1) // Start 1
|
||||
SWITCH(START2) // Start 2
|
||||
|
||||
SWITCH(SERVE) // Start 2
|
||||
|
||||
SWITCH(S2) // Cocktail
|
||||
SWITCH(S3) // 2 Plays / 25c
|
||||
SWITCH2(S4) // Three Balls / 5 Balls
|
||||
@ -313,17 +321,17 @@ CIRCUIT_LAYOUT( breakout )
|
||||
|
||||
CHIP_LATCH(LATCH)
|
||||
//CHIP("COIN1", COIN_INPUT)
|
||||
CHIP_INPUT_ACTIVE_LOW(COIN1)
|
||||
//CHIP_INPUT_ACTIVE_LOW(COIN1)
|
||||
|
||||
//CHIP("COIN2", COIN_INPUT)
|
||||
CHIP_INPUT_ACTIVE_LOW(COIN2)
|
||||
//CHIP_INPUT_ACTIVE_LOW(COIN2)
|
||||
|
||||
//CHIP("START", START_INPUT)
|
||||
CHIP_INPUT_ACTIVE_LOW(START1)
|
||||
CHIP_INPUT_ACTIVE_HIGH(START2)
|
||||
//CHIP_INPUT_ACTIVE_LOW(START1)
|
||||
//CHIP_INPUT_ACTIVE_HIGH(START2)
|
||||
|
||||
//CHIP("SERVE", BUTTONS1_INPUT)
|
||||
CHIP_INPUT_ACTIVE_LOW(SERVE) // Active low?
|
||||
//CHIP_INPUT_ACTIVE_LOW(SERVE) // Active low?
|
||||
|
||||
//TODO: start 2
|
||||
|
||||
@ -1186,10 +1194,15 @@ CIRCUIT_LAYOUT( breakout )
|
||||
//Cabinet type
|
||||
|
||||
// Coin Circuit
|
||||
CONNECTION("COIN1", 1, "F9", 13)
|
||||
CONNECTION("COIN1", 2, "F9", 13)
|
||||
CONNECTION("COIN1", 1, "F9", 11)
|
||||
NET_C(COIN1.Q, GND)
|
||||
|
||||
//CONNECTION(CSW1, "F9", 11)
|
||||
CONNECTION(CSW1, "COIN1", 1)
|
||||
|
||||
CONNECTION(CSW1, "F9", 11)
|
||||
//CONNECTION("F9", 10, "F9", 13) //TODO: causes lots of bouncing, commented out since this trace is not implemented in gotcha
|
||||
CONNECTION("F9", 10, "COIN1", 2) //TODO: causes lots of bouncing, commented out since this trace is not implemented in gotcha
|
||||
|
||||
CONNECTION(V64, "H7", 12)
|
||||
CONNECTION(V64, "H7", 13)
|
||||
@ -1228,12 +1241,17 @@ CIRCUIT_LAYOUT( breakout )
|
||||
CONNECTION("J9", 6, "L9", 4)
|
||||
|
||||
//COIN2 circuit
|
||||
CONNECTION("COIN2", 1, "F9", 1)
|
||||
//CONNECTION("COIN2", 1, "F9", 1)
|
||||
//CONNECTION(GNDD, "F9", 1) //TODO: coin2 not implemented
|
||||
|
||||
CONNECTION(CSW2, "F9", 3)
|
||||
CONNECTION("COIN2", 2, "F9", 1)
|
||||
CONNECTION("COIN2", 1, "F9", 3)
|
||||
NET_C(COIN2.Q, GND)
|
||||
|
||||
CONNECTION(CSW2, "COIN2", 1)
|
||||
CONNECTION(CSW2, "H9", 10)
|
||||
CONNECTION("F9", 4, "H9", 12)
|
||||
CONNECTION("F9", 4, "COIN2", 2)
|
||||
CONNECTION(V64_n, "H9", 11)
|
||||
CONNECTION(V64_n, "H9", 3)
|
||||
CONNECTION(P, "H9", 13)
|
||||
@ -1256,8 +1274,13 @@ CIRCUIT_LAYOUT( breakout )
|
||||
CONNECTION("E9", 8, "H1", 2)
|
||||
|
||||
//Start2 Input
|
||||
//Start1 Input
|
||||
RES(R58, RES_K(1))
|
||||
//CONNECTION("START", 2, "E9", 11)
|
||||
CONNECTION("START2", 1, "E9", 11)
|
||||
NET_C(START2.2, GND)
|
||||
NET_C(R58.1, V5)
|
||||
NET_C(START2.1, R58.2, E9.11)
|
||||
|
||||
CONNECTION("E9", 10, "E8", 12)
|
||||
CONNECTION(P, "E8", 10)
|
||||
CONNECTION(V64I, "E8", 11)
|
||||
@ -1270,8 +1293,11 @@ CIRCUIT_LAYOUT( breakout )
|
||||
CONNECTION("E7", 13, "E8", 13)
|
||||
|
||||
//Start1 Input
|
||||
RES(R57, RES_K(1))
|
||||
//CONNECTION("START", 1, "E9", 3)
|
||||
CONNECTION("START1", 1, "E9", 3)
|
||||
NET_C(START1.2, GND)
|
||||
NET_C(R57.1, V5)
|
||||
NET_C(START1.1, R57.2, E9.3)
|
||||
CONNECTION("E9", 4, "E8", 2)
|
||||
CONNECTION(P, "E8", 4)
|
||||
CONNECTION(V64_d, "E8", 3)
|
||||
@ -1308,6 +1334,12 @@ CIRCUIT_LAYOUT( breakout )
|
||||
CONNECTION(EGL_n, "D6", 2)
|
||||
|
||||
//Serve
|
||||
|
||||
RES(R30, RES_K(1))
|
||||
NET_C(SERVE.2, GND)
|
||||
NET_C(SERVE.1, R30.2)
|
||||
NET_C(R30.1, V5)
|
||||
|
||||
CONNECTION(H64, "J3", 6)
|
||||
CONNECTION(H32, "J3", 5)
|
||||
CONNECTION("J3", 4, "L4", 13)
|
||||
@ -1682,15 +1714,31 @@ CIRCUIT_LAYOUT( breakout )
|
||||
#endif
|
||||
|
||||
// POTS
|
||||
POT2(POTP1, RES_K(6)) // 5k
|
||||
PARAM(POTP1, 0) // Log Dial ...
|
||||
POT2(POTP1, RES_K(5)) // 5k
|
||||
PARAM(POTP1.DIALLOG, 1) // Log Dial ...
|
||||
PARAM(POTP1.REVERSE, 1) // Log Dial ...
|
||||
NET_C(POTP1.1, V5)
|
||||
|
||||
POT2(POTP2, RES_K(5)) // 5k
|
||||
PARAM(POTP2.DIALLOG, 1) // Log Dial ...
|
||||
PARAM(POTP2.REVERSE, 1) // Log Dial ...
|
||||
NET_C(POTP2.1, V5)
|
||||
|
||||
RES(R33, 47)
|
||||
|
||||
NET_C(POTP1.1, V5)
|
||||
//NET_C(POTP1.3, GND)
|
||||
NET_C(POTP1.2, R33.1)
|
||||
CD_4016_DIP(D9)
|
||||
NET_C(D9.7, GND)
|
||||
NET_C(D9.14, V5)
|
||||
|
||||
CONNECTION(P2_CONDITIONAL_dash, "D9", 6)
|
||||
NET_C(D9.12, E9.8)
|
||||
NET_C(D9.8, POTP2.2) // Connect P2 dial here
|
||||
NET_C(D9.11, POTP1.2)
|
||||
|
||||
NET_C(D9.9, D9.10, R33.1)
|
||||
NET_C(R33.2, C9.6)
|
||||
|
||||
NET_C(GND, D9.1, D9.2, D9.13, D9.3, D9.4, D9.5)
|
||||
CIRCUIT_LAYOUT_END
|
||||
|
||||
#endif
|
||||
|
@ -244,16 +244,12 @@ static INPUT_PORTS_START( pongd )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( breakout )
|
||||
#if 0
|
||||
|
||||
PORT_START( "PADDLE0" ) /* fake input port for player 1 paddle */
|
||||
PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(2) PORT_KEYDELTA(100) PORT_CENTERDELTA(0) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot0")
|
||||
PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(1) PORT_KEYDELTA(200) PORT_CENTERDELTA(0) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot1")
|
||||
|
||||
PORT_START( "PADDLE1" ) /* fake input port for player 2 paddle */
|
||||
PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(2) PORT_KEYDELTA(100) PORT_CENTERDELTA(0) PORT_PLAYER(2) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot1")
|
||||
#endif
|
||||
|
||||
PORT_START( "PADDLE0" ) /* fake input port for player 1 paddle */
|
||||
PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(2) PORT_KEYDELTA(100) PORT_CENTERDELTA(0) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot0")
|
||||
PORT_BIT( 0xff, 0x00, IPT_PADDLE ) PORT_SENSITIVITY(1) PORT_KEYDELTA(200) PORT_CENTERDELTA(0) PORT_PLAYER(2) NETLIST_ANALOG_PORT_CHANGED("maincpu", "pot2")
|
||||
|
||||
PORT_START("IN0") /* fake as well */
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "coinsw1")
|
||||
@ -262,11 +258,18 @@ static INPUT_PORTS_START( breakout )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw2")
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "servesw")
|
||||
|
||||
#if 0
|
||||
PORT_DIPNAME( 0x06, 0x00, "Game Won" ) PORT_DIPLOCATION("SW1A:1,SW1B:1") PORT_CHANGED_MEMBER(DEVICE_SELF, pong_state, input_changed, IC_SWITCH)
|
||||
PORT_DIPSETTING( 0x00, "11" )
|
||||
PORT_DIPSETTING( 0x06, "15" )
|
||||
PORT_START("DIPS")
|
||||
PORT_DIPNAME( 0x01, 0x00, "Balls" ) PORT_DIPLOCATION("SW4:1") NETLIST_LOGIC_PORT_CHANGED("maincpu", "sw4")
|
||||
PORT_DIPSETTING( 0x00, "3" )
|
||||
PORT_DIPSETTING( 0x01, "5" )
|
||||
PORT_DIPNAME( 0x02, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW3:1") NETLIST_LOGIC_PORT_CHANGED("maincpu", "sw3")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x02, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW2:1") NETLIST_LOGIC_PORT_CHANGED("maincpu", "sw2")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) )
|
||||
PORT_DIPSETTING( 0x80, DEF_STR( Upright ) )
|
||||
|
||||
#if 0
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Antenna") NETLIST_LOGIC_PORT_CHANGED("maincpu", "antenna")
|
||||
|
||||
PORT_START("VR1")
|
||||
@ -326,12 +329,16 @@ static MACHINE_CONFIG_START( breakout, breakout_state )
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "sw1a.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "sw1b.POS", 0, 0x01)
|
||||
#endif
|
||||
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot0", "POTP1.DIAL")
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw1", "COIN1_SW.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw2", "COIN2_SW.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw1", "START1_SW.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw2", "START2_SW.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "servesw", "SERVE_SW.POS", 0, 0x01)
|
||||
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "POTP1.DIAL")
|
||||
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot2", "POTP2.DIAL")
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw1", "COIN1.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw2", "COIN2.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw1", "START1.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw2", "START2.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "servesw", "SERVE.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw4", "S4.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw3", "S3.POS", 0, 0x01)
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw2", "S2.POS", 0, 0x01)
|
||||
#if 0
|
||||
MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01)
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user