(MAME)New game added

-----------------
Breakout [Couriersud, DICE Team]
This commit is contained in:
couriersud 2015-04-26 23:58:46 +02:00
parent 5f7587dd9e
commit e482d3f40e
15 changed files with 402 additions and 152 deletions

View File

@ -370,7 +370,8 @@ void netlist_mame_device_t::device_clock_changed()
//printf("device_clock_changed\n");
m_div = netlist_time::from_hz(clock()).as_raw();
//m_rem = 0;
NL_VERBOSE_OUT(("Setting clock %" I64FMT "d and divisor %d\n", clockfreq, m_div));
//NL_VERBOSE_OUT(("Setting clock %" I64FMT "d and divisor %d\n", clock(), m_div));
NL_VERBOSE_OUT(("Setting clock %d and divisor %d\n", clock(), m_div));
//printf("Setting clock %d and divisor %d\n", clock(), m_div);
}

View File

@ -9,6 +9,51 @@
#define R_OFF (1.0 / netlist().gmin())
#define R_ON 0.01
// ----------------------------------------------------------------------------------------
// SWITCH
// ----------------------------------------------------------------------------------------
NETLIB_START(switch1)
{
register_sub(m_R, "R");
register_param("POS", m_POS, 0);
register_subalias("1", m_R.m_P);
register_subalias("2", m_R.m_N);
}
NETLIB_RESET(switch1)
{
m_R.do_reset();
m_R.set_R(R_OFF);
}
NETLIB_UPDATE(switch1)
{
if (m_POS.Value() == 0)
{
m_R.set_R(R_OFF);
}
else
{
m_R.set_R(R_ON);
}
m_R.update_dev();
}
NETLIB_UPDATE_PARAM(switch1)
{
update();
}
// ----------------------------------------------------------------------------------------
// SWITCH2
// ----------------------------------------------------------------------------------------
NETLIB_START(switch2)
{
register_sub(m_R[0], "R1");

View File

@ -17,6 +17,9 @@
// Macros
// ----------------------------------------------------------------------------------------
#define SWITCH(_name) \
NET_REGISTER_DEV(switch1, _name)
#define SWITCH2(_name) \
NET_REGISTER_DEV(switch2, _name)
@ -24,6 +27,12 @@
// Devices ...
// ----------------------------------------------------------------------------------------
NETLIB_DEVICE_WITH_PARAMS(switch1,
NETLIB_NAME(R_base) m_R;
netlist_param_int_t m_POS;
);
NETLIB_DEVICE_WITH_PARAMS(switch2,
NETLIB_NAME(R_base) m_R[2];
@ -32,5 +41,4 @@ NETLIB_DEVICE_WITH_PARAMS(switch2,
#endif /* NLD_SWITCHES_H_ */

View File

@ -89,6 +89,7 @@ void nl_initialize_factory(netlist_factory_t &factory)
ENTRY(mainclock, MAINCLOCK, "FREQ")
ENTRY(solver, SOLVER, "FREQ")
ENTRY(gnd, GND, "-")
ENTRY(switch1, SWITCH, "-")
ENTRY(switch2, SWITCH2, "-")
ENTRY(nicRSFF, NETDEV_RSFF, "+S,R")
ENTRY(nicDelay, NETDEV_DELAY, "-")

View File

@ -5,7 +5,8 @@
#include "nld_74175.h"
static const netlist_time delay[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) };
static const netlist_time delay[2] = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(25) };
static const netlist_time delay_clear[2] = { NLTIME_FROM_NS(40), NLTIME_FROM_NS(25) };
NETLIB_UPDATE(74175)
{
@ -13,8 +14,8 @@ NETLIB_UPDATE(74175)
{
for (int i=0; i<4; i++)
{
OUTLOGIC(m_Q[i], 0, delay[0]);
OUTLOGIC(m_QQ[i], 1, delay[1]);
OUTLOGIC(m_Q[i], 0, delay_clear[0]);
OUTLOGIC(m_QQ[i], 1, delay_clear[1]);
}
}
else if (!m_last && INPLOGIC(m_CLK))
@ -23,7 +24,7 @@ NETLIB_UPDATE(74175)
{
UINT8 d = INPLOGIC(m_D[i]);
OUTLOGIC(m_Q[i], d, delay[d]);
OUTLOGIC(m_QQ[i], !d, delay[!d]);
OUTLOGIC(m_QQ[i], d ^ 1, delay[d ^ 1]);
}
}
m_last = INPLOGIC(m_CLK);

View File

@ -12,13 +12,13 @@ NETLIB_START(7432_dip)
register_sub(m_3, "3");
register_sub(m_4, "4");
register_subalias("1", m_1.m_Q[0]);
register_subalias("2", m_1.m_i[0]);
register_subalias("3", m_1.m_i[1]);
register_subalias("3", m_1.m_Q[0]);
register_subalias("1", m_1.m_i[0]);
register_subalias("2", m_1.m_i[1]);
register_subalias("4", m_2.m_Q[0]);
register_subalias("5", m_2.m_i[0]);
register_subalias("6", m_2.m_i[1]);
register_subalias("6", m_2.m_Q[0]);
register_subalias("4", m_2.m_i[0]);
register_subalias("5", m_2.m_i[1]);
register_subalias("9", m_3.m_i[0]);
register_subalias("10", m_3.m_i[1]);

View File

@ -6,12 +6,12 @@
* DM7432: Quad 2-Input OR Gates
*
* +--------------+
* Y1 |1 ++ 14| VCC
* A1 |2 13| B4
* B1 |3 12| A4
* Y2 |4 7432 11| Y4
* A2 |5 10| B3
* B2 |6 9| A3
* A1 |1 ++ 14| VCC
* B1 |2 13| B4
* Y1 |3 12| A4
* A2 |4 7432 11| Y4
* B2 |5 10| B3
* Y2 |6 9| A3
* GND |7 8| Y3
* +--------------+
* ___

View File

@ -72,7 +72,7 @@ public:
ATTR_COLD void help(int cur, nl_util::pstring_list list,
UINT64 state, UINT64 ignore, UINT16 val, UINT8 timing_index[m_NO])
{
pstring elem = list[cur];
pstring elem = list[cur].trim();
int start = 0;
int end = 0;
int ign = 0;
@ -93,6 +93,8 @@ public:
end = 1;
ign = 1;
}
else
nl_assert_always(false, "unknown input value (not 0, 1, or X)");
for (int i = start; i <= end; i++)
{
const UINT64 nstate = state | (i << cur);
@ -133,21 +135,24 @@ public:
{
nl_util::pstring_list io = nl_util::split(ttline,"|");
// checks
nl_assert(io.count() == 3);
nl_assert_always(io.count() == 3, "io.count mismatch");
nl_util::pstring_list inout = nl_util::split(io[0], ",");
nl_assert(inout.count() == m_num_bits);
nl_assert_always(inout.count() == m_num_bits, "number of bits not matching");
nl_util::pstring_list out = nl_util::split(io[1], ",");
nl_assert(out.count() == m_NO);
nl_assert_always(out.count() == m_NO, "output count not matching");
nl_util::pstring_list times = nl_util::split(io[2], ",");
nl_assert(times.count() == m_NO);
nl_assert_always(times.count() == m_NO, "timing count not matching");
UINT16 val = 0;
UINT8 tindex[m_NO];
for (int j=0; j<m_NO; j++)
{
if (out[j].equals("1"))
pstring outs = out[j].trim();
if (outs.equals("1"))
val = val | (1 << j);
netlist_time t = netlist_time::from_nsec(times[j].as_long());
else
nl_assert_always(outs.equals("0"), "Unknown value (not 0 or 1");
netlist_time t = netlist_time::from_nsec(times[j].trim().as_long());
int k=0;
while (m_ttp->m_timing_nt[k] != netlist_time::zero && m_ttp->m_timing_nt[k] != t)
k++;

View File

@ -182,6 +182,8 @@ ATTR_COLD void netlist_base_t::start()
{
/* find the main clock and solver ... */
NL_VERBOSE_OUT(("Searching for mainclock and solver ...\n"));
m_mainclock = get_single_device<NETLIB_NAME(mainclock)>("mainclock");
m_solver = get_single_device<NETLIB_NAME(solver)>("solver");
m_gnd = get_single_device<NETLIB_NAME(gnd)>("gnd");

View File

@ -95,7 +95,6 @@ public:
#define CHIP_555_Astable(_name, _pdesc) \
CHIP(# _name, NE555) \
NET_C(_name.6, _name.2) \
RES(_name ## _R1, (_pdesc)->r1) \
RES(_name ## _R2, (_pdesc)->r2) \
CAP(_name ## _C, (_pdesc)->c) \
@ -103,6 +102,7 @@ public:
NET_C(_name.7, _name ## _R2.1) \
NET_C(_name.6, _name ## _R2.2) \
NET_C(_name.6, _name ## _C.1) \
NET_C(_name.2, _name ## _C.1) \
NET_C(_name ## _R1.2, V5) \
NET_CSTR(# _name "_C.2", "GND") \
NET_C(_name.8, V5) \

View File

@ -711,9 +711,6 @@ void netlist_setup_t::start_devices()
}
}
NL_VERBOSE_OUT(("Searching for mainclock and solver ...\n"));
netlist().start();
}

View File

@ -359,10 +359,6 @@ ROM_END
/* // 100% TTL - NO ROMS
ROM_START( breakout )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( goal4 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
@ -431,7 +427,6 @@ GAME(1974, tank, 0, atarikee, 0, driver_device, 0, ROT0, "Ata
//GAME(1974, quack, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Qwak!/Quack [TTL]", GAME_IS_SKELETON)
// 100% TLL
//GAME(1976, breakout, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Breakout [TTL]",GAME_IS_SKELETON)
//GAME(1974, coupedem, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Coupe De Monde [TTL]",GAME_IS_SKELETON)
//GAME(1975, goal4, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Goal 4/World Cup/Coupe De Monde [TTL]",GAME_IS_SKELETON)
//GAME(1973, gotchaat, 0, atarikee, 0, driver_device, 0, ROT0, "Atari", "Gotcha [TTL]",GAME_IS_SKELETON) //?

View File

@ -143,14 +143,26 @@ CIRCUIT_LAYOUT( breakout )
CHIP("S3", DIPSWITCH, &dipswitch3_desc)
CHIP("S4", DIPSWITCH, &dipswitch4_desc)
#endif
// DIPSWITCH - Free game
SWITCH(S1_1)
SWITCH(S1_2)
SWITCH(S1_3)
SWITCH(S1_4)
SWITCH(S2) // Cocktail
SWITCH(S3) // 2 Plays / 25c
SWITCH2(S4) // Three Balls / 5 Balls
SOLVER(Solver, 48000)
PARAM(Solver.ACCURACY, 1e-7) // works and is sufficient
PARAM(Solver.ACCURACY, 1e-8) // less accuracy and diode will not work
//CHIP("CLOCK", CLOCK_14_318_MHZ)
MAINCLOCK(Y1, 14318000.0)
ANALOG_INPUT(V5, 5)
#define VCC "V5", Q
#define GND "GND", Q
ALIAS(VCC, V5)
//#define VCC "V5", Q
#define GNDD "GND", Q
//CHIP("Y1", CLOCK_14_318_MHZ) //Y1
@ -290,9 +302,11 @@ CIRCUIT_LAYOUT( breakout )
CHIP_INPUT_ACTIVE_LOW(COIN1)
//CHIP("COIN2", COIN_INPUT)
CHIP_INPUT_ACTIVE_LOW(COIN2)
//CHIP("START", START_INPUT)
CHIP_INPUT_ACTIVE_HIGH(START)
CHIP_INPUT_ACTIVE_LOW(START1)
CHIP_INPUT_ACTIVE_HIGH(START2)
//CHIP("SERVE", BUTTONS1_INPUT)
CHIP_INPUT_ACTIVE_LOW(SERVE) // Active low?
@ -516,22 +530,22 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(P, "F6", 1)
CONNECTION(P, "F6", 10)
CONNECTION(P, "F6", 9)
CONNECTION(GND, "F6", 14)
CONNECTION(GNDD, "F6", 14)
CONNECTION("F7", 13, "J9", 2)
CONNECTION(VSYNC, "J9", 1)
CONNECTION("A7", 9, "J9", 13)
CONNECTION("J9", 12, "F6", 4)
CONNECTION("J9", 12, "A7", 11)
CONNECTION(GND, "A7", 12)
CONNECTION(GNDD, "A7", 12)
CONNECTION(ATTRACT_n, "A7", 13)
CONNECTION("J9", 12, "A8", 11)
CONNECTION(GND, "A8", 12)
CONNECTION(GNDD, "A8", 12)
CONNECTION(ATTRACT_n, "A8", 13)
CONNECTION(VB_HIT_n, "A7", 5)
CONNECTION(GND, "A7", 4)
CONNECTION(GNDD, "A7", 4)
CONNECTION(ATTRACT_n, "A7", 3)
CONNECTION(BP_HIT_n, "A8", 5)
CONNECTION(GND, "A8", 4)
CONNECTION(GNDD, "A8", 4)
CONNECTION(ATTRACT_n, "A8", 3)
CONNECTION("A8", 6, "B9", 13)
CONNECTION(P_HIT_SOUND, "B9", 12)
@ -540,6 +554,7 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("A7", 6, "B9", 4)
CONNECTION(VB_HIT_SOUND, "B9", 5)
#if 0
CONNECTION(GND, "S1", 1)
CONNECTION(P, "S1", 2)
CONNECTION(GND, "S1", 4)
@ -548,25 +563,53 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(P, "S1", 11)
CONNECTION(GND, "S1", 9)
CONNECTION(P, "S1", 10)
#endif
NET_C(S1_1.1, GND)
NET_C(S1_2.1, GND)
NET_C(S1_3.1, GND)
NET_C(S1_4.1, GND)
RES(R7, RES_K(2.7))
RES(R8, RES_K(2.7))
RES(R9, RES_K(2.7))
RES(R10, RES_K(2.7))
NET_C(R7.1, V5)
NET_C(R8.1, V5)
NET_C(R9.1, V5)
NET_C(R10.1, V5)
NET_C(S1_1.2, R7.2)
NET_C(S1_2.2, R8.2)
NET_C(S1_3.2, R9.2)
NET_C(S1_4.2, R10.2)
//Free Game Selector
CONNECTION(I1, "K7", 2)
CONNECTION("S1", 15, "K7", 1)
//CONNECTION("S1", 15, "K7", 1)
CONNECTION("S1_1", 2, "K7", 1)
CONNECTION(J1, "K7", 12)
CONNECTION("S1", 14, "K7", 13)
//CONNECTION("S1", 14, "K7", 13)
CONNECTION("S1_2", 2, "K7", 13)
CONNECTION(K1, "K7", 5)
CONNECTION("S1", 6, "K7", 4)
//CONNECTION("S1", 6, "K7", 4)
CONNECTION("S1_3", 2, "K7", 4)
CONNECTION(L1, "K7", 9)
CONNECTION("S1", 7, "K7", 10)
//CONNECTION("S1", 7, "K7", 10)
CONNECTION("S1_4", 2, "K7", 10)
CONNECTION(I2, "L7", 2)
CONNECTION("S1", 15, "L7", 1)
//CONNECTION("S1", 15, "L7", 1)
CONNECTION("S1_1", 2, "L7", 1)
CONNECTION(J2, "L7", 12)
CONNECTION("S1", 14, "L7", 13)
//CONNECTION("S1", 14, "L7", 13)
CONNECTION("S1_2", 2, "L7", 13)
CONNECTION(K2, "L7", 5)
CONNECTION("S1", 6, "L7", 4)
//CONNECTION("S1", 6, "L7", 4)
CONNECTION("S1_3", 2, "L7", 4)
CONNECTION(L2, "L7", 9)
CONNECTION("S1", 7, "L7", 10)
//CONNECTION("S1", 7, "L7", 10)
CONNECTION("S1_4", 2, "L7", 10)
CONNECTION("K7", 3, "J7", 13)
@ -599,12 +642,12 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(P, "K9", 8)
CONNECTION("J8", 9, "K9", 9)
CONNECTION(GND, "K9", 11)
CONNECTION(GNDD, "K9", 11)
CONNECTION(HSYNC_n, "K9", 10)
CONNECTION(P, "K9", 1)
CONNECTION("J8", 4, "K9", 12)
CONNECTION(GND, "K9", 4)
CONNECTION(GNDD, "K9", 4)
CONNECTION(HSYNC_n, "K9", 13)
CONNECTION("K9", 6, "L9", 12)
@ -617,25 +660,25 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(V4_d, "N7", 2)
CONNECTION("N8", 6, "N7", 1)
//
CONNECTION(GND, "M2", 13)
CONNECTION(GNDD, "M2", 13)
CONNECTION(V1_d, "M2", 10)
CONNECTION(V2_d, "M2", 8)
CONNECTION(V4_d, "M2", 3)
CONNECTION(V8_d, "M2", 1)
CONNECTION(GND, "M2", 11)
CONNECTION(GNDD, "M2", 11)
CONNECTION(P2_CONDITIONAL, "M2", 7)
CONNECTION(GND, "M2", 4)
CONNECTION(GND, "M2", 16)
CONNECTION(GNDD, "M2", 4)
CONNECTION(GNDD, "M2", 16)
CONNECTION("M2", 14, "N2", 13)
CONNECTION(V16_d, "N2", 10)
CONNECTION(V32_d, "N2", 8)
CONNECTION(V64_d, "N2", 3)
CONNECTION(V128_d, "N2", 1)
CONNECTION(GND, "N2", 11)
CONNECTION(GNDD, "N2", 11)
CONNECTION(P2_CONDITIONAL, "N2", 7)
CONNECTION(GND, "N2", 4)
CONNECTION(GND, "N2", 16)
CONNECTION(GNDD, "N2", 4)
CONNECTION(GNDD, "N2", 16)
CONNECTION("M2", 6, "M3", 2)
CONNECTION(P2_CONDITIONAL, "M3", 1)
@ -697,9 +740,9 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(P, "L1", 1)
CONNECTION(P, "L1", 3)
CONNECTION(GND, "L1", 4)
CONNECTION(GNDD, "L1", 4)
CONNECTION(P, "L1", 5)
CONNECTION(GND, "L1", 6)
CONNECTION(GNDD, "L1", 6)
CONNECTION(VERT_TRIG_n, "L1", 9)
CONNECTION(P, "L1", 10)
CONNECTION(DICECLOCK, "L1", 2)
@ -725,10 +768,10 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(VSYNC_n, "H1", 9)
CONNECTION(P, "M1", 1)
CONNECTION(GND, "M1", 3)
CONNECTION(GND, "M1", 4)
CONNECTION(GNDD, "M1", 3)
CONNECTION(GNDD, "M1", 4)
CONNECTION(P, "M1", 5)
CONNECTION(GND, "M1", 6)
CONNECTION(GNDD, "M1", 6)
CONNECTION(VERT_TRIG_n, "M1", 9)
CONNECTION(DICECLOCK, "M1", 2)
CONNECTION("L1", 15, "M1", 7)
@ -778,7 +821,7 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(C1, "L5", 5)
CONNECTION(G1, "L5", 6)
CONNECTION(K1, "L5", 7)
CONNECTION(GND, "L5", 9)
CONNECTION(GNDD, "L5", 9)
CONNECTION(H32_n, "L5", 10)
CONNECTION(V16, "L5", 11)
CONNECTION(V64, "L5", 12)
@ -787,11 +830,11 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(D2, "K5", 1)
CONNECTION(H02, "K5", 2)
CONNECTION(L2, "K5", 3)
CONNECTION(GND, "K5", 4)
CONNECTION(GNDD, "K5", 4)
CONNECTION(D1, "K5", 5)
CONNECTION(H01, "K5", 6)
CONNECTION(L1, "K5", 7)
CONNECTION(GND, "K5", 9)
CONNECTION(GNDD, "K5", 9)
CONNECTION(H32_n, "K5", 10)
CONNECTION(V16, "K5", 11)
CONNECTION(V64, "K5", 12)
@ -806,13 +849,13 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(H32, "J5", 5)
CONNECTION("J5", 13, "H5", 1)
CONNECTION(GND, "H5", 2)
CONNECTION(GND, "H5", 3)
CONNECTION(GNDD, "H5", 2)
CONNECTION(GNDD, "H5", 3)
CONNECTION("J5", 14, "H5", 4)
CONNECTION(GND, "H5", 5)
CONNECTION(GND, "H5", 6)
CONNECTION(GNDD, "H5", 5)
CONNECTION(GNDD, "H5", 6)
CONNECTION("J5", 10, "H5", 7)
CONNECTION(GND, "H5", 9)
CONNECTION(GNDD, "H5", 9)
CONNECTION(V4, "K4", 12)
CONNECTION(V8, "K4", 13)
@ -828,12 +871,12 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("J5", 12 , "J4", 1)
CONNECTION("J5", 11, "J4", 2)
CONNECTION(GND, "J4", 3)
CONNECTION(GND, "J4", 4)
CONNECTION(GNDD, "J4", 3)
CONNECTION(GNDD, "J4", 4)
CONNECTION("J5", 15, "J4", 5)
CONNECTION("J5", 9, "J4", 6)
CONNECTION(GND, "J4", 7)
CONNECTION(GND, "J4", 9)
CONNECTION(GNDD, "J4", 7)
CONNECTION(GNDD, "J4", 9)
CONNECTION("L4", 6, "J4", 10)
CONNECTION(H8, "J4", 11)
CONNECTION(V4, "J4", 12)
@ -872,10 +915,16 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("M8", 6, "H4", 5)
CONNECTION("F2", 8, "H4", 4)
#if 0
CONNECTION(PAD_EN_n, "PAD_EN_BUF", 1)
CONNECTION("PAD_EN_BUF", 2, "C9", 4)
CONNECTION("PAD_EN_BUF", 2, "C9", 2)
#else
CONNECTION(PAD_EN_n, "C9", 4)
CONNECTION(PAD_EN_n, "C9", 2)
#endif
CONNECTION(BTB_HIT_n, "C5", 3)
CONNECTION(P, "F5", 10)
CONNECTION(P, "F5", 12)
@ -929,15 +978,23 @@ CIRCUIT_LAYOUT( breakout )
//SCORE
CONNECTION(SCI_n, "D3", 4)
CONNECTION(GND, "D3", 2)
CONNECTION(GND, "D3", 3)
CONNECTION(GND, "D3", 1)
CONNECTION(GNDD, "D3", 2)
CONNECTION(GNDD, "D3", 3)
CONNECTION(GNDD, "D3", 1)
//PLAYER2_CONDITIONAL
CONNECTION(PLAYER_2, "H7", 10)
CONNECTION(GND, "S2", 1)
#if 0
CONNECTION(GNDD, "S2", 1)
CONNECTION(P, "S2", 2)
CONNECTION("S2", 3, "H7", 9)
#else
NET_C(S2.2, GND)
NET_C(S2.1, H7.9)
RES(R18, RES_K(1))
NET_C(R18.2, V5)
NET_C(R18.1, S2.1)
#endif
//A-L 1 and 2
CONNECTION(SET_BRICKS_n, "B3", 2)
@ -1008,7 +1065,7 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(START_GAME, "N9", 14)
CONNECTION(H8_n, "N9", 1)
CONNECTION(H16_n, "N9", 10)
CONNECTION(GND, "N9", 9)
CONNECTION(GNDD, "N9", 9)
CONNECTION("N9", 13, "N7", 13)
CONNECTION(SCLOCK, "N7", 12)
@ -1028,7 +1085,7 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(CX0, "C7", 3)
CONNECTION(CX1, "C7", 4)
CONNECTION(X2, "C7", 5)
CONNECTION(GND, "C7", 6)
CONNECTION(GNDD, "C7", 6)
CONNECTION("D8", 8, "C7", 9)
CONNECTION("C7", 15, "C8", 7)
CONNECTION("C7", 11, "C8", 10)
@ -1050,7 +1107,7 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(Y0, "B7", 3)
CONNECTION(Y1, "B7", 4)
CONNECTION(Y2, "B7", 5)
CONNECTION(GND, "B7", 6)
CONNECTION(GNDD, "B7", 6)
CONNECTION("D8", 8, "B7", 9)
CONNECTION(DICECLOCK, "B7", 2)
CONNECTION("B7", 15, "B8", 7)
@ -1081,12 +1138,14 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(P, "F1", 1)
CONNECTION(P, "F1", 7)
CONNECTION(P, "F1", 10)
CONNECTION(GND, "F1", 3)
CONNECTION(GNDD, "F1", 3)
CONNECTION(P, "F1", 4)
CONNECTION(GND, "F1", 5)
CONNECTION(GND, "F1", 6)
CONNECTION(GNDD, "F1", 5)
CONNECTION(GNDD, "F1", 6)
CONNECTION("E1", 6, "F1", 9)
CONNECTION("Y1", 1, "F1", 2)
//CONNECTION("Y1", 1, "F1", 2)
NET_C(Y1.Q, F1.2)
// RH and LH Sides
CONNECTION(V128, "N4", 1)
@ -1139,16 +1198,25 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("H8", 9, "J9", 9)
CONNECTION(V16_d, "J8", 14)
CONNECTION("J8", 13, "J9", 10)
#if 0
CONNECTION(P, "S3", 1)
CONNECTION(V4_d, "S3", 2)
CONNECTION("S3", 3, "J9", 11)
#else
CONNECTION(V4_d, "S3", 1)
CONNECTION("S3", 2, "J9", 11)
RES(R15, RES_K(1))
NET_C(R15.1, V5)
NET_C(R15.2, S3.2)
#endif
CONNECTION("J9", 8, "L9", 5)
CONNECTION("J9", 6, "L9", 4)
//COIN2 circuit
//CONNECTION("COIN2", 1, "F9", 1)
CONNECTION(GND, "F9", 1) //TODO: coin2 not implemented
CONNECTION("COIN2", 1, "F9", 1)
//CONNECTION(GNDD, "F9", 1) //TODO: coin2 not implemented
CONNECTION(CSW2, "F9", 3)
CONNECTION(CSW2, "H9", 10)
@ -1175,7 +1243,8 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("E9", 8, "H1", 2)
//Start2 Input
CONNECTION("START", 2, "E9", 11)
//CONNECTION("START", 2, "E9", 11)
CONNECTION("START2", 1, "E9", 11)
CONNECTION("E9", 10, "E8", 12)
CONNECTION(P, "E8", 10)
CONNECTION(V64I, "E8", 11)
@ -1188,7 +1257,8 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("E7", 13, "E8", 13)
//Start1 Input
CONNECTION("START", 1, "E9", 3)
//CONNECTION("START", 1, "E9", 3)
CONNECTION("START1", 1, "E9", 3)
CONNECTION("E9", 4, "E8", 2)
CONNECTION(P, "E8", 4)
CONNECTION(V64_d, "E8", 3)
@ -1419,9 +1489,9 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(START_GAME1_n, "F4", 13)
CONNECTION("F4", 6, "F3", 5)
CONNECTION(GND, "F3", 4)
CONNECTION(GNDD, "F3", 4)
CONNECTION("F4", 8, "F3", 11)
CONNECTION(GND, "F3", 12)
CONNECTION(GNDD, "F3", 12)
CONNECTION(P, "F3", 3)
CONNECTION(P, "F3", 13)
@ -1484,9 +1554,10 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(START_GAME1_n, "B4", 1)
CONNECTION(BALL_A, "A4", 2)
CONNECTION(BALL_B, "S4", 1)
CONNECTION(BALL_C, "S4", 2)
CONNECTION("S4", 3, "A4", 1)
CONNECTION(BALL_B, "S4", 1) // Three balls
CONNECTION(BALL_C, "S4", 2) // Five balls
//CONNECTION("S4", 3, "A4", 1)
NET_C(S4.Q, A4.1)
CONNECTION("A4", 3, "C37", 1)
CONNECTION(SERVE_WAIT_n, "A4", 5)
@ -1505,6 +1576,7 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION(PSYNC, "B9", 1)
CONNECTION(VSYNC_n, "B9", 2)
#if 0
//CONNECTION("VIDEO", 1, "E2", 11)
CONNECTION("VIDEO", 2, PLAYFIELD)
CONNECTION("VIDEO", 3, BSYNC)
@ -1514,14 +1586,61 @@ CIRCUIT_LAYOUT( breakout )
CONNECTION("VIDEO", Video::HBLANK_PIN, HSYNC)
CONNECTION("VIDEO", Video::VBLANK_PIN, "E3", 10)
#else
RES(R41, RES_K(3.9))
//RES(R42, RES_K(3.9))
RES(R42, RES_K(3.9))
RES(R43, RES_K(3.9))
RES(R51, RES_K(3.9))
RES(R52, RES_K(3.9))
DIODE(CR6, "1N914")
NET_C(CR6.A, R41.1, R42.1, R43.1, R51.1, R52.1)
CONNECTION("R51", 2, PLAYFIELD)
CONNECTION("R43", 2, BSYNC)
CONNECTION("R52", 2, SCORE)
NET_C(R41.2, B9.3)
NET_C(R42.2, V5)
NET_C(E2.11, CR6.K)
ALIAS(videomix, R41.1)
#endif
#if 0
// Audio Summing
CONNECTION("AUDIO", 1, "B9", 11)
CONNECTION("AUDIO", 2, "B9", 8)
CONNECTION("AUDIO", 3, FREE_GAME_TONE)
CONNECTION("AUDIO", 4, "B9", 6)
#else
RES(R36, RES_K(47))
RES(R37, RES_K(47))
RES(R38, RES_K(47))
RES(R39, RES_K(47))
CONNECTION("R36", 2, "B9", 11)
CONNECTION("R38", 2, "B9", 8)
CONNECTION("R39", 2, FREE_GAME_TONE)
CONNECTION("R37", 2, "B9", 6)
NET_C(R36.1, R37.1, R38.1, R39.1)
ALIAS(sound, R36.1)
#endif
/* Not connected pins */
NET_C(ttlhigh, B4.3, B4.4, B4.5, B4.6)
NET_C(ttlhigh, N6.3, N6.4, N6.5, N6.6)
NET_C(ttlhigh, M6.3, M6.4, M6.5, M6.6)
NET_C(ttlhigh, L6.3, L6.4, L6.5, L6.6)
NET_C(ttlhigh, H6.3, H6.4, H6.5, H6.6)
NET_C(ttlhigh, K6.3, K6.4, K6.5, K6.6)
NET_C(ttlhigh, J6.3, J6.4, J6.5, J6.6)
NET_C(ttlhigh, E1.9, E1.11)
NET_C(ttlhigh, E2.1, E2.2)
#ifdef DEBUG
// RAM access

View File

@ -50,16 +50,6 @@ TODO: please see netlist include files
#define VBSTART (V_TOTAL)
#define VBEND (16)
#if 0
fixedfreq_interface fixedfreq_mode_pongX2 = {
MASTER_CLOCK * 2,
(H_TOTAL-67) * 2, (H_TOTAL-40) * 2, (H_TOTAL-8) * 2, (H_TOTAL) * 2,
V_TOTAL-22,V_TOTAL-19,V_TOTAL-16,V_TOTAL,
1, /* non-interlaced */
0.31
};
#endif
enum input_changed_enum
{
IC_PADDLE1,
@ -70,30 +60,19 @@ enum input_changed_enum
IC_VR2
};
#if 0
#include "nl_pongd.inc"
#undef SRST
#undef VCC
#undef GND
#include "nl_pong.inc"
#endif
NETLIST_EXTERNAL(pongdoubles);
NETLIST_EXTERNAL(pong_fast);
NETLIST_EXTERNAL(breakout);
class pong_state : public driver_device
class ttl_mono_state : public driver_device
{
public:
pong_state(const machine_config &mconfig, device_type type, const char *tag)
ttl_mono_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_video(*this, "fixfreq"),
m_dac(*this, "dac"), /* just to have a sound device */
m_sw1a(*this, "maincpu:sw1a"),
m_sw1b(*this, "maincpu:sw1b")
m_dac(*this, "dac") /* just to have a sound device */
{
}
@ -102,14 +81,6 @@ public:
required_device<fixedfreq_device> m_video;
required_device<dac_device> m_dac; /* just to have a sound device */
// sub devices
required_device<netlist_mame_logic_input_t> m_sw1a;
required_device<netlist_mame_logic_input_t> m_sw1b;
//UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
DECLARE_INPUT_CHANGED_MEMBER(input_changed);
NETDEV_ANALOG_CALLBACK_MEMBER(sound_cb)
{
//printf("snd %f\n", newval);
@ -120,10 +91,56 @@ public:
protected:
// driver_device overrides
virtual void machine_start();
virtual void machine_reset();
virtual void machine_start() { };
virtual void machine_reset() { };
virtual void video_start();
virtual void video_start() { };
private:
};
class pong_state : public ttl_mono_state
{
public:
pong_state(const machine_config &mconfig, device_type type, const char *tag)
: ttl_mono_state(mconfig, type, tag),
m_sw1a(*this, "maincpu:sw1a"),
m_sw1b(*this, "maincpu:sw1b")
{
}
// sub devices
required_device<netlist_mame_logic_input_t> m_sw1a;
required_device<netlist_mame_logic_input_t> m_sw1b;
DECLARE_INPUT_CHANGED_MEMBER(input_changed);
protected:
// driver_device overrides
virtual void machine_start() { };
virtual void machine_reset() { };
virtual void video_start() { };
private:
};
class breakout_state : public ttl_mono_state
{
public:
breakout_state(const machine_config &mconfig, device_type type, const char *tag)
: ttl_mono_state(mconfig, type, tag)
{
}
protected:
// driver_device overrides
virtual void machine_start() { };
virtual void machine_reset() { };
virtual void video_start() { };
private:
@ -135,20 +152,6 @@ static NETLIST_START(pong)
NETLIST_END()
void pong_state::machine_start()
{
}
void pong_state::machine_reset()
{
}
void pong_state::video_start()
{
}
INPUT_CHANGED_MEMBER(pong_state::input_changed)
{
int numpad = (FPTR) (param);
@ -216,6 +219,34 @@ static INPUT_PORTS_START( pongd )
#endif
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_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", "coinsw1")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "coinsw2")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw1")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 ) NETLIST_LOGIC_PORT_CHANGED("maincpu", "startsw2")
#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
static MACHINE_CONFIG_START( pong, pong_state )
/* basic machine hardware */
@ -251,6 +282,46 @@ static MACHINE_CONFIG_START( pong, pong_state )
MACHINE_CONFIG_END
static MACHINE_CONFIG_START( breakout, breakout_state )
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
MCFG_NETLIST_SETUP(breakout)
#if 0
MCFG_NETLIST_ANALOG_INPUT("maincpu", "vr0", "ic_b9_R.R")
MCFG_NETLIST_ANALOG_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_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")
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1a", "sw1a.POS", 0, 0x01)
MCFG_NETLIST_LOGIC_INPUT("maincpu", "sw1b", "sw1b.POS", 0, 0x01)
#endif
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)
#if 0
MCFG_NETLIST_LOGIC_INPUT("maincpu", "antenna", "antenna.IN", 0, 0x01)
#endif
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "snd0", "sound", breakout_state, sound_cb, "")
MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "videomix", fixedfreq_device, update_vid, "fixfreq")
/* video hardware */
MCFG_FIXFREQ_ADD("fixfreq", "screen")
MCFG_FIXFREQ_MONITOR_CLOCK(MASTER_CLOCK)
MCFG_FIXFREQ_HORZ_PARAMS(H_TOTAL-67,H_TOTAL-40,H_TOTAL-8,H_TOTAL)
MCFG_FIXFREQ_VERT_PARAMS(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL)
MCFG_FIXFREQ_FIELDCOUNT(1)
MCFG_FIXFREQ_SYNC_THRESHOLD(1.0)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
MCFG_SOUND_ADD("dac", DAC, 48000)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( pongf, pong )
/* basic machine hardware */
@ -312,6 +383,10 @@ ROM_START( pong ) /* dummy to satisfy game entry*/
ROM_LOAD( "pong.netlist", 0x000000, 0x00457f, CRC(72d5e4fe) SHA1(7bb15828223c34915c5e2869dd7917532a4bb7b4) )
ROM_END
ROM_START( breakout )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( pongf ) /* dummy to satisfy game entry*/
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
@ -323,3 +398,4 @@ ROM_END
GAME( 1972, pong, 0, pong, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) external [TTL]", GAME_SUPPORTS_SAVE)
GAME( 1972, pongf, 0, pongf, pong, driver_device, 0, ROT0, "Atari", "Pong (Rev E) [TTL]", GAME_SUPPORTS_SAVE )
GAME( 1974, pongd, 0, pongd, pongd, driver_device, 0, ROT0, "Atari", "Pong Doubles [TTL]", GAME_SUPPORTS_SAVE )
GAME( 1976, breakout, 0, breakout, breakout, driver_device, 0, ROT90, "Atari", "Breakout [TTL]", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING)

View File

@ -12926,8 +12926,8 @@ tank // (c) 1974 Atari
// Atari 100% TTL
pong // (c) 1972 Atari
pongd // (c) 1975 Atari
pongf // (c) 1972 Atari - no subcycles
//breakout
pongf // (c) 1972 Atari
breakout // (c) 1976 Atari
//coupedem
//goal4
//gotchaat