diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/netlist/build/makefile | 1 | ||||
-rw-r--r-- | src/lib/netlist/devices/net_lib.cpp | 2 | ||||
-rw-r--r-- | src/lib/netlist/devices/net_lib.h | 1 | ||||
-rw-r--r-- | src/lib/netlist/devices/nld_7474.cpp | 4 | ||||
-rw-r--r-- | src/lib/netlist/devices/nld_7497.cpp | 186 | ||||
-rw-r--r-- | src/lib/netlist/devices/nld_7497.h | 57 | ||||
-rw-r--r-- | src/lib/netlist/macro/nlm_base.cpp | 3 | ||||
-rw-r--r-- | src/mame/drivers/testpat.cpp | 143 | ||||
-rw-r--r-- | src/mame/machine/nl_tp1983.cpp | 119 | ||||
-rw-r--r-- | src/mame/machine/nl_tp1983.h | 4 | ||||
-rw-r--r-- | src/mame/machine/nl_tp1985.cpp | 245 | ||||
-rw-r--r-- | src/mame/machine/nl_tp1985.h | 4 | ||||
-rw-r--r-- | src/mame/mame.lst | 4 |
13 files changed, 771 insertions, 2 deletions
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile index 807ddbd6c7a..8c7a4bc59b5 100644 --- a/src/lib/netlist/build/makefile +++ b/src/lib/netlist/build/makefile @@ -92,6 +92,7 @@ NLOBJS := \ $(NLOBJ)/devices/nld_7485.o \ $(NLOBJ)/devices/nld_7490.o \ $(NLOBJ)/devices/nld_7493.o \ + $(NLOBJ)/devices/nld_7497.o \ $(NLOBJ)/devices/nld_74107.o \ $(NLOBJ)/devices/nld_74123.o \ $(NLOBJ)/devices/nld_74153.o \ diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index e0f0277daac..363d6ef6172 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -74,6 +74,7 @@ namespace netlist ENTRYX(7485, TTL_7485, "+A0,+A1,+A2,+A3,+B0,+B1,+B2,+B3,+LTIN,+EQIN,+GTIN") ENTRYX(7490, TTL_7490, "+A,+B,+R1,+R2,+R91,+R92") ENTRYX(7493, TTL_7493, "+CLKA,+CLKB,+R1,+R2") + ENTRYX(7497, TTL_7497, "+CLK,+STRB,+EN,+UNITY,+CLR,+B0,+B1,+B2,+B3,+B4,+B5") ENTRYX(74107, TTL_74107, "+CLK,+J,+K,+CLRQ") ENTRYX(74107A, TTL_74107A, "+CLK,+J,+K,+CLRQ") ENTRYX(74123, TTL_74123, "") @@ -126,6 +127,7 @@ namespace netlist ENTRYX(7485_dip, TTL_7485_DIP, "") ENTRYX(7490_dip, TTL_7490_DIP, "") ENTRYX(7493_dip, TTL_7493_DIP, "") +// ENTRYX(7497_dip, TTL_7497_DIP, "") ENTRYX(74107_dip, TTL_74107_DIP, "") ENTRYX(74123_dip, TTL_74123_DIP, "") ENTRYX(74153_dip, TTL_74153_DIP, "") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 4dead624fc2..4809f330c6b 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -47,6 +47,7 @@ #include "nld_7485.h" #include "nld_7490.h" #include "nld_7493.h" +#include "nld_7497.h" #include "nld_74107.h" #include "nld_74123.h" #include "nld_74153.h" diff --git a/src/lib/netlist/devices/nld_7474.cpp b/src/lib/netlist/devices/nld_7474.cpp index 9d020663f46..4328856a3e0 100644 --- a/src/lib/netlist/devices/nld_7474.cpp +++ b/src/lib/netlist/devices/nld_7474.cpp @@ -117,13 +117,13 @@ namespace netlist sub.m_nextD = m_D(); sub.m_CLK.activate_lh(); } - else if (!m_PREQ()) + else if (!m_PREQ() && m_CLRQ()) { sub.newstate(1, 0); sub.m_CLK.inactivate(); m_D.inactivate(); } - else if (!m_CLRQ()) + else if (!m_CLRQ() && m_PREQ()) { sub.newstate(0, 1); sub.m_CLK.inactivate(); diff --git a/src/lib/netlist/devices/nld_7497.cpp b/src/lib/netlist/devices/nld_7497.cpp new file mode 100644 index 00000000000..174f7002a0d --- /dev/null +++ b/src/lib/netlist/devices/nld_7497.cpp @@ -0,0 +1,186 @@ +// license:GPL-2.0+ +// copyright-holders:Sergey Svishchev +/* + * nld_7497.cpp + * + * To do: + * + * - STRB and EN + * - Timing + */ + +#include "nld_7497.h" +#include "../nl_base.h" + +namespace netlist +{ + namespace devices + { + + static constexpr netlist_time out_delay_CLK_Y[2] = { NLTIME_FROM_NS(20), NLTIME_FROM_NS(26) }; // tPHL, tPLH + static constexpr netlist_time out_delay_CLK_Z[2] = { NLTIME_FROM_NS(17), NLTIME_FROM_NS(12) }; + + NETLIB_OBJECT(7497) + { + NETLIB_CONSTRUCTOR(7497) + , m_B(*this, {{"B0", "B1", "B2", "B3", "B4", "B5"}}) + , m_CLK(*this, "CLK", NETLIB_DELEGATE(7497, clk)) + , m_STRB(*this, "STRB") + , m_EN(*this, "EN") + , m_UNITY(*this, "UNITY", NETLIB_DELEGATE(7497, unity)) + , m_CLR(*this, "CLR", NETLIB_DELEGATE(7497, clr)) + , m_Y(*this, "Y") + , m_Z(*this, "Z") + , m_ENOUT(*this, "ENOUT") + , m_reset(*this, "_m_reset", 0) + , m_a(*this, "_m_a", 0) + , m_rate(*this, "_m_rate", 0) + , m_state(*this, "_m_state", 0) + { + } + + private: + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + NETLIB_HANDLERI(noop) { } + NETLIB_HANDLERI(unity); + NETLIB_HANDLERI(clr); + NETLIB_HANDLERI(clk); + + object_array_t<logic_input_t, 6> m_B; + logic_input_t m_CLK; + logic_input_t m_STRB; + logic_input_t m_EN; + logic_input_t m_UNITY; + logic_input_t m_CLR; + + logic_output_t m_Y; + logic_output_t m_Z; + logic_output_t m_ENOUT; + + state_var_sig m_reset; + state_var_sig m_a; + state_var_sig m_rate; + state_var_sig m_state; + + void newstate(const netlist_sig_t state) + { + m_state = state; + m_Z.push(state ^ 1, out_delay_CLK_Z[state ^ 1]); + if (m_UNITY()) + m_Y.push(state, out_delay_CLK_Y[state]); + else + m_Y.push(1, out_delay_CLK_Y[1]); + + if (m_CLK()) + m_CLK.set_state(logic_t::STATE_INP_HL); + else + m_CLK.set_state(logic_t::STATE_INP_LH); + } + + int rate() + { + int a = 0; + + for (std::size_t i = 0; i < 6; i++) + a |= (m_B[i]() << i); + + return a; + } + }; + + NETLIB_RESET(7497) + { + m_reset = 1; + m_a = 0; + m_rate = 0; + m_CLK.set_state(logic_t::STATE_INP_HL); + m_B[0].set_state(logic_t::STATE_INP_LH); + m_B[1].set_state(logic_t::STATE_INP_LH); + m_B[2].set_state(logic_t::STATE_INP_LH); + m_B[3].set_state(logic_t::STATE_INP_LH); + m_B[4].set_state(logic_t::STATE_INP_LH); + m_B[5].set_state(logic_t::STATE_INP_LH); + m_STRB.set_state(logic_t::STATE_INP_HL); +#if 0 + m_EN.set_state(logic_t::STATE_INP_HL); +#endif + m_UNITY.set_state(logic_t::STATE_INP_LH); + m_CLR.set_state(logic_t::STATE_INP_LH); + newstate(0); + m_ENOUT.push(1, out_delay_CLK_Y[1]); + } + + NETLIB_UPDATE(7497) + { +// m_reset = m_CLR() ^ 1; + + // m_reset = 1 -- normal operation + if (!m_reset) + { + m_CLK.inactivate(); + m_Y.push_force(0, NLTIME_FROM_NS(24)); + m_Z.push_force(1, NLTIME_FROM_NS(15)); + m_ENOUT.push_force(1, NLTIME_FROM_NS(15)); // XXX + } + } + + NETLIB_HANDLER(7497, unity) + { + newstate (m_state); + } + + NETLIB_HANDLER(7497, clr) + { + m_a = 0; + newstate (0); + } + + NETLIB_HANDLER(7497, clk) + { + netlist_sig_t clk = m_CLK(); + + if (m_reset) + { + // lock rate on falling edge of CLK + if (!clk) m_rate = rate(); + + if (m_rate && !m_STRB()) + { + if ( + ((m_a & 1) == 0 && (m_rate & 32)) || + ((m_a & 3) == 1 && (m_rate & 16)) || + ((m_a & 7) == 3 && (m_rate & 8)) || + ((m_a & 15) == 7 && (m_rate & 4)) || + ((m_a & 31) == 15 && (m_rate & 2)) || + ((m_a & 63) == 31 && (m_rate & 1))) + newstate(clk); + } + else + { + newstate(0); + } + + if (m_a == 62) + m_ENOUT.push(0, out_delay_CLK_Y[0]); // XXX timing + else + m_ENOUT.push(1, out_delay_CLK_Y[1]); + + if (clk) + { + m_CLK.set_state(logic_t::STATE_INP_HL); + m_a++; + m_a &= 63; + } + else + { + m_CLK.set_state(logic_t::STATE_INP_LH); + } + } + } + + NETLIB_DEVICE_IMPL(7497) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_7497.h b/src/lib/netlist/devices/nld_7497.h new file mode 100644 index 00000000000..b78bdedc3dc --- /dev/null +++ b/src/lib/netlist/devices/nld_7497.h @@ -0,0 +1,57 @@ +// license:GPL-2.0+ +// copyright-holders:Sergey Svishchev +/* + * nld_7497.h + * + * SN7497: Synchronous 6-Bit Binary Rate Multiplier + * + * +--------------+ + * B1 |1 16| VCC + * B4 |2 15| B3 + * B5 |3 14| B2 + * B0 |4 7497 13| CLR + * Z |5 12| UNITY/CAS + * Y |6 11| ENin (EN) + * ENout |7 10| STRB + * GND |8 9| CLK + * +--------------+ + * + * Naming conventions follow TI datasheet + * + * The counter is enabled when the clear, strobe, and enable inputs are low. + * + * When the rate input is binary 0 (all rate inputs low), Z remains high [and Y low]. + * + * The unity/cascade input, when connected to the clock input, passes + * clock frequency (inverted) to the Y output when the rate input/decoding + * gates are inhibited by the strobe. + * + * When CLR is H, states of CLK and STRB can affect Y and Z. Default are + * Y L, Z H, ENout H. + * + * Unity/cascade is used to inhibit output Y (UNITY L -> Y H) + */ + +#ifndef NLD_7497_H_ +#define NLD_7497_H_ + +#include "../nl_setup.h" + +#define TTL_7497(name, cCLK, cSTRB, cEN, cUNITY, cCLR, cB0, cB1, cB2, cB3, cB4, cB5) \ + NET_REGISTER_DEV(TTL_7497, name) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, STRB, cSTRB) \ + NET_CONNECT(name, EN, cEN) \ + NET_CONNECT(name, UNITY, cUNITY) \ + NET_CONNECT(name, CLR, cCLR) \ + NET_CONNECT(name, B0, cB0) \ + NET_CONNECT(name, B1, cB1) \ + NET_CONNECT(name, B2, cB2) \ + NET_CONNECT(name, B3, cB3) \ + NET_CONNECT(name, B4, cB4) \ + NET_CONNECT(name, B5, cB5) + +#define TTL_7497_DIP(name) \ + NET_REGISTER_DEV(TTL_7497_DIP, name) + +#endif /* NLD_7497_H_ */ diff --git a/src/lib/netlist/macro/nlm_base.cpp b/src/lib/netlist/macro/nlm_base.cpp index 8ea6f148864..47a314f45ec 100644 --- a/src/lib/netlist/macro/nlm_base.cpp +++ b/src/lib/netlist/macro/nlm_base.cpp @@ -15,6 +15,9 @@ static NETLIST_START(diode_models) NET_MODEL("1N4001 D(Is=14.11n N=1.984 Rs=33.89m Ikf=94.81 Xti=3 Eg=1.11 Cjo=25.89p M=.44 Vj=.3245 Fc=.5 Bv=75 Ibv=10u Tt=5.7u Iave=1 Vpk=50 mfg=GI type=silicon)") NET_MODEL("1N4148 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)") NET_MODEL("1S1588 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75)") + + NET_MODEL("1N34A D( Bv=75 Cjo=0.5e-12 Eg=0.67 Ibv=18e-3 Is=2e-7 Rs=7 N=1.3 Vj=0.1 M=0.27 type=germanium)") + NET_MODEL("LedRed D(IS=93.2p RS=42M N=3.73 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)") NET_MODEL("LedGreen D(IS=93.2p RS=42M N=4.61 BV=4 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=4 type=LED)") NET_MODEL("LedBlue D(IS=93.2p RS=42M N=7.47 BV=5 IBV=10U CJO=2.97P VJ=.75 M=.333 TT=4.32U Iave=40m Vpk=5 type=LED)") diff --git a/src/mame/drivers/testpat.cpp b/src/mame/drivers/testpat.cpp new file mode 100644 index 00000000000..421c12ee58c --- /dev/null +++ b/src/mame/drivers/testpat.cpp @@ -0,0 +1,143 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev +/*************************************************************************** + +TV test pattern generators + +Radio, 1983, N5 + http://radioway.ru/1983/05/generator_telesignalov.html + http://radioway.ru/1984/04/generator_telesignalov.html + +Radio, 1985, N6 + http://radioway.ru/1985/06/generator_ispytatelnyh_signalov.html + +***************************************************************************/ + +#include "emu.h" + +#include "machine/netlist.h" + +#include "video/fixfreq.h" + +#include "netlist/devices/net_lib.h" + +#include "machine/nl_tp1983.h" +#include "machine/nl_tp1985.h" + +#include "screen.h" + +#include <cmath> + + +#define MASTER_CLOCK (4000000) +#define V_TOTAL_PONG 315 +#define H_TOTAL_PONG 256 // tbc + +class tp1983_state : public driver_device +{ +public: + tp1983_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_video(*this, "fixfreq") + { + } + + // devices + required_device<netlist_mame_device> m_maincpu; + required_device<fixedfreq_device> m_video; + + void tp1983(machine_config &config); + +protected: + // driver_device overrides + virtual void machine_start() override { }; + virtual void machine_reset() override { }; + + virtual void video_start() override { }; + +private: +}; + + +class tp1985_state : public driver_device +{ +public: + tp1985_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_video(*this, "fixfreq") + { + } + + // devices + required_device<netlist_mame_device> m_maincpu; + required_device<fixedfreq_device> m_video; + + void tp1985(machine_config &config); + +protected: + // driver_device overrides + virtual void machine_start() override { }; + virtual void machine_reset() override { }; + + virtual void video_start() override { }; + +private: + NETDEV_ANALOG_CALLBACK_MEMBER(video_out_cb); +}; + +NETDEV_ANALOG_CALLBACK_MEMBER(tp1985_state::video_out_cb) +{ + m_video->update_composite_monochrome(4.0 - data, time); +} + + +static INPUT_PORTS_START(tp1983) +INPUT_PORTS_END + +static INPUT_PORTS_START(tp1985) +INPUT_PORTS_END + + +MACHINE_CONFIG_START(tp1983_state::tp1983) + MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) + MCFG_NETLIST_SETUP(tp1983) + + MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "videomix", fixedfreq_device, update_composite_monochrome, "fixfreq") + + MCFG_FIXFREQ_ADD("fixfreq", "screen") + MCFG_FIXFREQ_MONITOR_CLOCK(MASTER_CLOCK) + MCFG_FIXFREQ_HORZ_PARAMS(H_TOTAL_PONG-64,H_TOTAL_PONG-40,H_TOTAL_PONG-8,H_TOTAL_PONG) + MCFG_FIXFREQ_VERT_PARAMS(V_TOTAL_PONG-19,V_TOTAL_PONG-16,V_TOTAL_PONG-12,V_TOTAL_PONG) + MCFG_FIXFREQ_FIELDCOUNT(1) + MCFG_FIXFREQ_SYNC_THRESHOLD(1) + MCFG_FIXFREQ_GAIN(0.36) +MACHINE_CONFIG_END + +MACHINE_CONFIG_START(tp1985_state::tp1985) + MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK) + MCFG_NETLIST_SETUP(tp1985) + + MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "videomix", tp1985_state, video_out_cb, "") + + MCFG_FIXFREQ_ADD("fixfreq", "screen") + MCFG_FIXFREQ_MONITOR_CLOCK(MASTER_CLOCK) + MCFG_FIXFREQ_HORZ_PARAMS(H_TOTAL_PONG-64,H_TOTAL_PONG-40,H_TOTAL_PONG-8,H_TOTAL_PONG) + MCFG_FIXFREQ_VERT_PARAMS(V_TOTAL_PONG-19,V_TOTAL_PONG-16,V_TOTAL_PONG-12,V_TOTAL_PONG) + MCFG_FIXFREQ_FIELDCOUNT(1) + MCFG_FIXFREQ_SYNC_THRESHOLD(1) + MCFG_FIXFREQ_GAIN(0.36) +MACHINE_CONFIG_END + + +ROM_START( tp1983 ) /* dummy to satisfy game entry*/ + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) +ROM_END + +ROM_START( tp1985 ) /* dummy to satisfy game entry*/ + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 ) +ROM_END + +GAME( 1983, tp1983, 0, tp1983, tp1983, tp1983_state, empty_init, ROT0, "Radio", "TV Test Pattern Generator 1983", MACHINE_NO_SOUND_HW) +GAME( 1985, tp1985, 0, tp1985, tp1985, tp1985_state, empty_init, ROT0, "Radio", "TV Test Pattern Generator 1985", MACHINE_NO_SOUND_HW) diff --git a/src/mame/machine/nl_tp1983.cpp b/src/mame/machine/nl_tp1983.cpp new file mode 100644 index 00000000000..bc06b231425 --- /dev/null +++ b/src/mame/machine/nl_tp1983.cpp @@ -0,0 +1,119 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev + +/*************************************************************************** + + Netlist (tp1983) included from testpat.cpp + +***************************************************************************/ + +#ifndef __PLIB_PREPROCESSOR__ + #define NL_PROHIBIT_BASEH_INCLUDE 1 + #include "netlist/devices/net_lib.h" +#endif + +// gray scale +#define SB3 0 +// vertical stripes +#define SB4 1 +// vertical lines +#define SB5 0 +// horizontal stripes +#define SB6 0 +// horizontal lines +#define SB7 0 +// "M" +#define SB8 1 +// inverse +//efine SB9 0 + +NETLIST_START(tp1983) + + SOLVER(Solver, 48000) +// PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers + PARAM(Solver.ACCURACY, 1e-5) // ??? +// PARAM(Solver.LTE, 1e-4) // Default is not enough for paddle control if using LTE + PARAM(NETLIST.USE_DEACTIVATE, 1) + + ANALOG_INPUT(V5, 5) + + TTL_INPUT(high, 1) + TTL_INPUT(low, 0) + + // skipping D7.1 D7.2 D8.2 clock generator circuit + MAINCLOCK(clk, 250000.0) + +// vsync generator + +#define _C6 0 + + CAP(C6, CAP_P(11)) + RES(R19, RES_K(30)) + +#if _C6 + NET_C(V5, C6.1) +#else + NET_C(DD6_2.Q, C6.1) +#endif + NET_C(C6.2, R19.1) + NET_C(R19.2, GND) + + // CLK, STROBE, ENABLE, UNITY, CLR, Bx [9, 10, 11, 12, 13, ...] + TTL_7497(DD4, clk, low, low, low, DD5.Y, high, vsync, low, vsync, vsync, low) +#if 1 + TTL_7497(DD5, DD4.Z, DD6_2.QQ, low, DD5.ENOUT, DD5.Y, high, DD6_1.QQ, low, low, low, low) +#else + TTL_7497(DD5, DD4.Z, low, low, DD5.ENOUT, DD5.Y, high, DD6_1.QQ, low, low, low, low) +#endif + + // CLK, D, CLRQ, PREQ [3, 2, 1, 4] +#if 1 + TTL_7474(DD6_1, DD5.Y, DD6_2.Q, C6.2, high) + TTL_7474(DD6_2, DD5.Y, DD6_1.QQ, C6.2, high) +#else + TTL_7474(DD6_1, DD5.Y, DD6_2.Q, low, high) + TTL_7474(DD6_2, DD5.Y, DD6_1.QQ, low, high) +#endif + + ALIAS(vsync, DD6_1.Q) + +// hsync generator + +#if 0 + CAP(C1, CAP_P(330)) + CAP(C2, CAP_P(3300)) // XXX tunable 3300 + RES(R2, RES_K(30)) + RES(R3, 1200) + + // A, B, C, D, CLEAR, LOADQ, CU, CD [15, 1, 10, 9, 14, 11, 5, 4] + TTL_74193(DD1, low, low, low, low, low, high, clk, high) + NET_C(DD1.CARRYQ, C1.1) + NET_C(R2.2, GND) + + TTL_7400_NAND(DD2_1, hsync, C1.2) + NET_C(C1.2, R2.1) + NET_C(DD2_1.Q, C2.1) + NET_C(vsync, R3.1) + NET_C(R3.2, C2.2) + + TTL_7400_NAND(DD2_2, C2.2, C2.2) + TTL_7400_NAND(DD2_3, hsync, hsync) + + ALIAS(hsync, DD2_2.Q) + +// video mixer + + RES(R10, 820) + NET_C(hsync, R10.1) + + ALIAS(videomix, R10.2) +#else + ALIAS(videomix, vsync) +#endif + +#if 1 + HINT(clk, NO_DEACTIVATE) +#endif + +NETLIST_END() + diff --git a/src/mame/machine/nl_tp1983.h b/src/mame/machine/nl_tp1983.h new file mode 100644 index 00000000000..e7ef3dcac1e --- /dev/null +++ b/src/mame/machine/nl_tp1983.h @@ -0,0 +1,4 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev + +NETLIST_EXTERNAL(tp1983) diff --git a/src/mame/machine/nl_tp1985.cpp b/src/mame/machine/nl_tp1985.cpp new file mode 100644 index 00000000000..0471c0878fd --- /dev/null +++ b/src/mame/machine/nl_tp1985.cpp @@ -0,0 +1,245 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev + +/*************************************************************************** + + Netlist (tp1985) included from testpat.cpp + +***************************************************************************/ + +#ifndef __PLIB_PREPROCESSOR__ + #define NL_PROHIBIT_BASEH_INCLUDE 1 + #include "netlist/devices/net_lib.h" +#endif + +// gray scale +#define SB3 0 +// vertical stripes +#define SB4 1 +// vertical lines +#define SB5 0 +// horizontal stripes +#define SB6 0 +// horizontal lines +#define SB7 0 +// "M" +#define SB8 1 +// inverse +//efine SB9 0 + +// +#define _R19 0 +// +#define _VD4 0 +// +#define _DD4 1 + +NETLIST_START(tp1985) + + SOLVER(Solver, 48000) +// PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers + PARAM(Solver.ACCURACY, 1e-5) // ??? +// PARAM(Solver.LTE, 1e-4) // Default is not enough for paddle control if using LTE + PARAM(NETLIST.USE_DEACTIVATE, 1) + + ANALOG_INPUT(V5, 5) + + TTL_INPUT(high, 1) + TTL_INPUT(low, 0) + + MAINCLOCK(clk, 4000000.0) + +// raster generator: DD1-DD4, DD5.3, DD5.4, DD6-DD7 + + RES(R1, 1000) + NET_C(R1.1, V5) + + // A, B, C, D, CLEAR, LOADQ, CU, CD [15, 1, 10, 9, 14, 11, 5, 4] + TTL_74193(DD1, low, low, low, low, GND, R1.2, DD2.CARRYQ, R1.2) + TTL_74193(DD2, low, low, low, low, GND, R1.2, clk, R1.2) + + ALIAS(F250K, DD2.CARRYQ) + ALIAS(F15625, DD1.CARRYQ) + + RES(R2, 2000) + RES(R3, 1000) + RES(R4, 510) + RES(R5, 240) + RES(R6, 510) + RES(R7, 510) + RES(R8, 240) + DIODE(VD1, "1N34A") // XXX actually D9B + DIODE(VD2, "1N34A") // XXX actually D9B +#if SB3 + DIODE(VD6, "1N34A") // XXX actually D9B +#endif + + NET_C(DD1.QA, R2.1, R6.1) + NET_C(DD1.QB, R3.1, VD1.A) + NET_C(DD1.QC, R4.1) + NET_C(DD1.QD, R5.1) + + NET_C(DD2.QC, R7.1) + NET_C(DD2.QD, R8.1) + NET_C(R6.2, DD3_2.D) + + // and to SB1.1, SB4.2, SB3... +#if SB3 +#if SB4 + NET_C(R2.2, R3.2, R4.2, R5.2) + NET_C(GND, VD6.A) +#else + NET_C(R2.2, R3.2, R4.2, R5.2, VD6.A) +#endif +#else + NET_C(R2.2, R3.2, R4.2, R5.2) +#endif + + // and to SB6.2 + NET_C(R7.2, R8.2, VD2.A) + + // CLK, D, CLRQ, PREQ [3, 2, 1, 4] + TTL_7474(DD3_1, DD1.QA, DD1.QB, DD1.CARRYQ, DD3_1.QQ) +// TTL_7474(DD3_2, VD1.K, DD2.QD, high, DD3_1.QQ) // per book, produces one pulse, shifted too far. +#if _DD4 + TTL_7474(DD3_2, DD2.QD, VD1.K, DD4.Y, DD3_1.QQ) // per journal, produces two pulse, shifted correctly. +#else + TTL_7474(DD3_2, DD2.QD, VD1.K, high, DD3_1.QQ) // per journal, produces two pulse, shifted correctly. +#endif + /* + * verified: + * + * DD3.1 = hblank generator, 12 us @ 75% + * DD3.2 = hsync generator, 4 us @ 100%, shifted 2 us after hblank + * hsync period = 64us (15625 Hz) + */ + +#if _DD4 + RES(R12, 2000) + RES(R13, 2000) + CAP(C2, CAP_P(1000)) + + NET_C(V5, R13.1) + NET_C(GND, R12.1) + NET_C(C2.2, R13.2) + NET_C(R13.2, R12.2) + NET_C(DD6.QD, C2.1) + + // CLK, STROBE, ENABLE, UNITY, CLR, Bx + // + // STRB, ENin are tied to GND + TTL_7497(DD4, DD3_1.QQ, low, low, DD5_3.Q, DD5_4.Q, low, DD4.Y, low, DD5_3.Q, low, low) +// TTL_7497(DD4, DD3_1.QQ, low, low, low, DD5_4.Q, low, DD4.Y, low, DD5_3.Q, low, low) +// TTL_7497(DD4, DD3_1.QQ, low, low, low, DD5_4.Q, low, DD4.Y, low, low, low, low) + TTL_7400_NAND(DD5_3, R13.2, DD4.Y) +// TTL_7400_NAND(DD5_3, high, DD4.Y) + TTL_7400_NAND(DD5_4, DD4.ENOUT, DD4.ENOUT) + TTL_7493(DD6, DD4.Z, DD4.ENOUT, DD6.QD, DD6.QB) // CLK1, CLK2, R1, R2 [14, 1, 2, 3] +#else + TTL_7497(DD4, DD3_1.QQ, low, low, low, low, low, high, low, low, low, low) +// TTL_7493(DDx, DD3_1.QQ, DD3_1.QQ, low, low) + TTL_7493(DDx, DD3_1.QQ, DD3_1.QQ, DDx.QD, DDx.QB) +#endif + +// pattern selector + + RES(R10, 1000) + RES(R11, 240) + RES(R14, 510) + RES(R15, 1000) + RES(R16, 510) + DIODE(VD3, "1N34A") // XXX actually D9B +#if _VD4 + DIODE(VD4, "1N34A") // XXX actually D9B +#endif + DIODE(VD5, "1N34A") // XXX actually D9B + +#if SB4 + ALIAS(hpatsource, DD1.QA) +#endif +#if SB5 + ALIAS(hpatsource, DD2.CARRYQ) +#endif +#if !(SB4+SB5) + ALIAS(hpatsource, R11.2) +#endif + +#if SB6 + ALIAS(vpatsource, DD6.QA) +#endif +#if SB7 + ALIAS(vpatsource, DD4.Z) +#endif +#if !(SB6+SB7) + ALIAS(vpatsource, R11.2) +#endif + + NET_C(V5, R10.1) + NET_C(V5, R11.1) + NET_C(V5, R15.1) + NET_C(R11.2, VD3.A) + NET_C(hpatsource, R14.1) + NET_C(R14.2, DD7_2.A) + + TTL_7400_NAND(DD7_1, hpatsource, vpatsource) +#if !SB8 + TTL_7400_NAND(DD7_2, VD3.K, R15.2) + NET_C(VD2.K, DD7_2.B) +#else + TTL_7400_NAND(DD7_2, VD3.K, DD7_1.Q) + NET_C(R15.2, GND) + NET_C(VD2.K, GND) +#endif + +#if _VD4 + NET_C(DD7_2.Q, VD4.K) + NET_C(VD4.A, R16.2) +#else + NET_C(DD7_2.Q, R16.2) +#endif + NET_C(DD3_1.Q, R16.1) + + TTL_7400_NAND(DD7_3, DD7_2.Q, R10.2) + TTL_7400_NAND(DD7_4, R16.1, DD7_3.Q) + + NET_C(DD7_4.Q, VD5.A) + NET_C(VD5.K, R17.1) +#if SB3 + NET_C(VD6.K, R17.1) +#endif + +// video mixer + +#ifdef VD7 + DIODE(VD7, "1N34A") // XXX actually D9B +#endif + RES(R17, 10) // XXX actually 470 ohm POT + RES(R18, 430) +#if _R19 + RES(R19, 430) + CAP(C3, CAP_U(50)) +#endif + +#ifdef VD7 + NET_C(DD3_2.QQ, VD7.A) + NET_C(VD7.K, R18.1) +#else + NET_C(DD3_2.QQ, R18.1) +#endif + NET_C(R17.2, R18.2) // XXX + +#if _R19 + NET_C(GND, R19.1) + NET_C(R18.2, C3.2) + NET_C(R19.2, C3.2) + ALIAS(videomix, C3.1) +#else + ALIAS(videomix, R18.2) +#endif + +#if 1 + HINT(clk, NO_DEACTIVATE) +#endif + +NETLIST_END() + diff --git a/src/mame/machine/nl_tp1985.h b/src/mame/machine/nl_tp1985.h new file mode 100644 index 00000000000..908a18211cc --- /dev/null +++ b/src/mame/machine/nl_tp1985.h @@ -0,0 +1,4 @@ +// license:BSD-3-Clause +// copyright-holders:Sergey Svishchev + +NETLIST_EXTERNAL(tp1985) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index cfaad8f6539..a25b0009db5 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -40113,6 +40113,10 @@ zx80 // 1980 Sinclair ZX-80 zx81 // 1981 Sinclair ZX-81 zx97 // +@source:testpat.cpp +tp1983 +tp1985 + @source:vgmplay.cpp vgmplay |