More improvements for breakout. (nw)

This commit is contained in:
couriersud 2015-05-02 01:51:38 +02:00
parent c9aa1ae686
commit 101cd369f0
9 changed files with 144 additions and 40 deletions

View File

@ -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

View File

@ -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;
);

View File

@ -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, "-")

View File

@ -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();
}

View File

@ -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_ */

View File

@ -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)

View File

@ -36,6 +36,7 @@
*
*/
// FIXME: breakout doesn't like this
#define USE_DEACTIVE_DEVICE (0)
#define USE_TRUTHTABLE (0)

View File

@ -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

View File

@ -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