summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2020-03-28 09:29:34 +0100
committer Ivan Vangelista <mesgnet@yahoo.it>2020-03-28 09:29:34 +0100
commit2a9ef90e85824b0fa5c9deb21d090436133e6b0e (patch)
tree94babf60e4a4af013b1c3407229b1a24f487375c
parent15c62fad78dc783b0687055dcfac1f8792c5a120 (diff)
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]
-rw-r--r--src/mame/drivers/crystal.cpp16
-rw-r--r--src/mame/drivers/sstrangr.cpp413
-rw-r--r--src/mame/layout/sstrangr.lay22
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<cpu_device> m_maincpu;
+ required_device<samples_device> m_samples;
+ required_device<sn76477_device> m_sn;
optional_device<palette_device> m_palette;
required_shared_ptr<uint8_t> 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_device>("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
@@ -5,31 +5,35 @@ license:CC0
<mamelayout version="2">
<element name="overlay upright">
<rect>
- <bounds left="0" top="0" right="224" bottom="256" />
- <color red="1" green="1" blue="1" />
- </rect>
- <rect>
<bounds left="0" top="0" right="67" bottom="32" />
<color red="0.113" green="0.672" blue="0.980" />
</rect>
<rect>
- <bounds left="68" top="0" right="148" bottom="32" />
+ <bounds left="67" top="0" right="148" bottom="32" />
<color red="0.039" green="0.922" blue="0.625" />
</rect>
<rect>
- <bounds left="149" top="0" right="224" bottom="32" />
+ <bounds left="148" top="0" right="224" bottom="32" />
<color red="0.113" green="0.672" blue="0.980" />
</rect>
<rect>
- <bounds left="0" top="32" right="224" bottom="63" />
+ <bounds left="0" top="32" right="224" bottom="64" />
<color red="0.832" green="0.199" blue="0.375" />
</rect>
<rect>
- <bounds left="0" top="64" right="224" bottom="231" />
+ <bounds left="0" top="64" right="224" bottom="186" />
+ <color red="1" green="1" blue="0.322" />
+ </rect>
+ <rect>
+ <bounds left="0" top="186" right="224" bottom="215" />
+ <color red="1" green="0.647" blue="0" />
+ </rect>
+ <rect>
+ <bounds left="0" top="215" right="224" bottom="231" />
<color red="1" green="1" blue="0.322" />
</rect>
<rect>
- <bounds left="0" top="232" right="224" bottom="256" />
+ <bounds left="0" top="231" right="224" bottom="256" />
<color red="0.113" green="0.672" blue="0.980" />
</rect>
</element>