mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
A large portion of the Atari Gran Trak 10 schematics (1974)
implemented on MAME using the netlist subsystem.
This commit is contained in:
parent
a1c3a96a83
commit
e88ec6a7a5
@ -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",
|
||||
|
@ -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 \
|
||||
|
@ -114,6 +114,7 @@
|
||||
<ClCompile Include="..\devices\net_lib.cpp" />
|
||||
<ClCompile Include="..\devices\nld_2102A.cpp" />
|
||||
<ClCompile Include="..\devices\nld_2716.cpp" />
|
||||
<ClCompile Include="..\devices\nld_tms4800.cpp" />
|
||||
<ClCompile Include="..\devices\nld_4020.cpp" />
|
||||
<ClCompile Include="..\devices\nld_4066.cpp" />
|
||||
<ClCompile Include="..\devices\nld_4316.cpp" />
|
||||
@ -148,6 +149,7 @@
|
||||
<ClCompile Include="..\devices\nld_9316.cpp" />
|
||||
<ClCompile Include="..\devices\nld_9322.cpp" />
|
||||
<ClCompile Include="..\devices\nld_am2847.cpp" />
|
||||
<ClCompile Include="..\devices\nld_dm9314.cpp" />
|
||||
<ClCompile Include="..\devices\nld_dm9334.cpp" />
|
||||
<ClCompile Include="..\devices\nld_legacy.cpp" />
|
||||
<ClCompile Include="..\devices\nld_log.cpp" />
|
||||
@ -195,6 +197,7 @@
|
||||
<ClInclude Include="..\devices\net_lib.h" />
|
||||
<ClInclude Include="..\devices\nld_2102A.h" />
|
||||
<ClInclude Include="..\devices\nld_2716.h" />
|
||||
<ClInclude Include="..\devices\nld_tms4800.h" />
|
||||
<ClInclude Include="..\devices\nld_4020.h" />
|
||||
<ClInclude Include="..\devices\nld_4066.h" />
|
||||
<ClInclude Include="..\devices\nld_4316.h" />
|
||||
@ -230,6 +233,7 @@
|
||||
<ClInclude Include="..\devices\nld_9322.h" />
|
||||
<ClInclude Include="..\devices\nld_am2847.h" />
|
||||
<ClInclude Include="..\devices\nld_devinc.h" />
|
||||
<ClInclude Include="..\devices\nld_dm9314.h" />
|
||||
<ClInclude Include="..\devices\nld_dm9334.h" />
|
||||
<ClInclude Include="..\devices\nld_legacy.h" />
|
||||
<ClInclude Include="..\devices\nld_log.h" />
|
||||
|
@ -177,6 +177,9 @@
|
||||
<ClCompile Include="..\devices\nld_2716.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\devices\nld_tms4800.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\devices\nld_74166.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@ -219,6 +222,9 @@
|
||||
<ClCompile Include="..\devices\nld_4316.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\devices\nld_dm9314.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\devices\nld_dm9334.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@ -437,6 +443,9 @@
|
||||
<ClInclude Include="..\devices\nld_2716.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\devices\nld_tms4800.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\devices\nld_am2847.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
@ -467,6 +476,9 @@
|
||||
<ClInclude Include="..\devices\nld_74194.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\devices\nld_dm9314.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\devices\nld_dm9334.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
|
@ -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, "")
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
114
src/lib/netlist/devices/nld_dm9314.cpp
Normal file
114
src/lib/netlist/devices/nld_dm9314.cpp
Normal file
@ -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<logic_input_t, 4> m_SQ;
|
||||
object_array_t<logic_input_t, 4> m_D;
|
||||
object_array_t<logic_output_t, 4> m_Q;
|
||||
|
||||
state_var<unsigned> m_last_EQ;
|
||||
state_var<unsigned> m_last_MRQ;
|
||||
state_var<unsigned> m_last_SQ;
|
||||
state_var<unsigned> m_last_D;
|
||||
state_var<unsigned> 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
|
42
src/lib/netlist/devices/nld_dm9314.h
Normal file
42
src/lib/netlist/devices/nld_dm9314.h
Normal file
@ -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_ */
|
104
src/lib/netlist/devices/nld_tms4800.cpp
Normal file
104
src/lib/netlist/devices/nld_tms4800.cpp
Normal file
@ -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<logic_input_t, 11> m_A;
|
||||
logic_input_t m_AR;
|
||||
logic_input_t m_OE1;
|
||||
logic_input_t m_OE2;
|
||||
object_array_t<logic_output_t, 8> m_D;
|
||||
|
||||
state_var<unsigned> m_last_data;
|
||||
|
||||
param_rom_t<uint8_t, 11, 8> 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
|
53
src/lib/netlist/devices/nld_tms4800.h
Normal file
53
src/lib/netlist/devices/nld_tms4800.h
Normal file
@ -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_ */
|
@ -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)
|
||||
|
381
src/mame/machine/nl_gtrak10.cpp
Normal file
381
src/mame/machine/nl_gtrak10.cpp
Normal file
@ -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()
|
6
src/mame/machine/nl_gtrak10.h
Normal file
6
src/mame/machine/nl_gtrak10.h
Normal file
@ -0,0 +1,6 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Felipe Sanches
|
||||
|
||||
#include "netlist/nl_setup.h"
|
||||
|
||||
NETLIST_EXTERNAL(gtrak10)
|
Loading…
Reference in New Issue
Block a user