// license:BSD-3-Clause
// copyright-holders:Fabio Priuli, Scott Stone, Couriersud, Felipe Sanches
/***************************************************************************
Atari / Kee Games Driver - Discrete Games made in the 1970's
Atari / Kee Games List (except for most Pong games) - Data based, in part from:
- "Andy's collection of Bronzeage Atari Video Arcade PCBs"
http://www.andysarcade.net/personal/bronzeage/index.htm
- "Atari's Technical Manual Log"
http://www.atarigames.com/manuals.txt
Suspected "same games" are grouped together. These are usually the exact same game but different cabinet/name.
Technical Manual #s Game Name(s) Atari Part #'s Data PROM/ROM Chip Numbers
-----------------------+---------------------------------------------------------------+----------------------------------+---------+---------------------------------------
TM-025 Anti-Aircraft (1975) A000951 YES 003127
TM-048 Crash 'N Score/Stock Car (1975) A004256 YES 003186(x2), 003187(x2), 004248, 004247
TM-030 Crossfire (1975) A003022 NO?
TM-022 Elimination! (1973) A000845 NO
TM-035 Goal IV (1975) A000823 NO
TM-016,029 Gotcha/Color Gotcha (1973) A000816 NO
TM-003,005,011,020,029 Gran Trak 10/Trak 10/Formula K (1974) A000872,A000872 K3RT YES 74186 Racetrack Prom (K5)
TM-004,021 Gran Trak 20/Trak 20/Twin Racer (1974) A001791(RT20),A001793(A20-K4DRTA) YES 74186 Racetrack prom (K5)
TM-028 Hi-Way/Highway (1975) A003211 NO
TM-055 Indy 4 (1976) A003000,A006268,A006270 YES 003186, 003187, 005502-01, 05503-01
TM-026 Indy 800 (1975) A003000,A003170,A003182 YES 003186-003189 (4)
A003184,A003191,A003198,A003199
TM-027,052 Jet Fighter/Jet Fighter Cocktail/Launch Aircraft (1975) A004254,A004255 YES 004250-004252, 004253-01 to 03 (3)
TM-077 Le Mans (1976) A005844,A005845 YES 005837-01, 005838-01, 005839-01
TM-040 Outlaw (1976) A003213 YES 003323 - ROM (8205 @ J4)
TM-007 Pin Pong (1974) A001660 NO
TM-019 Pursuit (1975) K8P-B 90128 NO
TM-012,029,034 Quadrapong (1974) A000845 NO
TM-009 Qwak!/Quack (1974) A000937,A000953 YES 72074/37-2530N (K9)
TM-001,023,029,032 Rebound/Spike/Volleyball (1974) A000517,A000846,SPIKE-(A or B) NO
TM-047 Shark JAWS (1975) A003806 YES 004182, 004183
TM-008,029 Space Race (1973) A000803 NO
TM-046 Steeplechase/Astroturf (1975) A003750 YES 003774 ROM Bugle (C8), 003773-01 "A" Horse (C4), 003773-02 "B" Horse (D4)
TM-057 Stunt Cycle (1976) A004128 YES 004275 ROM Motorcycle/Bus (1F), 004811 ROM Score Translator (D7)
TM-010,036 Tank/Tank Cocktail (1974) A003111 (K5T-F 90124) YES 90-2006 004800SD Tank Rom (K10)
TM-049 Tank II (1975) K5T-F 90124 YES 90-2006
TM-002 Touch-Me (1974) ??????? NO
TM-006,017,029 World Cup/World Cup Football/Coupe du Monde/Coup Franc (1974) A000823 NO
- Not Known to be released or produced, but at least announced.
TM-0?? Arcade Driver/Driver 1st Person (Not Produced/Released) (1974-75?)
TM-018 Dodgeball/Dodgem (Not Produced/Released) (1975)
TM-024 Qwakers (Not Produced/Released) (1974?) (Kee Games clone of Qwak!?)
- Information (current as of 21 Dec. 2016) on what logic chips (and some analog parts) are still needed to be emulated in the
netlist system per-game:
TM-057 (Stunt Cycle)
566 Voltage-Controlled Oscillator
1N751A Zener Diode
1N752A Zener Diode
TM-055 (Indy 4)
7406 Hex Inverter Buffers/Drivers with O.C. H.V. Outputs (note: Might not be needed, could just clone from 7404)
7414 Hex Schmitt-Trigger Inverters
7417 Hex Buffers/Drivers
74164 8-bit Serial-In, Parallel-Out Shift Register
9301 1-of-10 Decoder
LM339 Quad Comparator
***************************************************************************/
#include "emu.h"
#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"
// copied by Pong, not accurate for this driver!
// start
#define MASTER_CLOCK 7159000
#define V_TOTAL (0x105+1) // 262
#define H_TOTAL (0x1C6+1) // 454
#define HBSTART (H_TOTAL)
#define HBEND (32)
#define VBSTART (V_TOTAL)
#define VBEND (16)
#define HRES_MULT (1)
// end
#define SC_VIDCLOCK (14318181/2)
#define SC_HTOTAL (0x1C8+1) // 456
#define SC_VTOTAL (0x103+1) // 259
#define SC_HBSTART (SC_HTOTAL)
#define SC_HBEND (32)
#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:
atarikee_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 atarikee(machine_config &config);
protected:
// driver_device overrides
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private:
};
class stuntcyc_state : public driver_device
{
public:
stuntcyc_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
//, m_video(*this, "fixfreq")
, m_probe_screen(*this, "screen")
, m_probe_bit0(0.0)
, m_probe_bit1(0.0)
, m_probe_bit2(0.0)
, m_probe_bit3(0.0)
, m_probe_bit4(0.0)
, m_probe_bit5(0.0)
, m_probe_bit6(0.0)
, m_probe_data(nullptr)
, m_last_beam(0.0)
, m_last_hpos(0)
, m_last_vpos(0)
, m_last_fraction(0.0)
{
}
NETDEV_LOGIC_CALLBACK_MEMBER(probe_bit0_cb);
NETDEV_LOGIC_CALLBACK_MEMBER(probe_bit1_cb);
NETDEV_LOGIC_CALLBACK_MEMBER(probe_bit2_cb);
NETDEV_LOGIC_CALLBACK_MEMBER(probe_bit3_cb);
NETDEV_LOGIC_CALLBACK_MEMBER(probe_bit4_cb);
NETDEV_LOGIC_CALLBACK_MEMBER(probe_bit5_cb);
NETDEV_LOGIC_CALLBACK_MEMBER(probe_bit6_cb);
NETDEV_LOGIC_CALLBACK_MEMBER(probe_clock_cb);
uint32_t screen_update_stuntcyc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
void stuntcyc(machine_config &config);
protected:
// driver_device overrides
virtual void machine_start() override;
virtual void machine_reset() override;
private:
required_device<netlist_mame_device> m_maincpu;
//required_device<fixedfreq_device> m_video;
required_device<screen_device> m_probe_screen;
int m_probe_bit0;
int m_probe_bit1;
int m_probe_bit2;
int m_probe_bit3;
int m_probe_bit4;
int m_probe_bit5;
int m_probe_bit6;
std::unique_ptr<int[]> m_probe_data;
int m_last_beam;
int m_last_hpos;
int m_last_vpos;
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)
PARAM(Solver.ACCURACY, 1e-4) // works and is sufficient
// schematics
//...
// NETDEV_ANALOG_CALLBACK(sound_cb, sound, atarikee_state, sound_cb, "")
// NETDEV_ANALOG_CALLBACK(video_cb, videomix, fixedfreq_device, update_vid, "fixfreq")
NETLIST_END()
void atarikee_state::machine_start()
{
}
void atarikee_state::machine_reset()
{
}
void atarikee_state::video_start()
{
}
void stuntcyc_state::machine_start()
{
save_item(NAME(m_probe_bit0));
save_item(NAME(m_probe_bit1));
save_item(NAME(m_probe_bit2));
save_item(NAME(m_probe_bit3));
save_item(NAME(m_probe_bit4));
save_item(NAME(m_probe_bit5));
save_item(NAME(m_probe_bit6));
save_item(NAME(m_last_beam));
save_item(NAME(m_last_hpos));
save_item(NAME(m_last_vpos));
save_item(NAME(m_last_fraction));
m_probe_bit0 = 0;
m_probe_bit1 = 0;
m_probe_bit2 = 0;
m_probe_bit3 = 0;
m_probe_bit4 = 0;
m_probe_bit5 = 0;
m_probe_bit6 = 0;
m_probe_data = std::make_unique<int[]>(SC_HTOTAL * SC_VTOTAL);
}
void stuntcyc_state::machine_reset()
{
m_probe_bit0 = 0;
m_probe_bit1 = 0;
m_probe_bit2 = 0;
m_probe_bit3 = 0;
m_probe_bit4 = 0;
m_probe_bit5 = 0;
m_probe_bit6 = 0;
}
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_bit0_cb) { m_probe_bit0 = data; }
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_bit1_cb) { m_probe_bit1 = data; }
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_bit2_cb) { m_probe_bit2 = data; }
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_bit3_cb) { m_probe_bit3 = data; }
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_bit4_cb) { m_probe_bit4 = data; }
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_bit5_cb) { m_probe_bit5 = data; }
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_bit6_cb) { m_probe_bit6 = data; }
NETDEV_LOGIC_CALLBACK_MEMBER(stuntcyc_state::probe_clock_cb)
{
synchronize();
attotime second_fraction(0, time.attoseconds());
attotime frame_fraction(0, (second_fraction * 60).attoseconds());
attotime pixel_time = frame_fraction * (SC_HTOTAL * SC_VTOTAL);
int32_t pixel_index = (frame_fraction * (SC_HTOTAL * SC_VTOTAL)).seconds();
double pixel_fraction = ATTOSECONDS_TO_DOUBLE(pixel_time.attoseconds());
const int hpos = pixel_index % SC_HTOTAL;//m_screen->hpos();
const int vpos = pixel_index / SC_HTOTAL;//m_screen->vpos();
const int curr_index = vpos * SC_HTOTAL + hpos;
int last_index = m_last_vpos * SC_HTOTAL + m_last_hpos;
if (last_index != curr_index)
{
m_probe_data[last_index] = int(double(m_probe_data[last_index]) * m_last_fraction);
m_probe_data[last_index] += int(double(m_last_beam) * (1.0 - m_last_fraction));
last_index++;
while (last_index <= curr_index)
m_probe_data[last_index++] = m_last_beam;
}
//m_last_beam = float(data);
m_last_beam = m_probe_bit0 + m_probe_bit1 * 2 + m_probe_bit2 * 4 + m_probe_bit3 * 8 + m_probe_bit4 * 16 + m_probe_bit5 * 32 + m_probe_bit6 * 64;
m_last_hpos = hpos;
m_last_vpos = vpos;
m_last_fraction = pixel_fraction;
}
uint32_t stuntcyc_state::screen_update_stuntcyc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
m_last_hpos = 0;
m_last_vpos = 0;
uint32_t pixindex = 0;
for (int y = 0; y < SC_VTOTAL; y++)
{
uint32_t *scanline = &bitmap.pix32(y);
pixindex = y * SC_HTOTAL;
for (int x = 0; x < SC_HTOTAL; x++)
*scanline++ = 0xff000000 | (m_probe_data[pixindex++] * 0x010101);
//*scanline++ = 0xff000000 | (uint8_t(m_screen_buf[pixindex++] * 63.0) * 0x010101);
}
return 0;
}
MACHINE_CONFIG_START(atarikee_state::atarikee)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, NETLIST_CLOCK)
MCFG_NETLIST_SETUP(atarikee)
/* video hardware */
MCFG_FIXFREQ_ADD("fixfreq", "screen")
MCFG_FIXFREQ_MONITOR_CLOCK(MASTER_CLOCK)
MCFG_FIXFREQ_HORZ_PARAMS(H_TOTAL-67,H_TOTAL-40,H_TOTAL-8,H_TOTAL)
MCFG_FIXFREQ_VERT_PARAMS(V_TOTAL-22,V_TOTAL-19,V_TOTAL-12,V_TOTAL)
MCFG_FIXFREQ_FIELDCOUNT(1)
MCFG_FIXFREQ_SYNC_THRESHOLD(0.30)
MACHINE_CONFIG_END
//#define STUNTCYC_NL_CLOCK (14318181*69)
#define STUNTCYC_NL_CLOCK (SC_HTOTAL*SC_VTOTAL*60*140)
MACHINE_CONFIG_START(stuntcyc_state::stuntcyc)
/* basic machine hardware */
MCFG_DEVICE_ADD("maincpu", NETLIST_CPU, STUNTCYC_NL_CLOCK)
MCFG_NETLIST_SETUP(stuntcyc)
//MCFG_NETLIST_ANALOG_OUTPUT("maincpu", "vid0", "VIDEO_OUT", fixedfreq_device, update_vid, "fixfreq")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit0", "probe_bit0", stuntcyc_state, probe_bit0_cb, "")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit1", "probe_bit1", stuntcyc_state, probe_bit1_cb, "")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit2", "probe_bit2", stuntcyc_state, probe_bit2_cb, "")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit3", "probe_bit3", stuntcyc_state, probe_bit3_cb, "")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit4", "probe_bit4", stuntcyc_state, probe_bit4_cb, "")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit5", "probe_bit5", stuntcyc_state, probe_bit5_cb, "")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_bit6", "probe_bit6", stuntcyc_state, probe_bit6_cb, "")
MCFG_NETLIST_LOGIC_OUTPUT("maincpu", "probe_clock", "probe_clock", stuntcyc_state, probe_clock_cb, "")
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_UPDATE_DRIVER(stuntcyc_state, screen_update_stuntcyc)
MCFG_SCREEN_RAW_PARAMS(SC_HTOTAL*SC_VTOTAL*60, SC_HTOTAL, 0, SC_HTOTAL, SC_VTOTAL, 0, SC_VTOTAL)
//MCFG_FIXFREQ_ADD("fixfreq", "screen")
//MCFG_FIXFREQ_MONITOR_CLOCK(SC_VIDCLOCK)
//MCFG_FIXFREQ_HORZ_PARAMS(SC_HTOTAL-67,SC_HTOTAL-40,SC_HTOTAL-8, SC_HTOTAL)
//MCFG_FIXFREQ_VERT_PARAMS(SC_VTOTAL-22,SC_VTOTAL-19,SC_VTOTAL-12,SC_VTOTAL)
//MCFG_FIXFREQ_FIELDCOUNT(1)
//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
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( antiairc )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x20, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "003127.k1", 0x0000, 0x0020, CRC(9de772d5) SHA1(2855ba908d8e14a5aca43d4e0594d19f23fe9aae) ) // Anti-Aircraft Target
ROM_END
ROM_START( crashnsc )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0400, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "003186.f6", 0x0000, 0x0200, CRC(b3443354) SHA1(f43b82fd5d02dad2f597f890f5845701e73476a5) ) // Car Video #1
ROM_LOAD( "003186.p6", 0x0200, 0x0200, CRC(b3443354) SHA1(f43b82fd5d02dad2f597f890f5845701e73476a5) ) // Car Video #2
ROM_REGION( 0x0040, "motion", ROMREGION_ERASE00 )
ROM_LOAD( "003187.f7", 0x0000, 0x0020, CRC(01dca5b9) SHA1(0e3fbefc5df993b5a6a724aee258653897954255) ) // Car Motion #1
ROM_LOAD( "003187.p7", 0x0020, 0x0020, CRC(01dca5b9) SHA1(0e3fbefc5df993b5a6a724aee258653897954255) ) // Car Motion #2
ROM_REGION( 0x0200, "location", ROMREGION_ERASE00 )
ROM_LOAD( "004248.d2", 0x0000, 0x0200, CRC(683b203b) SHA1(97202da5dd4a6cb66714d8e58ecee5c6efa65c1c) ) // Car Location Code
ROM_REGION( 0x0200, "shape", ROMREGION_ERASE00 )
ROM_LOAD( "004247.e2", 0x0000, 0x0200, CRC(478afac2) SHA1(fb15af0d2fc9d9ed0e92a3e7610c22dadf91d012) ) // Car Shape Code
ROM_END
ROM_START( gtrak10 )
ROM_REGION( 0x10000, "maincpu", 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
ROM_START( gtrak10a )
ROM_REGION( 0x10000, "maincpu", 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
ROM_START( gtrak20 )
ROM_REGION( 0x10000, "maincpu", 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) )
ROM_END
ROM_START( indy4 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0200, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "003186.p6", 0x0000, 0x0200, CRC(b3443354) SHA1(f43b82fd5d02dad2f597f890f5845701e73476a5) ) // Car Video
ROM_REGION( 0x0020, "motion", ROMREGION_ERASE00 )
ROM_LOAD( "003187.f7", 0x0000, 0x0020, CRC(01dca5b9) SHA1(0e3fbefc5df993b5a6a724aee258653897954255) ) // Car Motion
ROM_REGION( 0x0020, "checkpoint", ROMREGION_ERASE00 )
ROM_LOAD( "005502.e5", 0x0000, 0x0020, CRC(e30ea877) SHA1(86f1f2c2e6e8472f7019f17bac723cb36faf098a) ) // Check Points
ROM_REGION( 0x0200, "racetrack", ROMREGION_ERASE00 )
ROM_LOAD( "005503.f4", 0x0000, 0x0200, CRC(1aafbe72) SHA1(c59829eccfe5a6014acad9682c401ca3f32fdfc9) ) // Race Track
ROM_END
ROM_START( indy800 )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0200, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "003186.p6", 0x0000, 0x0200, CRC(b3443354) SHA1(f43b82fd5d02dad2f597f890f5845701e73476a5) ) // Car Video
ROM_REGION( 0x0020, "motion", ROMREGION_ERASE00 )
ROM_LOAD( "003187.f7", 0x0000, 0x0020, CRC(01dca5b9) SHA1(0e3fbefc5df993b5a6a724aee258653897954255) ) // Car Motion
ROM_REGION( 0x0020, "checkpoint", ROMREGION_ERASE00 )
ROM_LOAD( "003188.e5", 0x0000, 0x0020, NO_DUMP ) // Check Points - Might be same as indy4?
ROM_REGION( 0x0200, "racetrack", ROMREGION_ERASE00 )
ROM_LOAD( "003189.f4", 0x0000, 0x0200, NO_DUMP ) // Race Track - Might be same as indy4?
ROM_END
ROM_START( jetfight )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0040, "shell", ROMREGION_ERASE00 )
ROM_LOAD( "004250.m1", 0x0000, 0x0020, CRC(bee62d20) SHA1(2ea5fd7b087004c37901d2a56da2d6f6dcce9e29) ) // Shell Rom
ROM_LOAD( "004250.j1", 0x0020, 0x0020, CRC(bee62d20) SHA1(2ea5fd7b087004c37901d2a56da2d6f6dcce9e29) ) // Shell Rom
ROM_REGION( 0x0020, "singleplayer", ROMREGION_ERASE00 )
ROM_LOAD( "004251.r5", 0x0000, 0x0020, CRC(bd95f87e) SHA1(4bd863104f1a7260b95f3fb2c13f40b7337d3dd9) ) // Single Player Rom
ROM_REGION( 0x0100, "score", ROMREGION_ERASE00 )
ROM_LOAD( "004252.a4", 0x0000, 0x0100, CRC(08a0b011) SHA1(71998728604a152006550869afe60d405643ccf1) ) // Score Rom
ROM_REGION( 0x0400, "gfx", ROMREGION_ERASE00 )
/* Note: Use 004253-01 and 004253-02 or use 004253-03 ONLY, not both together. Presumably, -03 = data from -02 and -01 */
ROM_LOAD( "004253-02.j5", 0x0000, 0x0200, CRC(c58ee65d) SHA1(785f842897a2ce92ce2f009e9b6d8e96950deb1f) ) // Picture & S.C. Rom A
ROM_LOAD( "004253-01.k5", 0x0200, 0x0200, CRC(0d5648a9) SHA1(7a79ca587376678d9735f025d59088e6686fd783) ) // Picture & S.C. Rom B
// ROM_LOAD( "004253-03.f5", 0x0000, 0x0400, NO_DUMP ) // Picture & S.C. Rom C
ROM_END
ROM_START( jetfighta )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0040, "shell", ROMREGION_ERASE00 )
ROM_LOAD( "004250.m1", 0x0000, 0x0020, CRC(bee62d20) SHA1(2ea5fd7b087004c37901d2a56da2d6f6dcce9e29) ) // Shell Rom
ROM_LOAD( "004250.j1", 0x0020, 0x0020, CRC(bee62d20) SHA1(2ea5fd7b087004c37901d2a56da2d6f6dcce9e29) ) // Shell Rom
ROM_REGION( 0x0020, "singleplayer", ROMREGION_ERASE00 )
ROM_LOAD( "004251.r5", 0x0000, 0x0020, CRC(bd95f87e) SHA1(4bd863104f1a7260b95f3fb2c13f40b7337d3dd9) ) // Single Player Rom
ROM_REGION( 0x0200, "score", ROMREGION_ERASE00 )
ROM_LOAD( "jet.a4", 0x0000, 0x0200, CRC(9e267e44) SHA1(b1c74ab275e30ed41c60e8490eaaf5211ec14ec5) ) // Score Rom
ROM_REGION( 0x0800, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "jet.j5", 0x0000, 0x0400, CRC(853d61b3) SHA1(c5e1b09153b813b7b4042246e5634cc83de9654c) ) // Picture & S.C. Rom A
ROM_LOAD( "jet.k5", 0x0400, 0x0400, CRC(a3fada62) SHA1(2efed600683e35ffa10acc5a301e736989c9f236) ) // Picture & S.C. Rom B
ROM_END
ROM_START( lemans )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x2000, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "005837.n5", 0x0000, 0x0800, CRC(21a0c26a) SHA1(2bfe5ff415e4f252caf123ec80a32e6b8220c73a) )
ROM_LOAD( "005838.n4", 0x0800, 0x0800, CRC(9b8fc4fd) SHA1(faf043922f0536e5a93fe6ed99d712503a8c4eb1) )
ROM_LOAD( "005839.n6", 0x1000, 0x0800, CRC(4b1139bb) SHA1(c6418466f251054cbfe889895ec9bb55272f7575) )
ROM_END
ROM_START( qwakttl )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0200, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "90-2002.9k", 0x0000, 0x0200, CRC(6d3b6270) SHA1(08e295efebc56ed87f56b93b74f87fc7f1df5213) ) // 37-2530n in manual
ROM_END
ROM_START( outlaw )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0200, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "0003323.j4", 0x0000, 0x0200, CRC(3166dad9) SHA1(4fca88b4256d8fb3e0deca54a15ffaafb830831e) ) // Rom (8205)
ROM_END
ROM_START( sharkjaw )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0200, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "004182.da1", 0x0000, 0x0100, CRC(05242912) SHA1(d3925cde795f04ac04151165bbbff74b15dce5ca) ) // Shark & Fish P-Rom
ROM_LOAD( "004183.db1", 0x0100, 0x0100, CRC(b161b889) SHA1(009c6fc93174df15fb6a7993a73cfda56c8edfa2) )// Diver P-Rom
ROM_END
ROM_START( steeplec )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0220, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "003773-a.4c", 0x0000, 0x0100, CRC(5ddc49b6) SHA1(58eba996703cbb7b3f66ff97357e191c9a3ab340) ) // Horse Graphics
ROM_LOAD( "003773-b.4d", 0x0100, 0x0100, CRC(e6994cde) SHA1(504f92dba0c8640d55c7412697868582043f3817) ) // Horse Graphics
ROM_LOAD( "003774.8c", 0x0200, 0x0020, CRC(f3785f4a) SHA1(98f4015049279de5ba109e6dd87bb94071df5860) ) // Bugle
ROM_END
ROM_START( stuntcyc )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0200, "maincpu:004275.f1", ROMREGION_ERASE00 )
ROM_LOAD( "004275.f1", 0x0000, 0x0200, CRC(4ed5a99d) SHA1(1e5f439bce72e78dfff76fd8f61187c6ef484a64) ) // Motorcycle & Bus
ROM_REGION( 0x0020, "maincpu:004811.d7", ROMREGION_ERASE00 )
ROM_LOAD( "004811.d7", 0x0000, 0x0020, CRC(31a09efb) SHA1(fd5d538c9ec1234acf7c74ca0704113d220abbf6) ) // Score Translator
ROM_END
ROM_START( tank )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
/* The "custom" 24-pin ROM used in Atari/Kee Games "Tank" is known as a MOSTEK MK28000P. */
ROM_REGION( 0x0801, "gfx", ROMREGION_ERASE00 )
ROM_LOAD( "90-2006.k10", 0x0000, 0x0800, CRC(87f5c365) SHA1(bc518a5795ef3ed8a7c0463653d70f60780ddda1) )
ROM_END
ROM_START( tankii )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
/* The "custom" 24-pin ROM used in Atari/Kee Games "Tank" is known as a MOSTEK MK28000P. */
ROM_REGION( 0x0801, "gfx", ROMREGION_ERASE00 ) // 2049 Byte Size?
ROM_LOAD( "90-2006.k10" ,0x0000, 0x0801, CRC(c25f6014) SHA1(7bd3fca5f64c928a645ca27c643b736667cef216) )
ROM_END
/* // NO DUMPED ROMS
ROM_START( astrotrf )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_REGION( 0x0400, "gfx", ROMREGION_ERASE00 ) // Region Size unknown, dump size unknown
ROM_LOAD( "003774.c8", 0x0000, 0x0100, NO_DUMP ) // Bugle
ROM_LOAD( "003773-02.c4", 0x0100, 0x0100, NO_DUMP ) // Graphics (Astroturf - Rev.A)
ROM_END
*/
/* // 100% TTL - NO ROMS
// Crossfire (1975)
// Unclear if this is 100% TTL or if it uses a ROM:
// IC description in manual says a rom is used (74186 ROM)
// but the parts list in the same manual mentions no IC 74186!
// Simulated in DICE without ROMs from schematics, so unlikely
// it uses any, and is in fact 100% TTL..
ROM_START ( crossfir )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( eliminat )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( goaliv )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( gotchaat )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( gotchaatc )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( hiway )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( pinpong )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( pongdbl )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( pursuit )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( quadpong )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( rebound )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( spacrace )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( touchme )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( worldcup )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( coupdmnd ) // dummy to satisfy game entry
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
ROM_END
ROM_START( coupfran ) // dummy to satisfy game entry
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
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, 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)
// 100% TTL
//GAME(1974, coupfran, worldcup, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari Europe", "Coup Franc [TTL]", MACHINE_IS_SKELETON)
//GAME(1974, coupdmnd, worldcup, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari France", "Coup du Monde [TTL]", MACHINE_IS_SKELETON)
//GAME(1975, crossfir, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Crossfire [TTL]", MACHINE_IS_SKELETON)
//GAME(1973, eliminat, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Elimination! [TTL]", MACHINE_IS_SKELETON)
//GAME(1975, goaliv, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Goal IV [TTL]", MACHINE_IS_SKELETON)
//GAME(1973, gotchaat, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Gotcha [TTL]", MACHINE_IS_SKELETON) //?
//GAME(1973, gotchaatc, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Gotcha Color [TTL]", MACHINE_IS_SKELETON) //?
//GAME(1975, hiway, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Hi-Way/Highway [TTL]", MACHINE_IS_SKELETON)
//GAME(1974, pinpong, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Pin Pong [TTL]", MACHINE_IS_SKELETON)
//GAME(1975, pursuit, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Pursuit [TTL]", MACHINE_IS_SKELETON)
//GAME(1974, quadpong, eliminat, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Quadrapong [TTL]", MACHINE_IS_SKELETON)
//GAME(1974, rebound, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari/Kee", "Rebound/Spike/Volleyball [TTL]", MACHINE_IS_SKELETON)
//GAME(1973, spacrace, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Space Race [TTL]", MACHINE_IS_SKELETON)
//GAME(1974, touchme, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "Touch-Me [TTL]", MACHINE_IS_SKELETON) //?
//GAME(1974, worldcup, 0, atarikee, 0, atarikee_state, empty_init, ROT0, "Atari", "World Cup/World Cup Football [TTL]", MACHINE_IS_SKELETON)