From 2a9ef90e85824b0fa5c9deb21d090436133e6b0e Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 28 Mar 2020 09:29:34 +0100 Subject: [PATCH] sstrangr.cpp: expanded hardware notes, updated layout to match pics [Guru] sstrangr.cpp: added preliminary sound support via samples [Ivan Vangelista] crystal.cpp: added dip locations [Guru] --- src/mame/drivers/crystal.cpp | 16 +- src/mame/drivers/sstrangr.cpp | 413 +++++++++++++++++++++++++++------- src/mame/layout/sstrangr.lay | 22 +- 3 files changed, 356 insertions(+), 95 deletions(-) diff --git a/src/mame/drivers/crystal.cpp b/src/mame/drivers/crystal.cpp index 49633034fa0..f3b560bbdca 100644 --- a/src/mame/drivers/crystal.cpp +++ b/src/mame/drivers/crystal.cpp @@ -455,28 +455,28 @@ static INPUT_PORTS_START( crystal ) PORT_SERVICE_NO_TOGGLE( 0x80, IP_ACTIVE_LOW ) PORT_START("DSW") - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Pause ) ) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Pause ) ) PORT_DIPLOCATION("DSW:1") PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Free_Play ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Free_Play ) ) PORT_DIPLOCATION("DSW:2") PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:3") PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:4") PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:5") PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:6") PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW:7") PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Test ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Test ) ) PORT_DIPLOCATION("DSW:8") PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) INPUT_PORTS_END diff --git a/src/mame/drivers/sstrangr.cpp b/src/mame/drivers/sstrangr.cpp index 445f88f4ede..6c11e59d8ab 100644 --- a/src/mame/drivers/sstrangr.cpp +++ b/src/mame/drivers/sstrangr.cpp @@ -3,6 +3,8 @@ /*******************************************************/ /* */ /* Yachiyo "Space Stranger/Space Stranger 2" */ +/* The cocktail version is also known as */ +/* "Super Space Stranger" but it is the same game */ /* */ /*******************************************************/ @@ -13,12 +15,48 @@ Space Stranger hardware info by Guru This is a black/white Space Invaders clone made by Yachiyo Electric Co. Ltd. using colored cellophane -to make it look colored. This is probably the same game known as Super Space Stranger on the flyer -and also has 'Super Space Stranger' printed on the control panel/marquee. -Super Space Stranger is said to be made by Ban Presto but the hardware is identical to the Yachiyo PCB. -Additionally there is no evidence in the game or on the control panel or marquee or PCB to suggest it -was actually made by them, so this info is probably false or guessed, or perhaps Ban Presto just -distributed it. Either way there is no evidence that Ban Presto manufactured it. +to make it look colored. The gameplay is mostly the same as any other Space Invaders game except the mother +ship changes direction randomly and if the player hits the shields 50 points are deducted from the score. +So be careful, score can go to 0 very quickly! +The sounds are very close to Taito Space Invaders, possibly even identical. +The hardware has a built-in service mode with RAM/ROM test and I/O check. +When enabling the I/O check, if ROMs or RAM are bad various sounds are made to denote the bad chips. +The following table summarizes the chip locations and sounds made. Note a bad CPU will also cause sounds +to be made on bootup but the I/O check or other in-game tests will not be available. + +Chip# Type Sounds Made +------------------------------------------------------ +38 4116 RAM UFO Flying then Extra Ship +39 4116 RAM Player Shoot then Extra Ship +40 4116 RAM Player Explosion then Extra Ship +41 4116 RAM Invader Explosion then Extra Ship +51 4116 RAM UFO Flying then silence +52 4116 RAM Player Shoot then silence +53 4116 RAM Player Explosion then silence +54 4116 RAM Invader Explosion then silence +58 EPROM 01 Player Shoot then Invader Explosion \ +59 EPROM 02 UFO Flying then Invader Explosion | +60 EPROM 03 Invader Explosion | +61 EPROM 04 Player Explosion then Invader Explosion | +62 EPROM 05 Player Shoot then Player Explosion | also with Invader movement sounds +63 EPROM 06 Player Explosion then UFO Flying | +64 EPROM 07 Player Explosion | +65 EPROM 08 Player Shoot then UFO Flying / + +These are schematics available for Space Stranger but the scans are too small to read so completely useless. +There is another game known as 'Super Space Stranger' that has a service manual available with schematics. +It is also known as 'Mark Stranger 2' and is a color version of the same game. +There is a Super Space Stranger flyer that shows the game as b/w with color bars. The game has 'Super Space Stranger' +printed on the control panel of the b/w cocktail cabinet but the manual also just says 'Space Stranger' in many places, +so there is some uncertainty about exactly what the color version is called. The title screen of the color version just +says 'Space Stranger'. Super Space Stranger is said to be made by Banpresto but that is false because Banpresto didn't +exist until 1989. Additionally there is no evidence in the game or on the control panel or marquee or PCB stating any +other manufacturer other than Yachiyo. +It gets more complicated... the Super Space Stranger service manual has text at the bottom of each page 'HOEI SANGYO CORPORATION' +At the time Hoei (founded in 1977) was doing arcade-related work for Sega but there is no evidence to suggest the +PCB was manufactured by Hoei. It is possible Hoei made the PCB for Yachiyo since they were also doing arcade work +for Sega, although exactly what work (hardware or software) is unknown. Hoei changed their name to Coreland in 1982 +and later in 1989 they became Banpresto. Bottom Board @@ -26,54 +64,49 @@ Bottom Board YD7000-1A |------------------------------------------------| - | 18.432MHz | - | M5L8224 8080 | + | 18.432MHz |----------| | + | M5L8224 | 8080 | | + | |----------| | + | 7400 7404 | | | - | 7400 7404 | + | 7474 7474 7408 7400 | | | - | 7474 7474 7408 7400 | - | | -|--| 7420 7404 7408 74XX 7442 | +|--| 7420 7404 7408 7408 7442 | | | -| 7404 74XX 74XX 74XX | +| 7404 74161 7408 7408 | |5 HSS_01 | -|0 7400 74XX 74XX 74XX | +|0 7400 74161 74157 74157 | |P | -|I 7474 74XX 74XX 74XX HSS_02 | +|I 7474 74161 74157 74157 HSS_02 | |N | -| 7402 74XX 74XX 74XX | +| 7402 74161 74157 74157 | |E HSS_03 | -|D 7408 74XX 74XX 74XX | +|D 7408 7474 7408 7408 | |G | -|E 7404 74XX 74XX 74XX HSS_04 | +|E 7404 7410 74367 74367 HSS_04 | | | -|C 74XX 74XX 74XX | +|C 74165 74174 74174 | |O HSS_05 | -|N 7408 74XX 74XX 74XX | +|N 7408 74165 74367 74367 | |N | | HSS_06 | -| 7432 4116 4116 | +| 7432 4116 4116 | |--| | - | 4116 4116 HSS_07 | - | 74XX | - | 4116 4116 | - | 7400 74XX HSS_08 | - | 4116 4116 | - | 10MHz 74XX | + | 4116 4116 HSS_07 | + | 74121 | + | 4116 4116 | + | 7400 7432 HSS_08 | + | 4116 4116 | + | 10MHz 7404 EMPTY | | DIP24_SKT | |------------------------------------------------| Notes: All IC's shown. - Some chips were black but only obfuscated with black paint so easily cleaned off with acetone ^_^ - Some IC's scratched, shown as 74XX - If you have a Space Stranger with non-scratched chips, please help to complete - the TTL listing, otherwise when a scratched chip dies it will not be possible - to repair it even if it is a common chip because it is unknown and dead. - 8080 CPU - AM8080 or M5L8080 CPU. Clock 2.048MHz (18.432/9 via M5L8224 Clock Generator IC) M5L8224 - Mitsubishi M5L8224 Clock Generator/Divider IC. Divider is fixed at divide-by-9 HSS* - 2708 EPROMs 4116 - Mitsubishi M58759S-25 16k x1-bit DRAM compatible with 4116 - DIP24_SKT - Empty DIP24 socket + EMPTY - Space for a 24 pin ROM but not populated with anything + DIP24_SKT - DIP24 socket, empty Top PCB @@ -93,11 +126,11 @@ YD7000-2B | LM3900 | |5 53200 7408 | |0 VR2 | -|P 74XX 74XX | +|P 74367 7414 | |I SW(5) LM3900 | -|N 74XX 74XX | +|N 74367 7414 | | | -|E 74XX 74XX LM3900 | +|E 74367 7414 LM3900 | |D VR3 | |G | |E LM3900 | @@ -118,30 +151,184 @@ YD7000-2B | | |----------------------------------------| Notes: All IC's shown. - Some chips were black but only obfuscated with black paint so easily cleaned off with acetone ^_^ - Some IC's scratched, shown as 74XX - If you have a Space Stranger with non-scratched chips, please help to complete - the TTL listing, otherwise when a scratched chip dies it will not be possible - to repair it even if it is a common chip because it is unknown and dead. - SN76477 - Texas Instruments Complex Sound Generator LM3900 - Quad Operational Amplifier LM380 - 2.5W Power Amplifier 1455 - MC1455 equivalent to NE555 Timer VR1-7 - Volume Pots + VR1 -UFO flying sound (generated by the SN76477 IC) + VR2 -Shoot sound + VR3 -Player explosion sound + VR4 -Invader hit sound + VR5 -Bonus extra base sound + VR6 -Invader movement sound + VR7 -UFO hit sound + VR8 - Master volume pot (50k) mounted inside the cabinet (connected to edge connector, not mounted on the PCB) SW(5) - 5-position DIP Switch marked 'SW' 53204 - Mitsubishi branded logic chip equivalent to 7404 53217 - Mitsubishi branded logic chip equivalent to 7417 53210 - Mitsubishi branded logic chip equivalent to 7410 53200 - Mitsubishi branded logic chip equivalent to 7400 + +Joiner Board (parts side shown) +------------ + +YD7000-M2 +|-----------------| |-----------------| +|* 14-WAY CONN | |* 14-WAY CONN | +| LEFT |--------------------------------| RIGHT | +| | +| |------------------------------------------------------------| | <--- Top board plugs in here +| |------------------------------------------------------------| | +| | +| |------------------------------------------------------------| | <--- Bottom board plugs in here +| |------------------------------------------------------------| | +| | +|--------------------------------------------------------------------| +Notes: + The long slots are KEL 4800-100-035 100 pin female card edge connectors with 0.156" pin spacing. + On the diagram above * denotes pin 1 of the 14 pin connectors. + Space Stranger uses this board to join the top and bottom boards together and provides a way to wire up the + controls/video/power etc to the machine via the left and right 14-way edge connectors. + The game has a table/upright mode that can be changed by connecting two jumper pads on the joiner PCB with a solder blob. + This is located at pin 40 on the top board and is conveniently made available on the back side of the joiner board + with the two solder pads. When open it sets table mode, when closed it sets upright mode. + + Pinout of edge connector + ------------------------ + + LEFT PARTS LEFT SOLDER RIGHT PARTS RIGHT SOLDER + ------------------------- --------------------------- + GND 1 A GND GND 1 A GND + GND 2 B GND GND 2 B GND + NC 3 C COIN COUNTER NC 3 C VR8 MASTER VOLUME POT RIGHT PIN \ (left pin of volume pot unconnected) + NC 4 D NC NC 4 D VR8 MASTER VOLUME POT MIDDLE PIN / + 1P START 5 E I/O CHECK 5V 5 E 5V + 2P START 6 F COIN 5V 6 F 5V + UNKNOWN 7 G SERVICE COIN *2P SHOOT 7 G NC + 1P RIGHT 8 H 2P RIGHT 12V 8 H 12V + 1P LEFT 9 I 2P LEFT 12V 9 I 12V + 1P SHOOT 10 J 2P SHOOT -5V 10 J -5V + SPKR + 11 K SPKR - -5V 11 K -5V + NC 12 L NC *2P RIGHT 12 L *2P LEFT A (* - 2P controls for table) + SYNC 13 M VIDEO 12V 13 M 12V + GND 14 N GND 12V 14 N 12V + +Note: NC means No Connection. +To access the I/O Check Mode, ground R17 (side near edge connector) on the top board or ground pin E +of the left edge connector then power up the game. +The I/O test screen shows 3x 8-bit memory locations with bits that change when controls and settings +are adjusted. Note if sounds are heard, check the RAM/ROM test table above. +For the purpose of describing each bit, they will be called Byte A, B & C. +With all DIP switches off and controls at default positions, the 8-bit memory locations look like +this in the default state: + 1 1 1 1 1 0 0 0 <-- Byte A + 0 0 0 1 0 0 0 0 <-- Byte B + % 0 1 1 1 1 1 1 <-- Byte C +0 means open, 1 means closed. & denotes moving fast between 0 and 1 +Refer to the table below for the meaning of each bit. +Bits described on each line are the position(s) denoted by the X and +as read from the screen left to right. + +Byte A +------ +X X X X X - - - : Dip Switches 1-5. 1 when DSW is off, 0 when DSW is on +- - - - - X - - : Fire Player 2 (Note when pressed, the characters on screen are flipped vertically. This is normal) +- - - - - - X - : Left Player 2 +- - - - - - - X : Right Player 2 + +Byte B +------ +X - - - - - - - : Coin +- X - - - - - - : 2 Player Start +- - X - - - - - : 1 Player Start +- - - X - - - - : I/O Check (always 1 when in the I/O check mode) +- - - - X - - - : Table/Upright setting. 0 for table, 1 for upright +- - - - - X - - : Fire Player 1 +- - - - - - X - : Left Player 1 +- - - - - - - X : Right Player 1 + +Byte C +------ +X - - - - - - - : Interrupt. This is always rapidly moving between 0 and 1 +- X - - - - - - : Rapid Fire (only used on color version) +- - X X X X X X : Always 1 + + +Color version Space Stranger 2 / Mark Stranger 2 etc +---------------------------------------------------- +As well as a different PCB number (YD-7700), the color version PCB has one 64kbit mask ROM and one 2708 EPROM +for the code and an extra 2708 EPROM near the 10MHz crystal for color data and a few extra logic chips, so it +is easy to spot the color version just by looking at the bottom PCB. The top board is identical to the older +b/w version Space Stranger top board and sounds are also identical between versions. + +Bottom Board +------------ + +YD7700-1G + |------------------------------------------------| + | 18.432MHz |----------| | + | 7408 M5L8224 | 8080 | | + | |----------| | + | 7408 7408 7400 7404 | + | | + | 7474 7474 7408 7400 | + | | +|--| 7420 7404 7408 7408 7442 | +| | +| 7404 74161 7408 7408 | +|5 DIP24 | +|0 7400 74161 74157 74157 | +|P | +|I 7474 74161 74157 74157 DIP24 | +|N | +| 7402 74161 74157 74157 | +|E DIP24 | +|D 7408 7474 7408 7408 | +|G | +|E 7404 7410 74367 74367 DIP24 | +| | +|C 74165 74174 74174 | +|O DIP24 | +|N 7417 7408 74165 74367 74367 | +|N | +| DIP24 | +| 7402 7432 7420 4116 4116 | +|--| | + | 4116 4116 DIP24 | + | 7400 74121 | + | 4116 4116 | + | 74174 7400 7432 DIP24 | + | 4116 4116 8KMASK | + | 10MHz 7404 2708 | + | 2708 74367 74367 | + |------------------------------------------------| +Notes: All IC's shown. + 8080 CPU - AM8080 or M5L8080 CPU. Clock 2.048MHz (18.432/9 via M5L8224 Clock Generator IC) + M5L8224 - Mitsubishi M5L8224 Clock Generator/Divider IC. Divider is fixed at divide-by-9 + 2708 - 2708 EPROMs + 4116 - Mitsubishi M58759S-25 16k x1-bit DRAM compatible with 4116 + DIP24 - DIP24 socket, empty. Note early revisions used 2708 EPROMs at these locations, and no 8K mask ROM + + +PCB video reference for Space Stranger 2: https://www.youtube.com/watch?v=mn8hCd_uqcI + +TODO: + * Using sound samples from Space Invaders (real PCB sounds virtually identical anwyay). Get schematics and use netlist instead. + * Fix attract mode and I/O test random sound (should be silent) + * Screen should flash red when losing a life in Space Stranger 2 (see video reference) + ********************************************************/ #include "emu.h" #include "cpu/i8085/i8085.h" +#include "sound/samples.h" +#include "sound/sn76477.h" #include "emupal.h" #include "screen.h" +#include "speaker.h" #include "sstrangr.lh" @@ -152,6 +339,8 @@ public: sstrangr_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), + m_samples(*this, "samples"), + m_sn(*this, "snsnd"), m_palette(*this, "palette"), m_ram(*this, "ram") { } @@ -164,12 +353,17 @@ protected: private: required_device m_maincpu; + required_device m_samples; + required_device m_sn; optional_device m_palette; required_shared_ptr m_ram; uint8_t m_flip_screen; + uint8_t m_last_sound1; + uint8_t m_last_sound2; - void port_w(uint8_t data); + void port44_w(uint8_t data); + void port42_w(uint8_t data); uint32_t screen_update_sstrangr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_sstrngr2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); @@ -187,22 +381,22 @@ private: void sstrangr_state::video_start() { + m_last_sound1 = m_last_sound2 = 0xff; + save_item(NAME(m_flip_screen)); + save_item(NAME(m_last_sound1)); + save_item(NAME(m_last_sound2)); } uint32_t sstrangr_state::screen_update_sstrangr(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - offs_t offs; - - for (offs = 0; offs < 0x2000; offs++) + for (offs_t offs = 0; offs < 0x2000; offs++) { - int i; - uint8_t x = offs << 3; int y = offs >> 5; uint8_t data = m_ram[offs]; - for (i = 0; i < 8; i++) + for (int i = 0; i < 8; i++) { pen_t pen; @@ -265,12 +459,36 @@ uint32_t sstrangr_state::screen_update_sstrngr2(screen_device &screen, bitmap_rg } -void sstrangr_state::port_w(uint8_t data) +void sstrangr_state::port44_w(uint8_t data) { + uint8_t rising_bits = data & ~m_last_sound2; + if (BIT(rising_bits, 0)) m_samples->start(4, 3); // fleet move 1 + if (BIT(rising_bits, 1)) m_samples->start(4, 4); // fleet move 2 + if (BIT(rising_bits, 2)) m_samples->start(4, 5); // fleet move 3 + if (BIT(rising_bits, 3)) m_samples->start(4, 6); // fleet move 4 + if (BIT(rising_bits, 4)) m_samples->start(3, 7); // Hit Saucer + + m_sn->enable_w(!BIT(data, 0)); // Saucer Sound + + m_last_sound2 = data; + m_flip_screen = data & 0x20; } +void sstrangr_state::port42_w(uint8_t data) +{ + uint8_t rising_bits = data & ~m_last_sound1; + if (BIT(rising_bits, 0)) logerror("42 0 data: %02x rb: %02x\n", data, rising_bits); + if (BIT(rising_bits, 1)) m_samples->start(0, 0); // Shoot + if (BIT(rising_bits, 2)) m_samples->start(1, 1); // Death + if (BIT(rising_bits, 3)) m_samples->start(2, 2); // Hit + if (BIT(rising_bits, 4)) m_samples->start(5, 8); // Bonus + //if (BIT(rising_bits, 5)) logerror("42 bit 5"); // 1x after starting a game/life + m_sn->enable_w(!BIT(data, 0)); // Saucer Sound + + m_last_sound1 = data; +} void sstrangr_state::sstrangr_map(address_map &map) { @@ -284,12 +502,11 @@ void sstrangr_state::sstrangr_map(address_map &map) void sstrangr_state::sstrangr_io_map(address_map &map) { map(0x41, 0x41).portr("DSW"); - map(0x42, 0x42).portr("INPUTS"); - map(0x44, 0x44).portr("EXT").w(FUNC(sstrangr_state::port_w)); + map(0x42, 0x42).portr("INPUTS").w(FUNC(sstrangr_state::port42_w)); + map(0x44, 0x44).portr("EXT").w(FUNC(sstrangr_state::port44_w)); } - static INPUT_PORTS_START( sstrangr ) PORT_START("DSW") // 1 x 5-dip bank PORT_DIPNAME( 0x03, 0x01, "Extra Play" ) PORT_DIPLOCATION("SW:1,2") @@ -303,45 +520,82 @@ static INPUT_PORTS_START( sstrangr ) PORT_DIPNAME( 0x08, 0x08, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW:4") PORT_DIPSETTING( 0x08, "1000" ) PORT_DIPSETTING( 0x00, "2000" ) - PORT_DIPUNKNOWN_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW:5" ) /* Must be ACTIVE_LOW for game to boot */ + PORT_DIPUNKNOWN_DIPLOC( 0x10, IP_ACTIVE_LOW, "SW:5" ) // Must be ACTIVE_LOW (OFF) for game to boot PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) PORT_START("INPUTS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("EDGE:1") // This is probably an edge connector pin - PORT_DIPSETTING( 0x10, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) // This is an edge connector pin for testing ROM/RAM and I/O ports + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("EDGE:1") // This is an edge connector pin that is + PORT_DIPSETTING( 0x10, DEF_STR( Upright ) ) // brought out to two solder pads on the + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) // Joiner PCB PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY - PORT_START("EXT") /* External switches */ + PORT_START("EXT") // External switches PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") - PORT_BIT( 0xfe, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END +static const char *const sstrangr_sample_names[] = +{ + "*invaders", + "1", // shot/missile + "2", // base hit/explosion + "3", // invader hit + "4", // fleet move 1 + "5", // fleet move 2 + "6", // fleet move 3 + "7", // fleet move 4 + "8", // UFO/saucer hit + "9", // bonus base + nullptr +}; void sstrangr_state::sstrangr(machine_config &config) { - /* basic machine hardware */ + // basic machine hardware I8080A(config, m_maincpu, XTAL(18'432'000)/9); // M5L8080AP, measured 2047840 Hz m_maincpu->set_addrmap(AS_PROGRAM, &sstrangr_state::sstrangr_map); m_maincpu->set_addrmap(AS_IO, &sstrangr_state::sstrangr_io_map); m_maincpu->set_periodic_int(FUNC(sstrangr_state::irq0_line_hold), attotime::from_hz(2*60)); - /* video hardware */ + // video hardware screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); - screen.set_size(32*8, 262); /* vert size is a guess, taken from mw8080bw */ + screen.set_size(32*8, 262); // vert size is a guess, taken from mw8080bw screen.set_visarea(0*8, 32*8-1, 4*8, 32*8-1); screen.set_refresh_hz(60); screen.set_screen_update(FUNC(sstrangr_state::screen_update_sstrangr)); - /* sound hardware */ + // sound hardware + SPEAKER(config, "mono").front_center(); + + SN76477(config, m_sn); + m_sn->set_noise_params(0, 0, 0); + m_sn->set_decay_res(0); + m_sn->set_attack_params(0, RES_K(100)); + m_sn->set_amp_res(RES_K(56)); + m_sn->set_feedback_res(RES_K(10)); + m_sn->set_vco_params(0, CAP_U(0.1), RES_K(8.2)); + m_sn->set_pitch_voltage(5.0); + m_sn->set_slf_params(CAP_U(1.0), RES_K(120)); + m_sn->set_oneshot_params(0, 0); + m_sn->set_vco_mode(1); + m_sn->set_mixer_params(0, 0, 0); + m_sn->set_envelope_params(1, 0); + m_sn->set_enable(1); + m_sn->add_route(ALL_OUTPUTS, "mono", 0.5); + + SAMPLES(config, m_samples); + m_samples->set_channels(6); + m_samples->set_samples_names(sstrangr_sample_names); + m_samples->add_route(ALL_OUTPUTS, "mono", 1.0); } @@ -352,7 +606,10 @@ void sstrangr_state::sstrangr(machine_config &config) /* */ /*******************************************************/ -/* Color version of Space Stranger, board has Stranger 2 written on it */ +// Color version of Space Stranger, board has Stranger 2 written on it. +// Clarification required for the above comment. +// Stranger 2? Really? The number on the PCB is YD7700-1G with no other markings present. +// The game is actually known as Super Space Stranger according to the manual. static INPUT_PORTS_START( sstrngr2 ) PORT_START("DSW") @@ -375,23 +632,23 @@ static INPUT_PORTS_START( sstrngr2 ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(2) PORT_START("INPUTS") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("EDGE:1") // This is probably an edge connector pin - PORT_DIPSETTING( 0x10, DEF_STR( Upright ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) + PORT_SERVICE( 0x08, IP_ACTIVE_HIGH ) // This is an edge connector pin for testing ROM/RAM and I/O ports + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("EDGE:1") // This is an edge connector pin that is + PORT_DIPSETTING( 0x10, DEF_STR( Upright ) ) // brought out to two solder pads on the + PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) // Joiner PCB PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY PORT_PLAYER(1) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_2WAY PORT_PLAYER(1) PORT_START("EXT") /* External switches */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") - PORT_DIPNAME( 0x02, 0x00, "Player's Bullet Speed (Cheat)" ) PORT_DIPLOCATION("EXT:1") // This is probably an edge connector pin + PORT_DIPNAME( 0x02, 0x00, "Player's Bullet Speed" ) PORT_DIPLOCATION("EDGE:2") // This is an edge connector pin listed in the manual as 'Fast Shoot' PORT_DIPSETTING( 0x00, "Slow" ) PORT_DIPSETTING( 0x02, "Fast" ) - PORT_BIT( 0xfc, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNKNOWN ) INPUT_PORTS_END @@ -399,7 +656,7 @@ void sstrangr_state::sstrngr2(machine_config &config) { sstrangr(config); - /* video hardware */ + // video hardware subdevice("screen")->set_screen_update(FUNC(sstrangr_state::screen_update_sstrngr2)); PALETTE(config, m_palette, palette_device::RBG_3BIT); @@ -424,10 +681,10 @@ ROM_START( sstrangr2 ) ROM_LOAD( "4764.09", 0x0000, 0x2000, CRC(d88f86cc) SHA1(9f284ee50caf3c64bd04a79a798de620348881bc) ) ROM_LOAD( "2708.10", 0x6000, 0x0400, CRC(eba304c1) SHA1(3fa6fbb29fa46c146283f69a712bfc51cbb2a43c) ) - ROM_REGION( 0x0400, "proms", 0 ) /* color maps player 1/player 2 */ + ROM_REGION( 0x0400, "proms", 0 ) // color maps player 1/player 2 ROM_LOAD( "2708.15", 0x0000, 0x0400, CRC(c176a89d) SHA1(955dd540dc3787091c3f34ae122a13e6b7523414) ) ROM_END -GAMEL( 1978, sstrangr, 0, sstrangr, sstrangr, sstrangr_state, empty_init, ROT270, "Yachiyo Electronics, Ltd.", "Space Stranger", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE, layout_sstrangr ) -GAME( 1979, sstrangr2, sstrangr, sstrngr2, sstrngr2, sstrangr_state, empty_init, ROT270, "Yachiyo Electronics, Ltd.", "Space Stranger 2", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) +GAMEL( 1978, sstrangr, 0, sstrangr, sstrangr, sstrangr_state, empty_init, ROT270, "Yachiyo Electronics, Ltd.", "Space Stranger", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE, layout_sstrangr ) +GAME( 1979, sstrangr2, sstrangr, sstrngr2, sstrngr2, sstrangr_state, empty_init, ROT270, "Yachiyo Electronics, Ltd.", "Space Stranger 2", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/layout/sstrangr.lay b/src/mame/layout/sstrangr.lay index 2e1cdd9e71e..a938fa4d150 100644 --- a/src/mame/layout/sstrangr.lay +++ b/src/mame/layout/sstrangr.lay @@ -4,32 +4,36 @@ license:CC0 --> - - - - - + - + - + - + - + + + + + + + + +