mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
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]
This commit is contained in:
parent
15c62fad78
commit
2a9ef90e85
@ -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
|
||||
|
@ -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 )
|
||||
|
@ -4,32 +4,36 @@ 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="232" right="224" bottom="256" />
|
||||
<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="231" right="224" bottom="256" />
|
||||
<color red="0.113" green="0.672" blue="0.980" />
|
||||
</rect>
|
||||
</element>
|
||||
|
Loading…
Reference in New Issue
Block a user