Bugfixes and more pin-outs for netlist devices. Also contains preparation for inclusion of "pong doubles". No WN

This commit is contained in:
Couriersud 2014-01-26 15:08:53 +00:00
parent 9cbeb9e491
commit e688296f47
10 changed files with 209 additions and 42 deletions

View File

@ -119,6 +119,7 @@ void netlist_factory_t::initialize()
ENTRY(7420_dip, TTL_7420_DIP, "-")
ENTRY(7425_dip, TTL_7425_DIP, "-")
ENTRY(7427_dip, TTL_7427_DIP, "-")
ENTRY(7430_dip, TTL_7430_DIP, "-")
ENTRY(7448_dip, TTL_7448_DIP, "-")
ENTRY(7450_dip, TTL_7450_DIP, "-")
ENTRY(7474_dip, TTL_7474_DIP, "-")
@ -129,6 +130,7 @@ void netlist_factory_t::initialize()
ENTRY(74107_dip, TTL_74107_DIP, "-")
ENTRY(74153_dip, TTL_74153_DIP, "-")
ENTRY(9316_dip, TTL_9316_DIP, "-")
ENTRY(NE555_dip, NE555_DIP, "-")
}
netlist_device_t *netlist_factory_t::new_device_by_classname(const pstring &classname, netlist_setup_t &setup) const

View File

@ -5,41 +5,71 @@
#include "nld_74153.h"
/* FIXME: timing is not 100% accurate, Strobe and Select inputs have a
* slightly longer timing.
* Convert this to sub-devices at some time.
*/
NETLIB_START(74153sub)
{
register_input("C0", m_C[0]);
register_input("C1", m_C[1]);
register_input("C2", m_C[2]);
register_input("C3", m_C[3]);
register_input("G", m_G);
register_output("AY", m_Y); //FIXME: Change netlists
m_chan = 0;
save(NAME(m_chan));
}
NETLIB_RESET(74153sub)
{
m_chan = 0;
}
NETLIB_UPDATE(74153sub)
{
const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
if (!INPLOGIC(m_G))
{
UINT8 t = INPLOGIC(m_C[m_chan]);
OUTLOGIC(m_Y, t, delay[t] );
}
else
{
OUTLOGIC(m_Y, 0, delay[0]);
}
}
NETLIB_START(74153)
{
register_input("C0", m_C[0]);
register_input("C1", m_C[1]);
register_input("C2", m_C[2]);
register_input("C3", m_C[3]);
register_sub(m_sub, "SUB");
register_subalias("C0", m_sub.m_C[0]);
register_subalias("C1", m_sub.m_C[1]);
register_subalias("C2", m_sub.m_C[2]);
register_subalias("C3", m_sub.m_C[3]);
register_input("A", m_A);
register_input("B", m_B);
register_input("G", m_G);
register_subalias("G", m_sub.m_G);
register_output("AY", m_Y); //FIXME: Change netlists
register_subalias("AY", m_sub.m_Y); //FIXME: Change netlists
}
NETLIB_RESET(74153)
{
}
/* FIXME: timing is not 100% accurate, Strobe and Select inputs have a
* slightly longer timing.
* Convert this to sub-devices at some time.
*/
NETLIB_UPDATE(74153)
{
const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) };
if (!INPLOGIC(m_G))
{
UINT8 chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
UINT8 t = INPLOGIC(m_C[chan]);
OUTLOGIC(m_Y, t, delay[t] );
}
else
{
OUTLOGIC(m_Y, 0, delay[0]);
}
m_sub.m_chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
m_sub.update();
}
@ -48,11 +78,8 @@ NETLIB_START(74153_dip)
register_sub(m_1, "1");
register_sub(m_2, "2");
connect(m_1.m_A, m_2.m_A);
connect(m_1.m_B, m_2.m_B);
register_subalias("1", m_1.m_G);
register_subalias("2", m_1.m_B); // m_2.m_B
register_input("2", m_B); // m_2.m_B
register_subalias("3", m_1.m_C[3]);
register_subalias("4", m_1.m_C[2]);
register_subalias("5", m_1.m_C[1]);
@ -65,12 +92,15 @@ NETLIB_START(74153_dip)
register_subalias("12", m_2.m_C[2]);
register_subalias("13", m_2.m_C[3]);
register_subalias("14", m_1.m_A); // m_2.m_B
register_input("14", m_A); // m_2.m_B
register_subalias("15", m_2.m_G);
}
NETLIB_UPDATE(74153_dip)
{
m_2.m_chan = m_1.m_chan = (INPLOGIC(m_A) | (INPLOGIC(m_B)<<1));
m_1.update();
m_2.update();
}
NETLIB_RESET(74153_dip)

View File

@ -60,20 +60,28 @@
#define TTL_74153_DIP(_name) \
NET_REGISTER_DEV(74153_dip, _name)
NETLIB_SUBDEVICE(74153sub,
netlist_ttl_input_t m_C[4];
netlist_ttl_input_t m_G;
netlist_ttl_output_t m_Y;
int m_chan;
);
NETLIB_DEVICE(74153,
public:
netlist_ttl_input_t m_C[4];
NETLIB_NAME(74153sub) m_sub;
netlist_ttl_input_t m_A;
netlist_ttl_input_t m_B;
netlist_ttl_input_t m_G;
netlist_ttl_output_t m_Y;
);
NETLIB_DEVICE(74153_dip,
NETLIB_NAME(74153) m_1;
NETLIB_NAME(74153) m_2;
NETLIB_NAME(74153sub) m_1;
NETLIB_NAME(74153sub) m_2;
netlist_ttl_input_t m_A;
netlist_ttl_input_t m_B;
);
#endif /* NLD_74153_H_ */

View File

@ -147,11 +147,11 @@ NETLIB_START(7448_dip)
register_subalias("6", sub.m_D);
register_subalias("7", sub.m_A);
register_subalias("9", sub.m_a);
register_subalias("9", sub.m_e);
register_subalias("10", sub.m_d);
register_subalias("11", sub.m_c);
register_subalias("12", sub.m_b);
register_subalias("13", sub.m_e);
register_subalias("13", sub.m_a);
register_subalias("14", sub.m_g);
register_subalias("15", sub.m_f);
}

View File

@ -9,11 +9,11 @@
* B |1 ++ 16| VCC
* C |2 15| f
* LAMP TEST |3 14| g
* BI/RBQ |4 7448 13| e
* BI/RBQ |4 7448 13| a
* RBI |5 12| b
* D |6 11| c
* A |7 10| d
* GND |8 9| a
* GND |8 9| e
* +--------------+
*
*

View File

@ -99,7 +99,7 @@ NETLIB_START(7474_dip)
register_subalias("10", m_2.m_PREQ);
register_subalias("11", m_2.sub.m_CLK);
register_subalias("12", m_2.m_D);
register_subalias("13", m_1.m_CLRQ);
register_subalias("13", m_2.m_CLRQ);
// register_subalias("14", ); ==> VCC
}

View File

@ -19,10 +19,8 @@
// Macros
// ----------------------------------------------------------------------------------------
#define NETDEV_RSFF(_name, _S, _R) \
NET_REGISTER_DEV(nicRSFF, _name) \
NET_CONNECT(_name, S, _S) \
NET_CONNECT(_name, R, _R)
#define NETDEV_RSFF(_name) \
NET_REGISTER_DEV(nicRSFF, _name)
// ----------------------------------------------------------------------------------------
// Devices ...

View File

@ -89,3 +89,29 @@ NETLIB_UPDATE(NE555)
}
m_last_out = out;
}
NETLIB_START(NE555_dip)
{
NETLIB_NAME(NE555)::start();
register_subalias("1", m_R3.m_N); // Pin 1
register_subalias("2", m_TRIG); // Pin 2
register_subalias("3", m_OUT); // Pin 3
register_subalias("4", m_RESET); // Pin 4
register_subalias("5", m_R1.m_N); // Pin 5
register_subalias("6", m_THRES); // Pin 6
register_subalias("7", m_RDIS.m_P); // Pin 7
register_subalias("8", m_R1.m_P); // Pin 8
}
NETLIB_UPDATE(NE555_dip)
{
NETLIB_NAME(NE555)::update();
}
NETLIB_RESET(NE555_dip)
{
NETLIB_NAME(NE555)::reset();
}

View File

@ -24,6 +24,8 @@
#define NE555(_name) \
NET_REGISTER_DEV(NE555, _name)
NETLIB_DEVICE(NE555,
NETLIB_NAME(R) m_R1;
NETLIB_NAME(R) m_R2;
@ -37,10 +39,15 @@ NETLIB_DEVICE(NE555,
bool m_last_out;
double clamp(const double v, const double a, const double b);
inline double clamp(const double v, const double a, const double b);
);
#define NE555_DIP(_name) \
NET_REGISTER_DEV(NE555_dip, _name)
NETLIB_DEVICE_DERIVED(NE555_dip, NE555,
);
#endif /* NLD_NE555_H_ */

View File

@ -21,6 +21,7 @@ TODO:
#include "astring.h"
//#define TEST_SOUND
#define PONGD (0)
/*
* H count width to 512
@ -83,6 +84,15 @@ enum input_changed_enum
IC_VR2
};
#if PONGD
#include "../../nl_examples/tdice.c"
#undef SRST
#undef VCC
#undef GND
#endif
static NETLIST_START(pong_schematics)
SOLVER(Solver)
PARAM(Solver.FREQ, 48000)
@ -718,6 +728,18 @@ static NETLIST_START(pong_fast)
NETLIST_END()
#if PONGD
static NETLIST_START(pongd)
NETLIST_INCLUDE(pongdoubles)
NETDEV_ANALOG_CALLBACK(sound_cb, AUDIO, pong_state, sound_cb, "")
NETDEV_ANALOG_CALLBACK(video_cb, videomix, fixedfreq_device, update_vid, "fixfreq")
NETLIST_END()
#endif
#ifdef TEST_SOUND
static NETLIST_START(test)
@ -796,6 +818,36 @@ static INPUT_PORTS_START( pong )
INPUT_PORTS_END
#if PONGD
static INPUT_PORTS_START( pongd )
#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_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("IN0") /* fake as well */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "coinsw")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw")
#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_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Antenna") NETLIST_LOGIC_PORT_CHANGED("maincpu", "antenna")
PORT_START("VR1")
PORT_ADJUSTER( 50, "VR1 - 50k, Paddle 1 adjustment" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "vr0")
PORT_START("VR2")
PORT_ADJUSTER( 50, "VR2 - 50k, Paddle 2 adjustment" ) NETLIST_ANALOG_PORT_CHANGED("maincpu", "vr1")
#endif
INPUT_PORTS_END
#endif
static MACHINE_CONFIG_START( pong, pong_state )
/* basic machine hardware */
@ -840,6 +892,44 @@ static MACHINE_CONFIG_DERIVED( pongf, pong )
MACHINE_CONFIG_END
#if PONGD
static MACHINE_CONFIG_START( pongd, pong_state )
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
MCFG_NETLIST_SETUP(pongd)
#if 0
MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr0", "ic_b9_R.R")
MCFG_NETLIST_ANALOG_INPUT_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) )
MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr1", "ic_a9_R.R")
MCFG_NETLIST_ANALOG_INPUT_MULT_OFFSET(1.0 / 100.0 * RES_K(50), RES_K(56) )
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot0", "ic_b9_POT.DIAL")
MCFG_NETLIST_ANALOG_INPUT("maincpu", "pot1", "ic_a9_POT.DIAL")
#endif
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "DIPSW1.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "DIPSW2.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "coinsw", "COIN_SW.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "startsw", "START_SW.POS", 0, 0x01)
#if 0
MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01)
#endif
/* video hardware */
//MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_ntsc720)
//MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_pongX2)
MCFG_FIXFREQ_ADD("fixfreq", "screen", fixedfreq_mode_pong)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("dac", DAC, 48000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
#endif
/***************************************************************************
Game driver(s)
@ -855,6 +945,12 @@ ROM_START( pongf ) /* dummy to satisfy game entry*/
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( pongd ) /* dummy to satisfy game entry*/
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
GAME( 1972, pong, 0, pong, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) external", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING)
GAME( 1972, pongf, 0, pongf, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E)", GAME_SUPPORTS_SAVE )
#if PONGD
GAME( 1974, pongd, 0, pongd, pongd, driver_device, 0, ROT0, "Atari", "Pong Doubles", GAME_SUPPORTS_SAVE )
#endif