diff --git a/src/emu/cpu/pps4/pps4.c b/src/emu/cpu/pps4/pps4.c index 5144b8d50a0..130b70d5b39 100644 --- a/src/emu/cpu/pps4/pps4.c +++ b/src/emu/cpu/pps4/pps4.c @@ -5,6 +5,26 @@ * pps4.c * * Rockwell PPS-4 CPU + * Introduced in 1972, it ran at 256kHz. An improved version was released + * in 1975, but could only manage 200kHz. The chipset continued to be + * produced through the 1980s, but never found much acceptance. Chip + * numbers are 10660 (original), 11660, 12660. + * + * List of support / peripheral chips: + * 10706 Clock generator + * 10738 Bus interface + * 11049 Interval timer + * 10686 General purpose I/O + * 10696 General purpose I/O + * 10731 Telecommunications data interface + * 10736 dot matrix printer controller + * 10788 keyboard/display controller + * 10789 printer controller + * 10815 keyboard/printer controller + * 10930 Serial data controller + * 15380 dot matrix printer controller + * + * Note: External clock should be divided by 18 (not implemented). * *****************************************************************************/ #include "emu.h" diff --git a/src/mame/drivers/gts1.c b/src/mame/drivers/gts1.c index 20ef40b1bc8..bd91fc6c014 100644 --- a/src/mame/drivers/gts1.c +++ b/src/mame/drivers/gts1.c @@ -1,36 +1,179 @@ -/* - Gottlieb System 1 -*/ +/**************************************************************************************************** + +PINBALL +Gottlieb System 1 + +Gottlieb's first foray into computerised pinball. + +Typical of Gottlieb's golden period, these machines are physically well-designed and made. +However, the computer side was another story, an attempt to catch up to its competitors who +were way ahead in the technology race. Instead of each board being solidly grounded to the +chassis, the only connections were through flaky edge connectors. Voltage differences would +then cause solenoids and lights to switch on at random and destroy transistors. Further, the +CPU chips chosen were an unusual 4-bit design that was already old. + +The first games had chimes. Then, this was replaced by 3 NE555 tone oscillators. The last +machines had a real sound board which had more computing power than the main cpu. + +Game numbering: +Each Gottlieb game had the model number printed on the instruction card, so it was very +easy to gather information. Gottlieb either made a single-player game, or a 2-player and +a 4-player game. For example, Centigrade 37 (#407) was a single-player game, while Bronco +(4-player)(#396) was exactly the same as Mustang (2-player)(#397). Cleopatra (#409) was +originally a 4-player EM game (with Pyramid #410 being the 2-player version). Then, the SS +version was made, and it kept the same number. After that, the SS versions were suffixed +with 'SS' up to The Incredible Hulk (#433), and then the 'SS' was dropped. -#include "emu.h" +Game List: +Number ROM Name +409 A Cleopatra +412SS B Sinbad +417SS C Joker Poker +419SS D Dragon +421SS E Solar Ride +422SS F Countdown +424SS G Close Encounters of the third kind +425SS H Charlie's Angels +427SS I Pinball Pool +429SS J Totem +433SS K The Incredible Hulk +435 L Genie +437 N Buck Rogers +438 P Torch +440 R Roller Disco +442 S Asteroid Annie and the Aliens + +Chips used: +U1 11660 CPU +U2 10696EE 5101L RAM interface (device#6) +U3 10696EE General purpose I/O (dipswitches, lamps, misc) (device#3) +U4 A1753CX Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (solenoid control) +U5 A1752CX Custom 2kx8 ROM, 128x4 RAM, 16x1 I/O (switch matrix) +U6 10788 Display driver + 5101L 4-bit static RAM + MM6351-IJ ROM + + +ToDo: +- Everything +- Hard to debug because no errors are logged; also the program flow seems odd. +- 5101L RAM (battery-backed) is driven from the 10696. +- MM6351 ROM is driven from the CPU I/O ports and has 4 banks. + +*****************************************************************************************************/ + + +#include "machine/genpin.h" #include "cpu/pps4/pps4.h" +//#include "machine/nvram.h" +//#include "gts1.lh" -class gts1_state : public driver_device +class gts1_state : public genpin_class { public: gts1_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu") + : genpin_class(mconfig, type, tag) + , m_maincpu(*this, "maincpu") { } -protected: - - // devices - required_device m_maincpu; - - // driver_device overrides - virtual void machine_reset(); -public: DECLARE_DRIVER_INIT(gts1); +private: + virtual void machine_reset(); + required_device m_maincpu; }; static ADDRESS_MAP_START( gts1_map, AS_PROGRAM, 8, gts1_state ) - AM_RANGE(0x0000, 0xffff) AM_NOP + AM_RANGE(0x0000, 0x0fff) AM_ROM +ADDRESS_MAP_END + +static ADDRESS_MAP_START( gts1_data, AS_DATA, 8, gts1_state ) + AM_RANGE(0x0000, 0x0fff) AM_RAM // not correct +ADDRESS_MAP_END + +static ADDRESS_MAP_START( gts1_io, AS_IO, 8, gts1_state ) + AM_RANGE(0x0000, 0x00ff) AM_RAM // connects to all the other chips ADDRESS_MAP_END static INPUT_PORTS_START( gts1 ) + PORT_START("DSW0") + PORT_DIPNAME( 0x01, 0x00, "S01") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x01, DEF_STR( On )) + PORT_DIPNAME( 0x02, 0x00, "S02") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x02, DEF_STR( On )) + PORT_DIPNAME( 0x04, 0x00, "S03") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x04, DEF_STR( On )) + PORT_DIPNAME( 0x08, 0x00, "S04") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x08, DEF_STR( On )) + PORT_DIPNAME( 0x10, 0x00, "S05") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x10, DEF_STR( On )) + PORT_DIPNAME( 0x20, 0x20, "S06") + PORT_DIPSETTING( 0x00, DEF_STR( No )) + PORT_DIPSETTING( 0x20, DEF_STR( Yes )) + PORT_DIPNAME( 0x40, 0x40, "S07") + PORT_DIPSETTING( 0x00, DEF_STR( No )) + PORT_DIPSETTING( 0x40, DEF_STR( Yes )) + PORT_DIPNAME( 0x80, 0x80, "S08") + PORT_DIPSETTING( 0x00, DEF_STR( No )) + PORT_DIPSETTING( 0x80, DEF_STR( Yes )) + + PORT_START("DSW1") + PORT_DIPNAME( 0x01, 0x00, "S09") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x01, DEF_STR( On )) + PORT_DIPNAME( 0x02, 0x00, "S10") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x02, DEF_STR( On )) + PORT_DIPNAME( 0x04, 0x00, "S11") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x04, DEF_STR( On )) + PORT_DIPNAME( 0x08, 0x00, "S12") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x08, DEF_STR( On )) + PORT_DIPNAME( 0x10, 0x00, "S13") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x10, DEF_STR( On )) + PORT_DIPNAME( 0x20, 0x00, "S14") + PORT_DIPSETTING( 0x00, DEF_STR( Yes )) + PORT_DIPSETTING( 0x20, DEF_STR( No )) + PORT_DIPNAME( 0x40, 0x40, "S15") + PORT_DIPSETTING( 0x00, DEF_STR( No )) + PORT_DIPSETTING( 0x40, DEF_STR( Yes )) + PORT_DIPNAME( 0x80, 0x00, "S16") + PORT_DIPSETTING( 0x00, DEF_STR( No )) + PORT_DIPSETTING( 0x80, DEF_STR( Yes )) + + PORT_START("DSW2") + PORT_DIPNAME( 0x01, 0x00, "S17") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x01, DEF_STR( On )) + PORT_DIPNAME( 0x02, 0x00, "S18") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x02, DEF_STR( On )) + PORT_DIPNAME( 0x04, 0x00, "S19") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x04, DEF_STR( On )) + PORT_DIPNAME( 0x08, 0x00, "S20") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x08, DEF_STR( On )) + PORT_DIPNAME( 0x10, 0x00, "S21") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x10, DEF_STR( On )) + PORT_DIPNAME( 0x20, 0x00, "S22") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x20, DEF_STR( On )) + PORT_DIPNAME( 0x40, 0x00, "S23") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x40, DEF_STR( On )) + PORT_DIPNAME( 0x80, 0x00, "S24") + PORT_DIPSETTING( 0x00, DEF_STR( Off )) + PORT_DIPSETTING( 0x80, DEF_STR( On )) INPUT_PORTS_END void gts1_state::machine_reset() @@ -43,8 +186,18 @@ DRIVER_INIT_MEMBER(gts1_state,gts1) static MACHINE_CONFIG_START( gts1, gts1_state ) /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", PPS4, 198864) + MCFG_CPU_ADD("maincpu", PPS4, XTAL_3_579545MHz / 18) // divided in the CPU MCFG_CPU_PROGRAM_MAP(gts1_map) + MCFG_CPU_DATA_MAP(gts1_data) + MCFG_CPU_IO_MAP(gts1_io) + + //MCFG_NVRAM_ADD_0FILL("nvram") + + /* Video */ + //MCFG_DEFAULT_LAYOUT(layout_gts1) + + /* Sound */ + MCFG_FRAGMENT_ADD( genpin_audio ) MACHINE_CONFIG_END @@ -61,7 +214,7 @@ ROM_START( gts1s ) ROM_END /*------------------------------------------------------------------- -/ Asteroid Annie and the Aliens (12/1980) +/ Asteroid Annie and the Aliens (12/1980) #442 /-------------------------------------------------------------------*/ ROM_START(astannie) ROM_REGION(0x10000, "maincpu", 0) @@ -76,7 +229,7 @@ ROM_START(astannie) ROM_END /*------------------------------------------------------------------- -/ Buck Rogers (01/1980) +/ Buck Rogers (01/1980) #437 /-------------------------------------------------------------------*/ ROM_START(buckrgrs) ROM_REGION(0x10000, "maincpu", 0) @@ -91,7 +244,7 @@ ROM_START(buckrgrs) ROM_END /*------------------------------------------------------------------- -/ Charlie's Angels (11/1978) +/ Charlie's Angels (11/1978) #425 /-------------------------------------------------------------------*/ ROM_START(charlies) ROM_REGION(0x10000, "maincpu", 0) @@ -100,7 +253,7 @@ ROM_START(charlies) ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d)) ROM_END /*------------------------------------------------------------------- -/ Cleopatra (11/1977) +/ Cleopatra (11/1977) #409 /-------------------------------------------------------------------*/ ROM_START(cleoptra) ROM_REGION(0x10000, "maincpu", 0) @@ -110,7 +263,7 @@ ROM_START(cleoptra) ROM_END /*------------------------------------------------------------------- -/ Close Encounters of the Third Kind (10/1978) +/ Close Encounters of the Third Kind (10/1978) #424 /-------------------------------------------------------------------*/ ROM_START(closeenc) ROM_REGION(0x10000, "maincpu", 0) @@ -120,7 +273,7 @@ ROM_START(closeenc) ROM_END /*------------------------------------------------------------------- -/ Count-Down (05/1979) +/ Count-Down (05/1979) #422 /-------------------------------------------------------------------*/ ROM_START(countdwn) ROM_REGION(0x10000, "maincpu", 0) @@ -130,7 +283,7 @@ ROM_START(countdwn) ROM_END /*------------------------------------------------------------------- -/ Dragon (10/1978) +/ Dragon (10/1978) #419 /-------------------------------------------------------------------*/ ROM_START(dragon) ROM_REGION(0x10000, "maincpu", 0) @@ -140,7 +293,7 @@ ROM_START(dragon) ROM_END /*------------------------------------------------------------------- -/ Genie (11/1979) +/ Genie (11/1979) #435 /-------------------------------------------------------------------*/ ROM_START(geniep) ROM_REGION(0x10000, "maincpu", 0) @@ -155,7 +308,7 @@ ROM_START(geniep) ROM_END /*------------------------------------------------------------------- -/ Joker Poker (08/1978) +/ Joker Poker (08/1978) #417 /-------------------------------------------------------------------*/ ROM_START(jokrpokr) ROM_REGION(0x10000, "maincpu", 0) @@ -183,7 +336,7 @@ ROM_END /-------------------------------------------------------------------*/ /*------------------------------------------------------------------- -/ Pinball Pool (08/1979) +/ Pinball Pool (08/1979) #427 /-------------------------------------------------------------------*/ ROM_START(pinpool) ROM_REGION(0x10000, "maincpu", 0) @@ -193,7 +346,7 @@ ROM_START(pinpool) ROM_END /*------------------------------------------------------------------- -/ Roller Disco (02/1980) +/ Roller Disco (02/1980) #440 /-------------------------------------------------------------------*/ ROM_START(roldisco) ROM_REGION(0x10000, "maincpu", 0) @@ -212,7 +365,7 @@ ROM_END /-------------------------------------------------------------------*/ /*------------------------------------------------------------------- -/ Sinbad (05/1978) +/ Sinbad (05/1978) #412 /-------------------------------------------------------------------*/ ROM_START(sinbad) ROM_REGION(0x10000, "maincpu", 0) @@ -233,7 +386,7 @@ ROM_END /-------------------------------------------------------------------*/ /*------------------------------------------------------------------- -/ Solar Ride (02/1979) +/ Solar Ride (02/1979) #421 /-------------------------------------------------------------------*/ ROM_START(solaride) ROM_REGION(0x10000, "maincpu", 0) @@ -243,7 +396,7 @@ ROM_START(solaride) ROM_END /*------------------------------------------------------------------- -/ The Incredible Hulk (10/1979) +/ The Incredible Hulk (10/1979) #433 /-------------------------------------------------------------------*/ ROM_START(hulk) ROM_REGION(0x10000, "maincpu", 0) @@ -258,7 +411,7 @@ ROM_START(hulk) ROM_END /*------------------------------------------------------------------- -/ Torch (02/1980) +/ Torch (02/1980) #438 /-------------------------------------------------------------------*/ ROM_START(torch) ROM_REGION(0x10000, "maincpu", 0) @@ -273,7 +426,7 @@ ROM_START(torch) ROM_END /*------------------------------------------------------------------- -/ Totem (10/1979) +/ Totem (10/1979) #429 /-------------------------------------------------------------------*/ ROM_START(totem) ROM_REGION(0x10000, "maincpu", 0) @@ -298,27 +451,34 @@ ROM_START(sys1test) ROM_END -GAME(1977, gts1, 0, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1", GAME_IS_BIOS_ROOT) +GAME(1977, gts1, 0, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1", GAME_IS_BIOS_ROOT) //Exact same roms as gts1 with added hardware we'll likely need roms for to emulate properly -GAME(1979, gts1s, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1 with sound board", GAME_IS_BIOS_ROOT) +GAME(1979, gts1s, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1 with sound board", GAME_IS_BIOS_ROOT) +GAME(19??, sys1test, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1 Test prom", GAME_IS_SKELETON_MECHANICAL) -GAME(1980, astannie, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Asteroid Annie and the Aliens", GAME_IS_SKELETON_MECHANICAL) -GAME(1980, buckrgrs, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Buck Rogers", GAME_IS_SKELETON_MECHANICAL) -GAME(1978, charlies, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Charlie's Angels", GAME_IS_SKELETON_MECHANICAL) +// chimes GAME(1977, cleoptra, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Cleopatra", GAME_IS_SKELETON_MECHANICAL) -GAME(1978, closeenc, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Close Encounters of the Third Kind", GAME_IS_SKELETON_MECHANICAL) -GAME(1979, countdwn, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Count-Down", GAME_IS_SKELETON_MECHANICAL) -GAME(1978, dragon, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Dragon", GAME_IS_SKELETON_MECHANICAL) -GAME(1979, geniep, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Genie (Pinball)", GAME_IS_SKELETON_MECHANICAL) -GAME(1978, jokrpokr, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Joker Poker", GAME_IS_SKELETON_MECHANICAL) -GAME(1979, pinpool, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Pinball Pool", GAME_IS_SKELETON_MECHANICAL) -GAME(1980, roldisco, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Roller Disco", GAME_IS_SKELETON_MECHANICAL) GAME(1978, sinbad, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Sinbad", GAME_IS_SKELETON_MECHANICAL) GAME(1978, sinbadn, sinbad, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Sinbad (Norway)", GAME_IS_SKELETON_MECHANICAL) +GAME(1978, jokrpokr, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Joker Poker", GAME_IS_SKELETON_MECHANICAL) +GAME(1978, dragon, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Dragon", GAME_IS_SKELETON_MECHANICAL) GAME(1979, solaride, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Solar Ride", GAME_IS_SKELETON_MECHANICAL) -GAME(1979, hulk, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Incredible Hulk,The", GAME_IS_SKELETON_MECHANICAL) -GAME(1980, torch, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Torch", GAME_IS_SKELETON_MECHANICAL) +GAME(1979, countdwn, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Count-Down", GAME_IS_SKELETON_MECHANICAL) + +// NE555 beeper +GAME(1978, closeenc, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Close Encounters of the Third Kind", GAME_IS_SKELETON_MECHANICAL) +GAME(1978, charlies, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Charlie's Angels", GAME_IS_SKELETON_MECHANICAL) +GAME(1979, pinpool, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Pinball Pool", GAME_IS_SKELETON_MECHANICAL) + +// sound card GAME(1979, totem, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Totem", GAME_IS_SKELETON_MECHANICAL) +GAME(1979, hulk, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Incredible Hulk,The", GAME_IS_SKELETON_MECHANICAL) +GAME(1979, geniep, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Genie (Pinball)", GAME_IS_SKELETON_MECHANICAL) +GAME(1980, buckrgrs, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Buck Rogers", GAME_IS_SKELETON_MECHANICAL) +GAME(1980, torch, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Torch", GAME_IS_SKELETON_MECHANICAL) +GAME(1980, roldisco, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Roller Disco", GAME_IS_SKELETON_MECHANICAL) +GAME(1980, astannie, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "Asteroid Annie and the Aliens", GAME_IS_SKELETON_MECHANICAL) + +// homebrew GAME(1986, hexagone, gts1s, gts1, gts1, gts1_state, gts1, ROT0, "Christian Tabart (France)", "L'Hexagone", GAME_IS_SKELETON_MECHANICAL) -GAME(19??, sys1test, gts1, gts1, gts1, gts1_state, gts1, ROT0, "Gottlieb", "System 1 Test prom", GAME_IS_SKELETON_MECHANICAL)