From e88ec6a7a52d8578bdb611c4942d96101704a7a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felipe=20Corr=C3=AAa=20da=20Silva=20Sanches?= Date: Fri, 27 Jul 2018 01:45:42 -0300 Subject: [PATCH] A large portion of the Atari Gran Trak 10 schematics (1974) implemented on MAME using the netlist subsystem. --- scripts/src/netlist.lua | 4 + src/lib/netlist/build/makefile | 2 + src/lib/netlist/buildVS/netlistlib.vcxproj | 4 + .../buildVS/netlistlib.vcxproj.filters | 12 + src/lib/netlist/devices/net_lib.cpp | 4 + src/lib/netlist/devices/net_lib.h | 2 + src/lib/netlist/devices/nld_9316.h | 4 +- src/lib/netlist/devices/nld_dm9314.cpp | 114 ++++++ src/lib/netlist/devices/nld_dm9314.h | 42 ++ src/lib/netlist/devices/nld_tms4800.cpp | 104 +++++ src/lib/netlist/devices/nld_tms4800.h | 53 +++ src/mame/drivers/atarittl.cpp | 101 ++++- src/mame/machine/nl_gtrak10.cpp | 381 ++++++++++++++++++ src/mame/machine/nl_gtrak10.h | 6 + 14 files changed, 810 insertions(+), 23 deletions(-) create mode 100644 src/lib/netlist/devices/nld_dm9314.cpp create mode 100644 src/lib/netlist/devices/nld_dm9314.h create mode 100644 src/lib/netlist/devices/nld_tms4800.cpp create mode 100644 src/lib/netlist/devices/nld_tms4800.h create mode 100644 src/mame/machine/nl_gtrak10.cpp create mode 100644 src/mame/machine/nl_gtrak10.h diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index 6027b513de6..29eb931f916 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -114,6 +114,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_2102A.h", MAME_DIR .. "src/lib/netlist/devices/nld_2716.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_2716.h", + MAME_DIR .. "src/lib/netlist/devices/nld_tms4800.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_tms4800.h", MAME_DIR .. "src/lib/netlist/devices/nld_4020.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_4020.h", MAME_DIR .. "src/lib/netlist/devices/nld_4066.cpp", @@ -182,6 +184,8 @@ project "netlist" MAME_DIR .. "src/lib/netlist/devices/nld_9322.h", MAME_DIR .. "src/lib/netlist/devices/nld_am2847.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_am2847.h", + MAME_DIR .. "src/lib/netlist/devices/nld_dm9314.cpp", + MAME_DIR .. "src/lib/netlist/devices/nld_dm9314.h", MAME_DIR .. "src/lib/netlist/devices/nld_dm9334.cpp", MAME_DIR .. "src/lib/netlist/devices/nld_dm9334.h", MAME_DIR .. "src/lib/netlist/devices/nld_ne555.cpp", diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 282b10ec32c..2ac9372ade5 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -79,6 +79,7 @@ NLOBJS := \ $(NLOBJ)/analog/nld_opamps.o \ $(NLOBJ)/devices/nld_2102A.o \ $(NLOBJ)/devices/nld_2716.o \ + $(NLOBJ)/devices/nld_tms4800.o \ $(NLOBJ)/devices/nld_4020.o \ $(NLOBJ)/devices/nld_4066.o \ $(NLOBJ)/devices/nld_4316.o \ @@ -113,6 +114,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_9316.o \ $(NLOBJ)/devices/nld_9322.o \ $(NLOBJ)/devices/nld_am2847.o \ + $(NLOBJ)/devices/nld_dm9314.o \ $(NLOBJ)/devices/nld_dm9334.o \ $(NLOBJ)/devices/nld_mm5837.o \ $(NLOBJ)/devices/nld_ne555.o \ diff --git a/src/lib/netlist/buildVS/netlistlib.vcxproj b/src/lib/netlist/buildVS/netlistlib.vcxproj index 454990813e5..4a36bdc3496 100755 --- a/src/lib/netlist/buildVS/netlistlib.vcxproj +++ b/src/lib/netlist/buildVS/netlistlib.vcxproj @@ -114,6 +114,7 @@ + @@ -148,6 +149,7 @@ + @@ -195,6 +197,7 @@ + @@ -230,6 +233,7 @@ + diff --git a/src/lib/netlist/buildVS/netlistlib.vcxproj.filters b/src/lib/netlist/buildVS/netlistlib.vcxproj.filters index 43793637be2..2b923f04bde 100755 --- a/src/lib/netlist/buildVS/netlistlib.vcxproj.filters +++ b/src/lib/netlist/buildVS/netlistlib.vcxproj.filters @@ -177,6 +177,9 @@ Source Files + + Source Files + Source Files @@ -219,6 +222,9 @@ Source Files + + Source Files + Source Files @@ -437,6 +443,9 @@ Header Files + + Header Files + Header Files @@ -467,6 +476,9 @@ Header Files + + Header Files + Header Files diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index d0875338eab..e0f0277daac 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -61,6 +61,7 @@ namespace netlist ENTRYX(nicRSFF, NETDEV_RSFF, "") ENTRYX(nicDelay, NETDEV_DELAY, "") ENTRYX(2716, EPROM_2716, "+GQ,+EPQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+A10") + ENTRYX(TMS4800, ROM_TMS4800, "+AR,+OE1,+OE2,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+A10") ENTRYX(2102A, RAM_2102A, "+CEQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+RWQ,+DI") ENTRYX(7450, TTL_7450_ANDORINVERT, "+A,+B,+C,+D") ENTRYX(7448, TTL_7448, "+A,+B,+C,+D,+LTQ,+BIQ,+RBIQ") @@ -94,6 +95,7 @@ namespace netlist ENTRYX(82S123, PROM_82S123, "+CEQ,+A0,+A1,+A2,+A3,+A4") ENTRYX(82S126, PROM_82S126, "+CE1Q,+CE2Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7") ENTRYX(9310, TTL_9310, "") + ENTRYX(9314, TTL_9314, "+EQ,+MRQ,+S0Q,+S1Q,+S2Q,+S3Q,+D0,+D1,+D2,+D3") ENTRYX(9316, TTL_9316, "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D") ENTRYX(9322, TTL_9322, "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE") ENTRYX(9334, TTL_9334, "+CQ,+EQ,+D,+A0,+A1,+A2") @@ -111,6 +113,7 @@ namespace netlist ENTRYX(tristate3, TTL_TRISTATE3, "") ENTRYX(2102A_dip, RAM_2102A_DIP, "") ENTRYX(2716_dip, EPROM_2716_DIP, "") + ENTRYX(tms4800_dip, ROM_TMS4800_DIP, "") ENTRYX(4538_dip, CD4538_DIP, "") ENTRYX(7448_dip, TTL_7448_DIP, "") ENTRYX(7450_dip, TTL_7450_DIP, "") @@ -142,6 +145,7 @@ namespace netlist ENTRYX(82S126_dip, PROM_82S126_DIP, "") ENTRYX(9602_dip, TTL_9602_DIP, "") ENTRYX(9310_dip, TTL_9310_DIP, "") + ENTRYX(9314_dip, TTL_9314_DIP, "") ENTRYX(9316_dip, TTL_9316_DIP, "") ENTRYX(9322_dip, TTL_9322_DIP, "") ENTRYX(9334_dip, TTL_9334_DIP, "") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 49002594138..4dead624fc2 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -35,6 +35,7 @@ #include "nld_2102A.h" #include "nld_2716.h" +#include "nld_tms4800.h" #include "nld_4020.h" #include "nld_4066.h" #include "nld_7448.h" @@ -69,6 +70,7 @@ #include "nld_9322.h" #include "nld_am2847.h" +#include "nld_dm9314.h" #include "nld_dm9334.h" #include "nld_ne555.h" diff --git a/src/lib/netlist/devices/nld_9316.h b/src/lib/netlist/devices/nld_9316.h index 99ab677d548..8deb21dfccd 100644 --- a/src/lib/netlist/devices/nld_9316.h +++ b/src/lib/netlist/devices/nld_9316.h @@ -6,14 +6,14 @@ * DM9316: Synchronous 4-Bit Counters * * +--------------+ - * CLEAR |1 ++ 16| VCC + * /CLEAR |1 ++ 16| VCC * CLOCK |2 15| RC (Ripple Carry) * A |3 14| QA * B |4 9316 13| QB * C |5 12| QC * D |6 11| QD * Enable P |7 10| Enable T - * GND |8 9| LOAD + * GND |8 9| /LOAD * +--------------+ * * Counter Sequence diff --git a/src/lib/netlist/devices/nld_dm9314.cpp b/src/lib/netlist/devices/nld_dm9314.cpp new file mode 100644 index 00000000000..fd3b8666078 --- /dev/null +++ b/src/lib/netlist/devices/nld_dm9314.cpp @@ -0,0 +1,114 @@ +// license:BSD-3-Clause +// copyright-holders:Felipe Sanches +/* + * nld_dm9314.cpp + * + */ + +#include "nld_dm9314.h" +#include "../nl_base.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(9314) + { + NETLIB_CONSTRUCTOR(9314) + , m_EQ(*this, "EQ") + , m_MRQ(*this, "MRQ") + , m_SQ(*this, {{"S0Q", "S1Q", "S2Q", "S3Q"}}) + , m_D(*this, {{"D0", "D1", "D2", "D3"}}) + , m_Q(*this, {{"Q0", "Q1", "Q2", "Q3"}}) + , m_last_EQ(*this, "m_last_EQ", 0) + , m_last_MRQ(*this, "m_last_MRQ", 0) + , m_last_SQ(*this, "m_last_SQ", 0) + , m_last_D(*this, "m_last_D", 0) + , m_last_Q(*this, "m_last_Q", 0) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + logic_input_t m_EQ; + logic_input_t m_MRQ; + object_array_t m_SQ; + object_array_t m_D; + object_array_t m_Q; + + state_var m_last_EQ; + state_var m_last_MRQ; + state_var m_last_SQ; + state_var m_last_D; + state_var m_last_Q; + }; + + NETLIB_OBJECT_DERIVED(9314_dip, 9314) + { + NETLIB_CONSTRUCTOR_DERIVED(9314_dip, 9314) + { + register_subalias("1", m_EQ); + register_subalias("2", m_SQ[0]); + register_subalias("3", m_D[0]); + register_subalias("4", m_D[1]); + register_subalias("5", m_SQ[2]); + register_subalias("6", m_D[2]); + register_subalias("7", m_D[3]); + + register_subalias("9", m_MRQ); + register_subalias("10", m_Q[3]); + register_subalias("11", m_SQ[3]); + register_subalias("12", m_Q[2]); + register_subalias("13", m_Q[1]); + register_subalias("14", m_SQ[1]); + register_subalias("15", m_Q[0]); + + } + }; + + NETLIB_RESET(9314) + { + m_last_MRQ = 0; + m_last_EQ = 0; + m_last_SQ = 0; + m_last_D = 0; + m_last_Q = 0; + } + + NETLIB_UPDATE(9314) + { + netlist_time delay = NLTIME_FROM_NS(24); //FIXME! + if (!m_MRQ()) + { + /* Reset! */ + for (std::size_t i=0; i<4; i++) + m_Q[i].push(0, delay); + } else { + for (std::size_t i=0; i<4; i++) + { + if (m_SQ[i]()) + { + /* R-S Mode */ + // FIXME: R-S mode is not yet implemented! + } + else + { + /* D Mode */ + if (!m_EQ()) + { + m_Q[i].push(m_D[i](), delay); + m_last_Q &= ~(1 << i); + m_last_Q |= (m_D[i]() << i); + } + } + } + } + } + + NETLIB_DEVICE_IMPL(9314) + NETLIB_DEVICE_IMPL(9314_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_dm9314.h b/src/lib/netlist/devices/nld_dm9314.h new file mode 100644 index 00000000000..6188bbef42f --- /dev/null +++ b/src/lib/netlist/devices/nld_dm9314.h @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:Felipe Sanches +/* + * nld_DM9314.h + * + * DM9314: 4-Bit Latches + * + * +--------------+ + * /E |1 ++ 16| VCC + * /S0 |2 15| Q0 + * D0 |3 14| /S1 + * D1 |4 DM9314 13| Q1 + * /S2 |5 12| Q2 + * D2 |6 11| /S3 + * D3 |7 10| Q3 + * GND |8 9| /MR + * +--------------+ + * + */ + +#ifndef NLD_DM9314_H_ +#define NLD_DM9314_H_ + +#include "../nl_setup.h" + +#define TTL_9314(name, cEQ, cMRQ, cS0Q, cS1Q, cS2Q, cS3Q, cD0, cD1, cD2, cD3) \ + NET_REGISTER_DEV(TTL_9314, name) \ + NET_CONNECT(name, EQ, cEQ) \ + NET_CONNECT(name, MRQ, cMRQ) \ + NET_CONNECT(name, S0Q, cS0Q) \ + NET_CONNECT(name, S1Q, cS1Q) \ + NET_CONNECT(name, S2Q, cS2Q) \ + NET_CONNECT(name, S3Q, cS3Q) \ + NET_CONNECT(name, D0, cD0) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) + +#define TTL_9314_DIP(name) \ + NET_REGISTER_DEV(TTL_9314_DIP, name) + +#endif /* NLD_DM9314_H_ */ diff --git a/src/lib/netlist/devices/nld_tms4800.cpp b/src/lib/netlist/devices/nld_tms4800.cpp new file mode 100644 index 00000000000..29a9bd836ab --- /dev/null +++ b/src/lib/netlist/devices/nld_tms4800.cpp @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders:Felipe Sanches +/* + * nld_tms4800.cpp + * + */ + +#include "nld_tms4800.h" +#include "../nl_base.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(TMS4800) + { + NETLIB_CONSTRUCTOR(TMS4800) + , m_A(*this, {{ "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10" }}) + , m_AR(*this, "AR") + , m_OE1(*this, "OE1") + , m_OE2(*this, "OE2") + , m_D(*this, {{ "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7" }}) + , m_last_data(*this, "m_last_data", 1) + , m_ROM(*this, "ROM") + { + } + + NETLIB_UPDATEI(); + + protected: + object_array_t m_A; + logic_input_t m_AR; + logic_input_t m_OE1; + logic_input_t m_OE2; + object_array_t m_D; + + state_var m_last_data; + + param_rom_t m_ROM; // 16 Kbits, used as 2 Kbit x 8 + }; + + NETLIB_OBJECT_DERIVED(tms4800_dip, TMS4800) + { + NETLIB_CONSTRUCTOR_DERIVED(tms4800_dip, TMS4800) + { + register_subalias("2", m_A[0]); + register_subalias("3", m_A[1]); + register_subalias("4", m_A[2]); + register_subalias("5", m_A[3]); + register_subalias("6", m_A[4]); + register_subalias("7", m_A[5]); + register_subalias("12", m_A[6]); + register_subalias("11", m_A[7]); + register_subalias("10", m_A[8]); + register_subalias("8", m_A[9]); + register_subalias("15", m_A[10]); + + register_subalias("13", m_AR); + register_subalias("24", m_OE1); + register_subalias("14", m_OE2); + + register_subalias("23", m_D[0]); + register_subalias("22", m_D[1]); + register_subalias("21", m_D[2]); + register_subalias("20", m_D[3]); + register_subalias("19", m_D[4]); + register_subalias("18", m_D[5]); + register_subalias("17", m_D[6]); + register_subalias("16", m_D[7]); + } + }; + + // FIXME: timing! + NETLIB_UPDATE(TMS4800) + { + unsigned d = 0x00; + + netlist_time delay = NLTIME_FROM_NS(450); + if (m_AR()) + { + unsigned a = 0; + for (std::size_t i=0; i<11; i++) + a |= (m_A[i]() << i); + + m_last_data = m_ROM[a]; + } + else + { + for (std::size_t i=0; i<4; i++) + { + if (m_OE1()) + m_D[i].push((d >> i) & 1, delay); + + if (m_OE2()) + m_D[i+4].push((d >> (i+4)) & 1, delay); + } + } + } + + NETLIB_DEVICE_IMPL(TMS4800) + NETLIB_DEVICE_IMPL(tms4800_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_tms4800.h b/src/lib/netlist/devices/nld_tms4800.h new file mode 100644 index 00000000000..dc72354cb03 --- /dev/null +++ b/src/lib/netlist/devices/nld_tms4800.h @@ -0,0 +1,53 @@ +// license:BSD-3-Clause +// copyright-holders:Felipe Sanches +/* + * nld_tms4800.h + * + * TMS-4800: 16 Kbit (2Kb x 8) READ ONLY MEMORY + * + * +----------------+ + * VSS |1 ++ 24| OE1 + * A1 |2 23| O1 + * A2 |3 22| O2 + * A3 |4 TMS-4800 21| O3 + * A4 |5 20| O4 + * A5 |6 19| O5 + * A6 |7 18| O6 + * A10 |8 17| O7 + * VGG |9 16| O8 + * A9 |10 15| A11 + * A8 |11 14| OE2 + * A7 |12 13| AR + * +----------------+ + * + * + * Naming conventions follow Texas Instruments datasheet: + * http://bitsavers.trailing-edge.com/components/ti/_dataBooks/1975_TI_The_Semiconductor_Memory_Data_Book.pdf + */ + +#ifndef NLD_TMS4800_H_ +#define NLD_TMS4800_H_ + +#include "../nl_setup.h" + +#define ROM_TMS4800(name, cAR, cOE1, cOE2, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cA9, cA10) \ + NET_REGISTER_DEV(ROM_TMS4800, name) \ + NET_CONNECT(name, AR, cAR) \ + NET_CONNECT(name, OE1, cOE1) \ + NET_CONNECT(name, OE2, cOE2) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ + NET_CONNECT(name, A7, cA7) \ + NET_CONNECT(name, A8, cA8) \ + NET_CONNECT(name, A9, cA9) \ + NET_CONNECT(name, A10, cA10) + +#define ROM_TMS4800_DIP(name) \ + NET_REGISTER_DEV(ROM_TMS4800_DIP, name) + +#endif /* NLD_TMS4800_H_ */ diff --git a/src/mame/drivers/atarittl.cpp b/src/mame/drivers/atarittl.cpp index f554c80bceb..3d969530dce 100644 --- a/src/mame/drivers/atarittl.cpp +++ b/src/mame/drivers/atarittl.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Fabio Priuli, Scott Stone, Couriersud +// copyright-holders:Fabio Priuli, Scott Stone, Couriersud, Felipe Sanches /*************************************************************************** Atari / Kee Games Driver - Discrete Games made in the 1970's @@ -76,6 +76,7 @@ #include "machine/netlist.h" #include "machine/nl_stuntcyc.h" +#include "machine/nl_gtrak10.h" #include "netlist/devices/net_lib.h" #include "video/fixfreq.h" #include "screen.h" @@ -103,6 +104,10 @@ #define SC_VBSTART (SC_VTOTAL) #define SC_VBEND (8) +#define GTRAK10_VIDCLOCK 14318181 +#define GTRAK10_HTOTAL 451 +#define GTRAK10_VTOTAL 521 + class atarikee_state : public driver_device { public: @@ -192,6 +197,17 @@ private: double m_last_fraction; }; +class gtrak10_state : public driver_device +{ +public: + gtrak10_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + { + } + + void gtrak10(machine_config &config); +}; + static NETLIST_START(atarikee) SOLVER(Solver, 48000) // PARAM(Solver.FREQ, 48000) @@ -352,6 +368,49 @@ MACHINE_CONFIG_START(stuntcyc_state::stuntcyc) //MCFG_FIXFREQ_SYNC_THRESHOLD(0.30) MACHINE_CONFIG_END +MACHINE_CONFIG_START(gtrak10_state::gtrak10) + /* basic machine hardware */ + MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) + MCFG_NETLIST_SETUP(gtrak10) + + MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "VIDEO_OUT", fixedfreq_device, update_vid, "fixfreq") + + /* video hardware */ + + /* Service Manual describes it as + "true interlaced raster scan" + "composed of 260.5 horizontal lines stacked on top of one another" + + == PARAMETERS == + + Pixel Clock = 14.318MHz + + Horiz Total = 451 + Horiz Front Porch = 0 + Horiz Sync = 1 + Horiz Back Porch = 31 + + Vert Total = 521 + Vert Front Porch = 0 + Vert Sync = 8 + Vert Back Porch = 0 + */ + + MCFG_FIXFREQ_ADD("fixfreq", "screen") + MCFG_FIXFREQ_MONITOR_CLOCK(GTRAK10_VIDCLOCK) + // Length of active video, end of front-porch, end of sync signal, end of line/frame + MCFG_FIXFREQ_HORZ_PARAMS(GTRAK10_HTOTAL*1 - 32, GTRAK10_HTOTAL*1 - 32, GTRAK10_HTOTAL*1 - 31, GTRAK10_HTOTAL*1) + //MCFG_FIXFREQ_HORZ_PARAMS(GTRAK10_HTOTAL - 32, GTRAK10_HTOTAL - 32, GTRAK10_HTOTAL - 31, GTRAK10_HTOTAL) + MCFG_FIXFREQ_VERT_PARAMS( GTRAK10_VTOTAL - 8, GTRAK10_VTOTAL - 8, GTRAK10_VTOTAL, GTRAK10_VTOTAL) + MCFG_FIXFREQ_FIELDCOUNT(2) + MCFG_FIXFREQ_SYNC_THRESHOLD(1.0) + //MCFG_FIXFREQ_GAIN(1.50) + +MACHINE_CONFIG_END + +static INPUT_PORTS_START( gtrak10 ) + // TODO +INPUT_PORTS_END /*************************************************************************** @@ -390,7 +449,7 @@ ROM_END ROM_START( gtrak10 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) - ROM_REGION( 0x0800, "racetrack", ROMREGION_ERASE00 ) + ROM_REGION( 0x0800, "maincpu:gamedata", ROMREGION_ERASE00 ) ROM_LOAD( "074186.j5", 0x0000, 0x0800, CRC(3bad3280) SHA1(b83fe1a1dc6bf20717dadf576f1d817496340f8c) ) // not actually a SN74186 but an Electronic Arrays, Inc. EA4800 16K (2048 x 8) ROM. TI TMS4800 clone (EA4800). Intentionally mislabeled by Atari. ROM_END @@ -398,7 +457,7 @@ ROM_END ROM_START( gtrak10a ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) - ROM_REGION( 0x0800, "racetrack", ROMREGION_ERASE00 ) + ROM_REGION( 0x0800, "maincpu:gamedata", ROMREGION_ERASE00 ) ROM_LOAD( "074181.j5", 0x0000, 0x0800, CRC(f564c58a) SHA1(8097419e22bd8b5fd2a9fe4ea89302046c42e583) ) // not actually a SN74181 but an Electronic Arrays, Inc. EA4800 16K (2048 x 8) ROM. TI TMS4800 clone (EA4800). Intentionally mislabeled by Atari. ROM_END @@ -406,7 +465,7 @@ ROM_END ROM_START( gtrak20 ) ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) - ROM_REGION( 0x2000, "racetrack", ROMREGION_ERASE00 ) + ROM_REGION( 0x2000, "maincpu:gamedata", ROMREGION_ERASE00 ) ROM_LOAD( "074187.b3", 0x0000, 0x0800, CRC(d38709ca) SHA1(1ea5d174dbd0faa0c8aba6b8c845c62b18d9e60b) ) ROM_LOAD( "074187a.d3", 0x0800, 0x0800, CRC(3d30654f) SHA1(119bac8ba8c300c026decf3f59a7da4e5d746648) ) ROM_LOAD( "074187b.f3", 0x1000, 0x0800, CRC(a811cc11) SHA1(a0eb3f732268e796068d1a6c96cdddd1fd7fba21) ) @@ -646,23 +705,23 @@ ROM_END */ -GAME(1975, antiairc, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Anti-Aircraft [TTL]", MACHINE_IS_SKELETON) -GAME(1975, crashnsc, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Crash 'n Score/Stock Car [TTL]", MACHINE_IS_SKELETON) -GAME(1974, gtrak10, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Gran Trak 10/Trak 10/Formula K [TTL]", MACHINE_IS_SKELETON) -GAME(1974, gtrak10a, gtrak10, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Gran Trak 10/Trak 10/Formula K (older) [TTL]", MACHINE_IS_SKELETON) -GAME(1974, gtrak20, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Gran Trak 20/Trak 20/Twin Racer [TTL]", MACHINE_IS_SKELETON) -GAME(1976, indy4, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Indy 4 [TTL]", MACHINE_IS_SKELETON) -GAME(1975, indy800, 0, atarikee, 0, atarikee_state, empty_init, ROT90, "Atari/Kee", "Indy 800 [TTL]", MACHINE_IS_SKELETON) -GAME(1975, jetfight, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 1) [TTL]", MACHINE_IS_SKELETON) -GAME(1975, jetfighta, jetfight, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 2) [TTL]", MACHINE_IS_SKELETON) -GAME(1976, lemans, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Le Mans [TTL]", MACHINE_IS_SKELETON) -GAME(1976, outlaw, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Outlaw [TTL]", MACHINE_IS_SKELETON) -GAME(1974, qwakttl, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Qwak!/Quack [TTL]", MACHINE_IS_SKELETON) -GAME(1975, sharkjaw, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Horror Games", "Shark JAWS [TTL]", MACHINE_IS_SKELETON) -GAME(1975, steeplec, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Steeplechase [TTL]", MACHINE_IS_SKELETON) -GAME(1976, stuntcyc, 0, stuntcyc, 0, stuntcyc_state, empty_init, ROT0, "Atari", "Stunt Cycle [TTL]", MACHINE_IS_SKELETON) -GAME(1974, tank, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Tank/Tank Cocktail [TTL]", MACHINE_IS_SKELETON) -GAME(1975, tankii, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Tank II [TTL]", MACHINE_IS_SKELETON) +GAME(1975, antiairc, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Anti-Aircraft [TTL]", MACHINE_IS_SKELETON) +GAME(1975, crashnsc, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Crash 'n Score/Stock Car [TTL]", MACHINE_IS_SKELETON) +GAME(1974, gtrak10, 0, gtrak10, gtrak10, gtrak10_state, empty_init, ROT0, "Atari/Kee", "Gran Trak 10/Trak 10/Formula K [TTL]", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +GAME(1974, gtrak10a, gtrak10, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Gran Trak 10/Trak 10/Formula K (older) [TTL]", MACHINE_IS_SKELETON) +GAME(1974, gtrak20, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Gran Trak 20/Trak 20/Twin Racer [TTL]", MACHINE_IS_SKELETON) +GAME(1976, indy4, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Indy 4 [TTL]", MACHINE_IS_SKELETON) +GAME(1975, indy800, 0, atarikee, 0, atarikee_state, empty_init, ROT90, "Atari/Kee", "Indy 800 [TTL]", MACHINE_IS_SKELETON) +GAME(1975, jetfight, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 1) [TTL]", MACHINE_IS_SKELETON) +GAME(1975, jetfighta, jetfight, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (set 2) [TTL]", MACHINE_IS_SKELETON) +GAME(1976, lemans, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Le Mans [TTL]", MACHINE_IS_SKELETON) +GAME(1976, outlaw, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Outlaw [TTL]", MACHINE_IS_SKELETON) +GAME(1974, qwakttl, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Qwak!/Quack [TTL]", MACHINE_IS_SKELETON) +GAME(1975, sharkjaw, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Horror Games", "Shark JAWS [TTL]", MACHINE_IS_SKELETON) +GAME(1975, steeplec, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Steeplechase [TTL]", MACHINE_IS_SKELETON) +GAME(1976, stuntcyc, 0, stuntcyc, 0, stuntcyc_state, empty_init, ROT0, "Atari", "Stunt Cycle [TTL]", MACHINE_IS_SKELETON) +GAME(1974, tank, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Tank/Tank Cocktail [TTL]", MACHINE_IS_SKELETON) +GAME(1975, tankii, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Tank II [TTL]", MACHINE_IS_SKELETON) // MISSING ROM DUMPS //GAME(1975, astrotrf, steeplec, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Astroturf [TTL]", MACHINE_IS_SKELETON) diff --git a/src/mame/machine/nl_gtrak10.cpp b/src/mame/machine/nl_gtrak10.cpp new file mode 100644 index 00000000000..cb9e693d619 --- /dev/null +++ b/src/mame/machine/nl_gtrak10.cpp @@ -0,0 +1,381 @@ +// license:BSD-3-Clause +// copyright-holders:Felipe Sanches + +/*************************************************************************** + + Netlist (gtrak10) included from atarittl.cpp + +***************************************************************************/ + +#include "netlist/devices/net_lib.h" + +//render a white square with the shape of the car window +//instead of drawing the actual car sprite graphics +#define CAR_WINDOW_HACK + +//generate a regular pattern of squares +// instead of the race track +//#define SIGNAL_RT_HACK +//#define SIGNAL_RT_HACK_XOR + +NETLIST_START(gtrak10) + + SOLVER(Solver, 48000) + PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers + PARAM(Solver.ACCURACY, 1e-4) // works and is sufficient + PARAM(NETLIST.USE_DEACTIVATE, 1) + + ANALOG_INPUT(V5, 5) + + TTL_INPUT(high, 1) + TTL_INPUT(low, 0) + + MAINCLOCK(CLOCK, 14318181) + + ALIAS(P, high) + ALIAS(GROUND, low) + + // Horizontal Counters + // name, CLK, ENP, ENT, CLRQ, LOADQ, A, B, C, D + TTL_9316(L2, CLOCK, P, P, HRESET_Q, P, GROUND, GROUND, GROUND, GROUND) + TTL_9316(K2, CLOCK, L2.RC, P, HRESET_Q, P, GROUND, GROUND, GROUND, GROUND) + // name, CLK, J, K, CLRQ + TTL_74107(K1_A, K2.RC, P, P, HRESET_Q) + TTL_74107(K1_B, 256H, P, P, P) + TTL_7404_INVERT(unlabeled_F1_1, 16H) + ALIAS( 1H, L2.QA) + ALIAS( 2H, L2.QB) + ALIAS( 4H, L2.QC) + ALIAS( 8H, L2.QD) + ALIAS( 16H, K2.QA) + ALIAS( 16H_Q, unlabeled_F1_1.Q) + ALIAS( 32H, K2.QB) + ALIAS( 64H, K2.QC) + ALIAS(128H, K2.QD) + ALIAS(256H, K1_A.Q) + ALIAS(512H, K1_B.Q) + ALIAS(512H_Q, K1_B.QQ) + + // Horizontal Reset + TTL_7408_AND(E2_A, 2H, 64H) + ALIAS(2H_AND_64H, E2_A.Q) + TTL_7410_NAND(J1_C, 2H_AND_64H, 128H, 256H) // 450th horizontal pixel (active low) + ALIAS(450H_Q, J1_C.Q) + // name, CLK, D, CLRQ, PREQ + TTL_7474(H1_A, CLOCK, 450H_Q, P, P) + ALIAS(HRESET_Q, H1_A.Q) + ALIAS(HRESET, H1_A.QQ) + + // Vertical Counters + // name, CLKA, CLKB, R1, R2 + TTL_7493(F3, HBLANK, 1V, VRESET, VRESET) + TTL_7493(H2, 8V, 16V, VRESET, VRESET) + TTL_7493(I2, 128V, 256V, VRESET, VRESET) + ALIAS( 1V, F3.QA) + ALIAS( 2V, F3.QB) + ALIAS( 4V, F3.QC) + ALIAS( 8V, F3.QD) + ALIAS( 16V, H2.QA) + ALIAS( 32V, H2.QB) + ALIAS( 64V, H2.QC) + ALIAS(128V, H2.QD) + ALIAS(256V, I2.QA) + ALIAS(512V, I2.QB) + + // Vertical Reset + TTL_7408_AND(E2_B, 512V, 8V) + ALIAS(520V, E2_B.Q) // 520th "half-line" (?) + // name, CLK, D, CLRQ, PREQ + TTL_7474(H1_B, HRESET_Q, 520V, P, P) + ALIAS(VRESET, H1_B.Q) + ALIAS(VRESET_Q, H1_B.QQ) + + // Horizontal Blank Flip-Flop: + TTL_7402_NOR(F1_C, 32H, HBLANK_Q) + TTL_7402_NOR(F1_B, HRESET, HBLANK) + ALIAS(HBLANK, F1_C.Q) + ALIAS(HBLANK_Q, F1_B.Q) + + // Vertical Sync Flip-Flop: + TTL_7402_NOR(F1_D, 8V, VSYNC_Q) + TTL_7402_NOR(F1_A, VRESET, VSYNC) + ALIAS(VSYNC, F1_D.Q) + ALIAS(VSYNC_Q, F1_A.Q) + + // Horizontal Sync = HBLANK & /HRESET & /512H + TTL_7410_NAND(J1_B, HBLANK, HRESET_Q, 512H_Q) + TTL_7404_INVERT(E1_E, HSYNC_Q) + ALIAS(HSYNC, E1_E.Q) + ALIAS(HSYNC_Q, J1_B.Q) + + // Composite Sync = /HSYNC XOR /VSYNC + TTL_7486_XOR(D2_B, HSYNC_Q, VSYNC) + TTL_7404_INVERT(C2_C, COMP_SYNC) + ALIAS(COMP_SYNC, D2_B.Q) + ALIAS(COMP_SYNC_Q, C2_C.Q) + + + // VLd1 signal (vertical load one) + // Used to address the ROM for the vertical positioning of the car image + // name, CLK, D, CLRQ, PREQ + TTL_7474(B1_B, VRESET_Q, GROUND, P, VLd1_Q) + TTL_7474(B1_A, HSYNC, B1_B.Q, P, P) + ALIAS(VLd1_Q, B1_A.Q) + ALIAS(VLd1, B1_A.QQ) + + + // Ld1B signal (load one B): + // name, CLK, D, CLRQ, PREQ + TTL_7474(D1_A, 16H_Q, P, HSYNC_Q, VSYNC_Q) + TTL_7404_INVERT(E1_D, Ld1B_Q) + ALIAS(Ld1B, E1_D.Q) + ALIAS(Ld1B_Q, D1_A.Q) + + + // HCOUNT signal: + // name, CLK, J, K, CLRQ + TTL_74107(L1_A, 1H, P, L1_B.QQ, C9.2) + TTL_74107(L1_B, 1H, L1_A.Q, GROUND, C9.2) + CAP(C9, CAP_P(330)) + RES(R1, RES_R(330)) + RES(R2, RES_R(330)) + NET_C(C9.1, HSYNC_Q) + NET_C(R1.1, V5) + NET_C(C9.2, R1.2) + NET_C(C9.2, R2.1) + NET_C(R2.2, GROUND) + ALIAS(HCOUNT, L1_A.QQ) + + + // TODO: SPEED_PULSE + // This signal is generated from one of the proprietary Atari chips. + // Until we model that, I'll keep a place-holder here + // corresponding to the typical frequency you'd see when the car is + // running on the 3rd gear during gameplay. + ALIAS(SPEED_PULSE, VRESET) //FIXME! + + + // 1STOP_Q Signal: + // name, CLK, D, CLRQ, PREQ + TTL_7474(B2_A, SPEED_PULSE, ATRC_Q, A2_D.Q, P) + TTL_7474(B2_B, VLd1, B2_A.Q, P, P) + TTL_7400_NAND(A2_D, 1STOP_Q, VLd1) + ALIAS(1STOP_Q, B2_B.Q) + + + // TODO: ATRC signal: + // ... + ALIAS(ATRC, GROUND) // FIXME! + ALIAS(ATRC_Q, P) // FIXME! + + + // TODO: RESET1_Q signal: + // ... + ALIAS(RESET1_Q, P) // FIXME! + + + // TODO: SCORE_DISP_Q signal: + // ... + ALIAS(SCORE_DISP_Q, GROUND) // FIXME! + + // Car direction (?) + ALIAS(1D0, GROUND) // FIXME! + ALIAS(1D1, GROUND) // FIXME! + ALIAS(1D2, GROUND) // FIXME! + ALIAS(1D3, GROUND) // FIXME! + ALIAS(1D4, GROUND) // FIXME! + + // Car rotation (?) + ALIAS(1R0, GROUND) // FIXME! + ALIAS(1R1, GROUND) // FIXME! + ALIAS(1R2, GROUND) // FIXME! + ALIAS(1R3, GROUND) // FIXME! + + + // ROM multiplexers: + // --- Addresses 10 and 9 --- + TTL_7400_NAND(L5_B, Ld1B_Q, SCORE_DISP_Q) + TTL_7400_NAND(L5_C, Ld1B_Q, L5_D.Q) //labeled "[74]08" on schematics! + TTL_7400_NAND(L5_D, GROUND, SCORE_DISP_Q) + ALIAS(ABCD, L5_B.Q) + + // --- Addresses 8 and 7 --- + // name, C0, C1, C2, C3, A, B, G) + TTL_74153(H4_A, 1G, 2G, 1D3, 256V, H3_D.Q, SCORE_DISP_Q, GROUND) + TTL_74153(H4_B, 1F, 2F, 1D2, 128V, H3_D.Q, SCORE_DISP_Q, GROUND) + TTL_7402_NOR(H3_D, Ld1B, H3_C.Q) + TTL_7402_NOR(H3_C, 512H, SCORE_DISP_Q) + + // --- Addresses 6 and 5 --- + // name, C0, C1, C2, C3, A, B, G) + TTL_74153(J4_A, 64V, 1D1, 64V, E, ABCD, ABG, GROUND) + TTL_74153(J4_B, 1STOP_Q, 1D0, 32V, D, ABCD, ABG, GROUND) + TTL_7486_XOR(D2_A, VSYNC, J4_B.AY) + + // --- Addresses 3 and 2 --- + // name, C0, C1, C2, C3, A, B, G) + TTL_74153(K4_A, 1R2, 1D4, 512H, 8V, ABCD, ABG, H3_B.Q) + TTL_74153(K4_B, 1R1, 1PHI4, 256H, 4V, ABCD, ABG, H3_B.Q) + + // --- Address 4 --- + TTL_7404_INVERT(E1_C, 32H) + TTL_7400_NAND(F5_B, E1_C.Q, Ld1B) + TTL_7402_NOR(H3_B, J4_B.AY, VSYNC_Q) + TTL_7404_INVERT(L6_E, H3_B.Q) + TTL_7410_NAND(H5_B, VSYNC, L6_E.Q, 1R3) + TTL_7400_NAND(F5_A, 16V, ABG) + TTL_7410_NAND(H5_C, F5_B.Q, H5_B.Q, F5_A.Q) + + // --- Addresses 0 and 1 --- + // name, C0, C1, C2, C3, A, B, G) + TTL_74153(L4_A, 1R0, 1PHI3, 128V, C, ABCD, ABG, H3_B.Q) // "128A" ? + TTL_74153(L4_B, 1D0, 1PHI2, 64H, B, ABCD, ABG, H3_B.Q) + TTL_7402_NOR(H3_A, VLd1, Ld1B) + ALIAS(ABG, H3_A.Q) + + // ROM AR (address read) Signal: + TTL_7400_NAND(F5_D, HSYNC_Q, VLd1) + TTL_7400_NAND(F5_C, F5_D.Q, 16H_Q) + + + ALIAS(1A, GROUND) //FIXME! + ALIAS(1B, GROUND) //FIXME! + ALIAS(1C, GROUND) //FIXME! + ALIAS(1D, GROUND) //FIXME! + ALIAS(1E, GROUND) //FIXME! + ALIAS(1F, GROUND) //FIXME! + ALIAS(1G, GROUND) //FIXME! + + ALIAS(2B, GROUND) //FIXME! + ALIAS(2C, GROUND) //FIXME! + ALIAS(2D, GROUND) //FIXME! + ALIAS(2E, GROUND) //FIXME! + ALIAS(2F, GROUND) //FIXME! + ALIAS(2G, GROUND) //FIXME! + + ALIAS(B, GROUND) //FIXME! + ALIAS(C, GROUND) //FIXME! + ALIAS(D, GROUND) //FIXME! + ALIAS(E, GROUND) //FIXME! + + // Actual ROM chip is labeled 74186: + // name, AR, OE1, OE2, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 + ROM_TMS4800(J5, F5_C.Q, P, P, L4_B.AY, L4_A.AY, K4_B.AY, K4_A.AY, H5_B.Q, D2_A.Q, J4_A.AY, H4_B.AY, H4_A.AY, L5_C.Q, ABCD) + PARAM(J5.ROM, "gamedata") + TTL_7404_INVERT(L6_D, J5.D7) ALIAS(DATA7, L6_D.Q) + TTL_7404_INVERT(J6_C, J5.D6) ALIAS(DATA6, J6_C.Q) + TTL_7404_INVERT(J6_B, J5.D5) ALIAS(DATA5, J6_B.Q) + TTL_7404_INVERT(J6_A, J5.D4) ALIAS(DATA4, J6_A.Q) + TTL_7404_INVERT(L6_F, J5.D3) ALIAS(DATA3, L6_F.Q) + TTL_7404_INVERT(J6_F, J5.D2) ALIAS(DATA2, J6_F.Q) + TTL_7404_INVERT(J6_E, J5.D1) ALIAS(DATA1, J6_E.Q) // Note: J6_E pin numbers on schematics seem wrong (11 and 12) + TTL_7404_INVERT(J6_D, J5.D0) ALIAS(DATA0, J6_D.Q) + + #if 1 //I'm uncertain if we actually need these: + RES( R7, RES_K(6.8)) NET_C( R7.1, GROUND) NET_C( R7.2, J5.D7) + RES( R9, RES_K(6.8)) NET_C( R9.1, GROUND) NET_C( R9.2, J5.D6) + RES(R11, RES_K(6.8)) NET_C(R11.1, GROUND) NET_C(R11.2, J5.D5) + RES(R13, RES_K(6.8)) NET_C(R13.1, GROUND) NET_C(R13.2, J5.D4) + RES(R14, RES_K(6.8)) NET_C(R14.1, GROUND) NET_C(R14.2, J5.D3) + RES(R12, RES_K(6.8)) NET_C(R12.1, GROUND) NET_C(R12.2, J5.D2) + RES(R10, RES_K(6.8)) NET_C(R10.1, GROUND) NET_C(R10.2, J5.D1) + RES( R8, RES_K(6.8)) NET_C( R8.1, GROUND) NET_C( R8.2, J5.D0) + #endif + + // ----------- Vertical positioning of the car ----------------- + // name, EQ, MRQ, S0Q, S1Q, S2Q, S3Q, D0, D1, D2, D3 + TTL_9314(H7, VLd1_Q, P, GROUND, GROUND, GROUND, GROUND, DATA4, DATA5, DATA6, DATA7) + // name, CLK, ENP, ENT, CLRQ, LOADQ, A, B, C, D + TTL_9316(J7, HCOUNT, P, P, RESET1_Q, L5_A.Q, H7.Q0, H7.Q1, H7.Q2, H7.Q3) + TTL_9316(K7, HCOUNT, J7.RC, P, RESET1_Q, L5_A.Q, P, P, P, P) + TTL_9316(L7, HCOUNT, J7.RC, K7.RC, RESET1_Q, L5_A.Q, P, GROUND, P, P) + TTL_7400_NAND(L5_A, J7.RC, L7.RC) + ALIAS(1PHI2, J7.QB) + ALIAS(1PHI3, J7.QC) + ALIAS(1PHI4, J7.QD) + + // ------------ Horizontal positioning of the car ---------------------- + // name, CLK, ENP, ENT, CLRQ, LOADQ, A, B, C, D + TTL_9316(E7, CLOCK, P, P, RESET1_Q, D5_B.Q, F7_A.Q, F7_D.Q, F7_C.Q, D3_C.Q) + TTL_9316(D7, CLOCK, E7.RC, P, RESET1_Q, D5_B.Q, P, P, P, GROUND) + TTL_7400_NAND(D5_B, E7.RC, B6_D.Q) + TTL_7404_INVERT(B6_D, H5_A.Q) + TTL_7410_NAND(H5_A, D7.RC, D6_A.Q, D6_B.Q) //weird: should be D6_B.QQ according to schematics + // name, CLK, J, K, CLRQ + TTL_74107(D6_A, D7.RC, P, P, RESET1_Q) + TTL_74107(D6_B, D6_A.Q, P, P, RESET1_Q) + + TTL_7400_NAND(D3_C, VLd1, DATA3) + TTL_7408_AND(F7_C, VLd1, DATA2) + TTL_7408_AND(F7_D, VLd1, DATA1) + TTL_7408_AND(F7_A, VLd1, DATA0) + + + // Car window: + // this flip-flop is incorrectly labeled "79" in the schematics + // name, CLK, D, CLRQ, PREQ + TTL_7474(A5_B, CLOCK, H5_A.Q, P, L7.RC) + ALIAS(CAR_WINDOW, A5_B.Q) + ALIAS(CAR_WINDOW_Q, A5_B.QQ) + + // ------------- Car1Video shift registers: ----------- + // name, CLK, CLK_INHIBIT_Q, SH_LDQ, SER, A, B, C, D, E, F, G, H + TTL_74165(H6, CLOCK, CAR_WINDOW, HSYNC_Q, P, DATA0, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7) + TTL_74165(F6, CLOCK, CAR_WINDOW, Ld1B, H6.QH, DATA0, DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7) + TTL_7408_AND(F7_B, F6.QHQ, CAR_WINDOW_Q) +#ifdef CAR_WINDOW_HACK + ALIAS(CAR1VIDEO, CAR_WINDOW_Q) +#else + ALIAS(CAR1VIDEO, F7_B.Q) +#endif + TTL_7404_INVERT(L6_A, CAR1VIDEO) + ALIAS(CAR1VIDEO_Q, L6_A.Q) + + + // --------------- Hack ---------------------- + // This is a signal only used for debugging. + // It generates a pattern of squares on the screen. + // CAR1VIDEO = not(16H & 16V | VBLANK | HBLANK) + +#ifdef SIGNAL_RT_HACK +#ifdef SIGNAL_RT_HACK_XOR + TTL_7486_XOR(16H_xor_16V, 16H, 16V) + TTL_7402_NOR(nor, 16H_xor_16V, BLANK) +#else + TTL_7408_AND(16H_and_16V, 16H, 16V) + TTL_7402_NOR(nor, 16H_and_16V, BLANK) +#endif + TTL_7432_OR(BLANK, HBLANK, VRESET) + ALIAS(RT, nor.Q) +#else + ALIAS(RT, GROUND) //FIXME! +#endif + + ALIAS(FINISH_LINE, GROUND) //FIXME! + ALIAS(SLICK_Q, P) //FIXME! + + // ------------- Video Mixer ----------------- + RES(R63, RES_K(1)) + RES(R73, RES_R(330)) + RES(R64, RES_R(330)) + RES(R74, RES_R(330)) + RES(R66, RES_R(330)) + RES(R65, RES_K(4.7)) + + NET_C(V5, R63.1) + NET_C(COMP_SYNC, R73.1) + NET_C(CAR1VIDEO, R64.1) + NET_C(FINISH_LINE, R74.1) + NET_C(RT, R66.1) + NET_C(SLICK_Q, R65.1) + + CAP(C44, CAP_U(10)) + NET_C(C44.1, R63.2) + NET_C(C44.1, R73.2) + NET_C(C44.1, R64.2) + NET_C(C44.1, R74.2) + NET_C(C44.1, R66.2) + NET_C(C44.1, R65.2) + ALIAS(VIDEO_OUT, C44.2) + +NETLIST_END() diff --git a/src/mame/machine/nl_gtrak10.h b/src/mame/machine/nl_gtrak10.h new file mode 100644 index 00000000000..60b171e012b --- /dev/null +++ b/src/mame/machine/nl_gtrak10.h @@ -0,0 +1,6 @@ +// license:BSD-3-Clause +// copyright-holders:Felipe Sanches + +#include "netlist/nl_setup.h" + +NETLIST_EXTERNAL(gtrak10)