zac_1: added some sound

This commit is contained in:
Robbbert 2021-10-09 14:54:03 +11:00
parent 6346440828
commit 467a4e6d3e
2 changed files with 598 additions and 186 deletions

View File

@ -2,58 +2,102 @@
// copyright-holders:Robbbert
/*************************************************************************************
PINBALL
Zaccaria Generation 1
PINBALL
Zaccaria Generation 1
Made working in Sept 2012 [Robbbert]
Made working in Sept 2012 [Robbbert]
These games allow for up to 4 players at the same time.
Setup is via a menu - there are no dipswitches.
If you see 6 and 9 flashing at start- this indicates the battery is flat,
and a full setup is required before it can be used.
At start, the highscore will be set to a random value. Beating this score will
award a bonus. Tilting will cause the high score to advance by 100,000.
If at any time you 'clock' the machine (ie exceed 999,990), the last digit will
flash, indicating you have a million.
Sound - the output board is fitted with 4 oscillators which can be switched on
and off independently. Some games come with a NE555 and SN76477 with switchable
sounds (achieved with 21 switching diodes and 8 data bits).
Setup is via a menu - there are no dipswitches.
Each game has its own map of inputs and outputs, although fortunately some
of them happen to be fairly common. For example the outhole is always on the
same output line, while the knocker is the same except for 'strapids'.
If you see 6 and 9 flashing at start- this indicates the battery is flat,
and a full setup is required before it can be used.
At start, the highscore will be set to a random value. Beating this score will
award a bonus. Tilting will cause the high score to advance by 100,000.
If at any time you 'clock' the machine (ie exceed 999,990), the last digit will
flash, indicating you have a million.
The ball number is how many balls are left. 1 = last ball.
Sound - there's 5 sound boards
1. 4 audio oscillators which can be switched on and off independently. It's shown
on the schematic of all machines, but only works for (hod, wsports, and futurwld).
2. 8035 CPU and a 1408 DAC. (Earth Wind Fire, Space Shuttle)
This board is quite similar to that in quasar. It's possible that the input lines
need swapping around as in quasar. Earth Wind Fire seems fine as is, but Space Shuttle
may need a swap.
3. NE555 and SN76477 with switchable sounds (achieved with 21 switching diodes
and 8 data bits). (Fire Mountain, HotWheels, Strapids, Stargod)
4. Stargoda uses something else entirely. No schematics.
5. Locomotion uses the 8035 CPU, and a 76477 and NE555 on a unique board.
Each game has its own map of inputs and outputs, although fortunately some
of them happen to be fairly common. For example the outhole is always on the
same output line, while the knocker is the same except for 'strapids'.
Status:
- Games are working, incomplete sound.
ToDo:
- Outputs
- Sound
- Monotone oscillator frequencies are guesses. We assume that only one tone at a time is used.
- NE555 for hotwheel,strapids,stargod,stargodb,firemntn.
- Sound for stargoda
- No machines sound like the real ones
- Inbuilt Printer
**************************************************************************************/
#include "emu.h"
#include "machine/genpin.h"
#include "cpu/s2650/s2650.h"
#include "cpu/mcs48/mcs48.h"
#include "machine/clock.h"
#include "machine/gen_latch.h"
#include "machine/genpin.h"
#include "machine/timer.h"
#include "sound/dac.h"
#include "sound/mm5837.h"
#include "sound/sn76477.h"
#include "sound/spkrdev.h"
#include "speaker.h"
#include "zac_1.lh"
namespace {
class zac_1_state : public genpin_class
{
public:
zac_1_state(const machine_config &mconfig, device_type type, const char *tag)
: genpin_class(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_speaker(*this, "speaker")
, m_p_ram(*this, "ram")
, m_monotone(*this, "monotone")
, m_astable(*this, "astable")
, m_dac(*this, "dac")
, m_soundlatch(*this, "soundlatch")
, m_sn(*this, "sn")
, m_digits(*this, "digit%u", 0U)
{ }
, m_io_outputs(*this, "out%u", 0U)
{ }
void locomotp(machine_config &config);
void zac_1(machine_config &config);
void config_base(machine_config &config);
void zac1(machine_config &config);
void zac2(machine_config &config);
void zac3(machine_config &config);
void zac4(machine_config &config);
private:
uint8_t ctrl_r();
void ctrl_w(uint8_t data);
DECLARE_READ_LINE_MEMBER(serial_r);
DECLARE_WRITE_LINE_MEMBER(serial_w);
DECLARE_WRITE_LINE_MEMBER(noise_w);
DECLARE_WRITE_LINE_MEMBER(clock_w);
uint8_t reset_int_r();
void reset_int_w(uint8_t data);
TIMER_DEVICE_CALLBACK_MEMBER(zac_1_inttimer);
@ -65,15 +109,32 @@ private:
void zac_1_data(address_map &map);
void zac_1_io(address_map &map);
void zac_1_map(address_map &map);
void audio_data(address_map &map);
void audio_io(address_map &map);
uint8_t m_t_c;
uint8_t m_out_offs;
uint8_t m_input_line;
uint8_t m_t_c = 0;
uint8_t m_out_offs = 0;
uint8_t m_input_line = 0;
u8 m_sn_store = 0xff;
bool m_clock_state = 0;
bool m_noise_state = 0;
u8 m_40193 = 0;
virtual void machine_reset() override;
virtual void machine_start() override { m_digits.resolve(); }
virtual void machine_start() override;
void audio_command_w(uint8_t data);
uint8_t audio_command_r();
DECLARE_READ_LINE_MEMBER(audio_t1_r);
required_device<s2650_device> m_maincpu;
optional_device<i8035_device> m_audiocpu;
optional_device<speaker_sound_device> m_speaker;
required_shared_ptr<uint8_t> m_p_ram;
optional_device<clock_device> m_monotone;
optional_device<clock_device> m_astable;
optional_device<dac_byte_interface> m_dac;
optional_device<generic_latch_8_device> m_soundlatch;
optional_device<sn76477_device> m_sn;
output_finder<78> m_digits;
output_finder<192> m_io_outputs;
};
@ -97,88 +158,274 @@ void zac_1_state::zac_1_data(address_map &map)
map(S2650_CTRL_PORT, S2650_CTRL_PORT).rw(FUNC(zac_1_state::ctrl_r), FUNC(zac_1_state::ctrl_w));
}
void zac_1_state::audio_data(address_map &map)
{
map(0x0000, 0x07ff).rom(); // 2716
}
void zac_1_state::audio_io(address_map &map)
{
map(0x00, 0x7f).ram(); // 6810
map(0x80, 0xff).r(FUNC(zac_1_state::audio_command_r)); // 40097
}
static INPUT_PORTS_START( zac_1 )
PORT_START("TEST")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Test") PORT_CODE(KEYCODE_0) // doesn't seem to do anything
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Test") PORT_CODE(KEYCODE_3_PAD) // doesn't seem to do anything
PORT_START("ROW0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SERVICE ) // this performs tests
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Slam")
PORT_START("DSW2")
PORT_DIPNAME( 0x10, 0x10, "Sound Test" )
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("X0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Test") PORT_CODE(KEYCODE_0_PAD) // this performs tests
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Tilt") PORT_CODE(KEYCODE_9)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Slam") PORT_CODE(KEYCODE_0)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Printer")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Printer")
PORT_START("ROW1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RAM Reset")
PORT_START("X1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RAM Reset") PORT_CODE(KEYCODE_1_PAD)
PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Burn Test")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) // Another tilt
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Burn Test") PORT_CODE(KEYCODE_2_PAD)
// from here there are variations per game
PORT_START("ROW2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Outhole") PORT_CODE(KEYCODE_X)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Flap") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Flap") PORT_CODE(KEYCODE_W)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bottom Inside RH Canal") PORT_CODE(KEYCODE_E)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bottom Outside RH Canal") PORT_CODE(KEYCODE_R)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bottom Outside LH Canal") PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bottom Inside LH Canal") PORT_CODE(KEYCODE_U)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Top Hole") PORT_CODE(KEYCODE_I)
PORT_START("X2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Outhole") PORT_CODE(KEYCODE_X)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Flap") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Flap") PORT_CODE(KEYCODE_B)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Bottom Inside RH Canal") PORT_CODE(KEYCODE_C)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Bottom Outside RH Canal") PORT_CODE(KEYCODE_D)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Bottom Outside LH Canal") PORT_CODE(KEYCODE_E)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Bottom Inside LH Canal") PORT_CODE(KEYCODE_F)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Top Hole") PORT_CODE(KEYCODE_G)
PORT_START("ROW3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Bumper") PORT_CODE(KEYCODE_O)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Top Canal") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Top Centre Canal") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Top Canal") PORT_CODE(KEYCODE_D)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Top Fixed Target") PORT_CODE(KEYCODE_F)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Top Fixed Target") PORT_CODE(KEYCODE_G)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Bumper") PORT_CODE(KEYCODE_H)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Top Hole") PORT_CODE(KEYCODE_J)
PORT_START("X3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bumper") PORT_CODE(KEYCODE_H)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Top Canal") PORT_CODE(KEYCODE_I)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Top Centre Canal") PORT_CODE(KEYCODE_J)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Top Canal") PORT_CODE(KEYCODE_K)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Top Fixed Target") PORT_CODE(KEYCODE_L)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Top Fixed Target") PORT_CODE(KEYCODE_M)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bumper") PORT_CODE(KEYCODE_N)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Top Hole") PORT_CODE(KEYCODE_O)
PORT_START("ROW4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bottom Bumper") PORT_CODE(KEYCODE_K)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Top Contact") PORT_CODE(KEYCODE_L)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Top Contact") PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Spinning Target") PORT_CODE(KEYCODE_QUOTE)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Lateral Outside Contacts") PORT_CODE(KEYCODE_C)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Spinning Target") PORT_CODE(KEYCODE_V)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Bank Contacts") PORT_CODE(KEYCODE_B)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Moving Target") PORT_CODE(KEYCODE_N)
PORT_START("X4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Bottom Bumper") PORT_CODE(KEYCODE_P)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Top Contact") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Top Contact") PORT_CODE(KEYCODE_R)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Spinning Target") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Lateral Outside Contacts") PORT_CODE(KEYCODE_T)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Spinning Target") PORT_CODE(KEYCODE_U)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Bank Contacts") PORT_CODE(KEYCODE_V)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Moving Target") PORT_CODE(KEYCODE_W)
PORT_START("ROW5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Bank Target 1") PORT_CODE(KEYCODE_M)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Bank Target 2") PORT_CODE(KEYCODE_MINUS)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Bank Target 3") PORT_CODE(KEYCODE_EQUALS)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("LH Bank Target 4") PORT_CODE(KEYCODE_BACKSPACE)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Bank Target 1") PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Bank Target 2") PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Bank Target 3") PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("RH Bank Target 4") PORT_CODE(KEYCODE_COLON)
PORT_START("X5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 1") PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 2") PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 3") PORT_CODE(KEYCODE_EQUALS)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 4") PORT_CODE(KEYCODE_BACKSPACE)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 1") PORT_CODE(KEYCODE_OPENBRACE)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 2") PORT_CODE(KEYCODE_CLOSEBRACE)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 3") PORT_CODE(KEYCODE_BACKSLASH)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 4") PORT_CODE(KEYCODE_COLON)
INPUT_PORTS_END
void zac_1_state::audio_command_w(uint8_t data)
{
if (m_soundlatch)
m_soundlatch->write(data);
if (m_sn)
{
if (m_p_ram[0x86]==1 || m_p_ram[0xb2]==1) // check for game over or tilt
{
m_sn->enable_w(1);
return;
}
// Locomotion
if (m_astable)
{
switch (data)
{
case 0:
m_astable->set_unscaled_clock(0);
m_clock_state = 0;
m_40193 = 0;
break;
case 1:
m_astable->set_unscaled_clock(0);
m_clock_state = 0;
if (m_40193 < 7)
m_40193++;
break;
case 2:
m_astable->set_unscaled_clock(0);
m_clock_state = 0;
if (m_40193 > 1)
m_40193--;
break;
case 3:
m_astable->set_unscaled_clock(1277);
break;
default:
break;
}
m_sn->envelope_1_w(0);
m_sn->envelope_2_w(1);
m_sn->mixer_b_w(0);
m_sn->mixer_c_w(1);
switch (m_40193)
{
case 0:
m_sn->envelope_1_w(1);
m_sn->envelope_2_w(0);
m_sn->mixer_b_w(1);
m_sn->mixer_c_w(0);
break;
case 1:
m_sn->slf_res_w(RES_K(4700));
break;
case 2:
m_sn->slf_res_w(RES_K(2000));
break;
case 3:
m_sn->slf_res_w(RES_K(820));
break;
case 4:
m_sn->slf_res_w(RES_K(680));
break;
case 5:
m_sn->slf_res_w(RES_K(560));
break;
case 6:
m_sn->slf_res_w(RES_K(470));
break;
case 7:
m_sn->slf_res_w(RES_K(330));
break;
default:
break;
}
m_sn->enable_w(0);
}
else
{
// Hotwheels, Stargod, Strapids, Firemntn
if (data == m_sn_store)
return;
m_sn_store = data;
if (!BIT(data, 0))
m_sn->enable_w(1);
m_sn->vco_w(1);
m_sn->mixer_b_w(0);
m_sn->decay_res_w(RES_K(1500));
m_sn->vco_res_w(RES_K(100));
m_sn->slf_res_w(RES_M(1));
m_sn->one_shot_res_w(RES_K(1500));
// These extra resistors are in parallel with the above ones, the resultant value is used.
switch (data >> 1)
{
case 0:
m_sn->decay_res_w(RES_K(468)); // D22
m_sn->one_shot_res_w(9933); // D7
break;
case 1:
m_sn->decay_res_w(RES_K(4.7)); // D17
m_sn->vco_res_w(31972); // D11
m_sn->one_shot_res_w(RES_K(136)); // D4
break;
case 2:
m_sn->decay_res_w(RES_K(468)); // D23
m_sn->vco_res_w(24812); // D13
m_sn->one_shot_res_w(9933); // D6
break;
case 3:
m_sn->decay_res_w(RES_K(468)); // D21
m_sn->vco_res_w(31972); // D12
m_sn->one_shot_res_w(9933); // D8
break;
case 4:
m_sn->vco_w(0); // D24 (and also enable NE555)
m_sn->decay_res_w(RES_K(27)); // D18
m_sn->vco_res_w(4489); // D16
break;
case 5:
m_sn->vco_w(0); // D25 (and also enable NE555)
m_sn->decay_res_w(RES_K(27)); // D20
m_sn->vco_res_w(4489); // D15
m_sn->one_shot_res_w(9933); // D5
break;
case 6:
m_sn->mixer_b_w(1);
m_sn->one_shot_res_w(RES_K(358)); // D3
break;
case 7:
m_sn->decay_res_w(RES_K(192)); // D19
m_sn->vco_res_w(9090); // D14
m_sn->slf_res_w(31945); // D10
m_sn->one_shot_res_w(93750); // D9
break;
}
if (BIT(data, 0))
m_sn->enable_w(0);
}
}
}
// Locomotion: The noise and tone represent a steam whistle
WRITE_LINE_MEMBER( zac_1_state::noise_w )
{
m_noise_state = state;
m_speaker->level_w((m_clock_state && m_noise_state) ? 1 : 0);
}
WRITE_LINE_MEMBER( zac_1_state::clock_w )
{
m_clock_state = state;
m_speaker->level_w((m_clock_state && m_noise_state) ? 1 : 0);
}
uint8_t zac_1_state::audio_command_r()
{
return m_soundlatch->read() | (ioport("DSW2")->read() & 0x30);
}
READ_LINE_MEMBER(zac_1_state::audio_t1_r)
{
return (m_soundlatch->read() == 0);
}
uint8_t zac_1_state::ctrl_r()
{
// reads inputs
if (m_input_line == 0xfe)
return ioport("ROW0")->read();
return ioport("X0")->read();
else
if (m_input_line == 0xfd)
return ioport("ROW1")->read();
return ioport("X1")->read();
else
if (m_input_line == 0xfb)
return ioport("ROW2")->read();
return ioport("X2")->read();
else
if (m_input_line == 0xf7)
return ioport("ROW3")->read();
return ioport("X3")->read();
else
if (m_input_line == 0xef)
return ioport("ROW4")->read();
return ioport("X4")->read();
else
if (m_input_line == 0xdf)
return ioport("ROW5")->read();
return ioport("X5")->read();
else
return 0xff;
}
@ -207,7 +454,14 @@ WRITE_LINE_MEMBER( zac_1_state::serial_w )
void zac_1_state::machine_reset()
{
m_t_c = 0;
// init system if invalid (from pinmame)
m_out_offs = 0;
m_input_line = 0;
m_sn_store = 0xff;
m_clock_state = 0;
m_noise_state = 0;
m_40193 = 0;
// init system if invalid
if (m_p_ram[0xf7] == 5 || m_p_ram[0xf8] == 0x0a)
{}
else
@ -220,6 +474,20 @@ void zac_1_state::machine_reset()
}
}
void zac_1_state::machine_start()
{
m_digits.resolve();
m_io_outputs.resolve();
save_item(NAME(m_t_c));
save_item(NAME(m_out_offs));
save_item(NAME(m_input_line));
save_item(NAME(m_sn_store));
save_item(NAME(m_clock_state));
save_item(NAME(m_noise_state));
save_item(NAME(m_40193));
}
TIMER_DEVICE_CALLBACK_MEMBER(zac_1_state::zac_1_inttimer)
{
if (m_t_c > 0x40)
@ -235,28 +503,76 @@ TIMER_DEVICE_CALLBACK_MEMBER(zac_1_state::zac_1_outtimer)
{
static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
m_out_offs++;
if (m_out_offs > 0xbf)
m_out_offs = 0;
u8 data = m_p_ram[m_out_offs] & 15;
m_io_outputs[m_out_offs] = data;
if (m_out_offs < 0x40)
// display
if (m_out_offs < 0x2e)
{
uint8_t display = (m_out_offs >> 3) & 7;
uint8_t digit = m_out_offs & 7;
m_digits[display * 10 + digit] = patterns[m_p_ram[m_out_offs]&15];
m_digits[display * 10 + digit] = patterns[data];
if (m_out_offs == 0x16)
audio_command_w(data);
}
else
if (m_out_offs == 0x4a) // outhole
// solenoids
if (m_out_offs >= 0x40 && m_out_offs <= 0x53)
{
if (BIT(m_p_ram[m_out_offs], 0))
m_samples->start(0, 5);
if (m_out_offs == 0x4a) // outhole
{
if (BIT(data, 0))
m_samples->start(0, 5);
}
else
if (m_out_offs == 0x4b) // knocker (strapids uses 0x43)
{
if (BIT(data, 0))
m_samples->start(0, 6);
}
}
else
if (m_out_offs == 0x4b) // knocker (not strapids)
// basic audio (always fitted but not always used)
if (m_out_offs >= 0x54 && m_out_offs <= 0x57 && m_monotone)
{
if (BIT(m_p_ram[m_out_offs], 0))
m_samples->start(0, 6);
switch (m_out_offs - 0x54)
{
case 0:
if (data)
{
m_monotone->set_unscaled_clock(988);
m_out_offs = 0x7f;
}
break;
case 1:
if (data)
{
m_monotone->set_unscaled_clock(750);
m_out_offs = 0x7f;
}
break;
case 2:
if (data)
{
m_monotone->set_unscaled_clock(600);
m_out_offs = 0x7f;
}
break;
case 3:
if (data)
{
m_monotone->set_unscaled_clock(400);
m_out_offs = 0x7f;
}
}
if (m_out_offs == 0x57)
m_monotone->set_unscaled_clock(0);
}
}
void zac_1_state::zac_1(machine_config &config)
void zac_1_state::config_base(machine_config &config)
{
/* basic machine hardware */
S2650(config, m_maincpu, 6000000/2); // no xtal, just 2 chips forming a random oscillator
@ -277,6 +593,56 @@ void zac_1_state::zac_1(machine_config &config)
/* Sound */
genpin_audio(config);
SPEAKER(config, "mono").front_center();
}
void zac_1_state::zac1(machine_config &config)
{
config_base(config);
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
CLOCK(config, m_monotone, 0); // basic audio
m_monotone->signal_handler().set(m_speaker, FUNC(speaker_sound_device::level_w));
}
void zac_1_state::zac2(machine_config &config)
{
config_base(config);
// sound card with 8035 and 1408
I8035(config, m_audiocpu, XTAL(6'000'000));
m_audiocpu->set_addrmap(AS_PROGRAM, &zac_1_state::audio_data);
m_audiocpu->set_addrmap(AS_IO, &zac_1_state::audio_io);
m_audiocpu->t1_in_cb().set(FUNC(zac_1_state::audio_t1_r));
m_audiocpu->p1_out_cb().set("dac", FUNC(dac_byte_interface::data_w));
MC1408(config, m_dac, 0).add_route(ALL_OUTPUTS, "mono", 0.275);
GENERIC_LATCH_8(config, m_soundlatch);
}
void zac_1_state::zac3(machine_config &config)
{
config_base(config);
// sound card with 76477
SN76477(config, m_sn);
m_sn->set_noise_params(RES_K(220), RES_K(4.7), CAP_P(2200));
m_sn->set_decay_res(RES_K(1500));
m_sn->set_attack_params(CAP_N(2200), RES_K(4.7));
m_sn->set_amp_res(RES_K(47));
m_sn->set_feedback_res(RES_K(220));
m_sn->set_vco_params(5.0, CAP_U(0.33), RES_K(100));
m_sn->set_pitch_voltage(5.0);
m_sn->set_slf_params(CAP_U(2.2), RES_M(1));
m_sn->set_oneshot_params(CAP_U(2.2), RES_K(1500));
m_sn->set_vco_mode(0);
m_sn->set_mixer_params(1, 1, 1);
m_sn->set_envelope_params(0, 1);
m_sn->add_route(ALL_OUTPUTS, "mono", 0.30);
// add NE555 here - it provides external vco control,
// with 2 fixed frequencies and an auto-sliding frequency
}
void zac_1_state::zac4(machine_config &config)
{
config_base(config);
// stargoda sound card - could be a motorola cpu
}
/*************************** LOCOMOTION ********************************/
@ -308,12 +674,34 @@ uint8_t zac_1_state::reset_int_r()
void zac_1_state::locomotp(machine_config &config)
{
zac_1(config);
zac2(config);
/* basic machine hardware */
m_maincpu->set_addrmap(AS_PROGRAM, &zac_1_state::locomotp_map);
m_maincpu->set_addrmap(AS_IO, &zac_1_state::locomotp_io);
m_maincpu->set_addrmap(AS_DATA, &zac_1_state::locomotp_data);
// also has sound cpu
SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50);
// SN76477 sound effects
SN76477(config, m_sn);
m_sn->set_noise_params(RES_K(39), RES_K(100), CAP_P(470));
m_sn->set_decay_res(RES_M(1));
m_sn->set_attack_params(CAP_U(22), RES_K(4.7));
m_sn->set_amp_res(RES_K(47));
m_sn->set_feedback_res(RES_K(68));
m_sn->set_slf_params(CAP_N(220), RES_K(560));
m_sn->set_oneshot_params(CAP_U(1), RES_K(330));
m_sn->set_mixer_params(0, 0, 0);
m_sn->add_route(ALL_OUTPUTS, "mono", 0.30);
// MM5837 noise device
mm5837_device &noise(MM5837(config, "noise"));
noise.set_vdd(-12); // relative to vss, should it be relative to ground?
noise.output_callback().set(FUNC(zac_1_state::noise_w));
// 555 timer, 1277 Hz, merges with noise to make a steam whistle
CLOCK(config, m_astable, 0);
m_astable->signal_handler().set(FUNC(zac_1_state::clock_w));
}
@ -321,131 +709,144 @@ void zac_1_state::locomotp(machine_config &config)
/ Earth Wind Fire (04/81)
/-------------------------------*/
ROM_START(ewf)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "zac_boot.lgc", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "ewf_2.lgc", 0x1c00, 0x0400, CRC(aa67e0b4) SHA1(4491eff7081fd5e397974fac1156992ce2012d0b))
ROM_LOAD ( "ewf_3.lgc", 0x0800, 0x0400, CRC(b21bf015) SHA1(ecddfe1d6797c39e094a7f86efabf0abea0fa4af))
ROM_LOAD ( "ewf_4.lgc", 0x0c00, 0x0400, CRC(d110da3f) SHA1(88e27347d209fab5be924f95b0a001476ea92c1f))
ROM_LOAD ( "ewf_5.lgc", 0x1000, 0x0400, CRC(f695dab6) SHA1(48ca60718cea40baa5052f690c8d69eb7ab32b0e))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "zac_boot.u1", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "ewf_2.u2", 0x1c00, 0x0400, CRC(aa67e0b4) SHA1(4491eff7081fd5e397974fac1156992ce2012d0b))
ROM_LOAD ( "ewf_3.u3", 0x0800, 0x0400, CRC(b21bf015) SHA1(ecddfe1d6797c39e094a7f86efabf0abea0fa4af))
ROM_LOAD ( "ewf_4.u4", 0x0c00, 0x0400, CRC(d110da3f) SHA1(88e27347d209fab5be924f95b0a001476ea92c1f))
ROM_LOAD ( "ewf_5.u5", 0x1000, 0x0400, CRC(f695dab6) SHA1(48ca60718cea40baa5052f690c8d69eb7ab32b0e))
ROM_REGION(0x10000, "cpu2", 0)
ROM_LOAD("ewf.snd", 0x0000, 0x0800, CRC(5079e493) SHA1(51d366cdd09ad00b8b016b0ea1c85ac95ef94d71))
ROM_REGION(0x10000, "audiocpu", 0)
ROM_LOAD("ewf.snd", 0x0000, 0x0800, CRC(5079e493) SHA1(51d366cdd09ad00b8b016b0ea1c85ac95ef94d71))
ROM_END
/*--------------------------------
/ Fire Mountain (01/80)
/-------------------------------*/
ROM_START(firemntn)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "zac_boot.lgc", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "firemt_2.lgc", 0x1c00, 0x0400, CRC(d146253f) SHA1(69910ddd1b7f1a0a0db689e750a0288d10e92951))
ROM_LOAD ( "firemt_3.lgc", 0x0800, 0x0400, CRC(d9faae07) SHA1(9883be01e2d359a111528029407141c9792c3583))
ROM_LOAD ( "firemt_4.lgc", 0x0c00, 0x0400, CRC(b5cac3da) SHA1(94f1153571a099574d041a5168854056a692a03d))
ROM_LOAD ( "firemt_5.lgc", 0x1000, 0x0400, CRC(13f11d84) SHA1(031f43467a4a01810297e3bfe0762ed2eed4e251))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "zac_boot.u1", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "firemt_2.u2", 0x1c00, 0x0400, CRC(d146253f) SHA1(69910ddd1b7f1a0a0db689e750a0288d10e92951))
ROM_LOAD ( "firemt_3.u3", 0x0800, 0x0400, CRC(d9faae07) SHA1(9883be01e2d359a111528029407141c9792c3583))
ROM_LOAD ( "firemt_4.u4", 0x0c00, 0x0400, CRC(b5cac3da) SHA1(94f1153571a099574d041a5168854056a692a03d))
ROM_LOAD ( "firemt_5.u5", 0x1000, 0x0400, CRC(13f11d84) SHA1(031f43467a4a01810297e3bfe0762ed2eed4e251))
ROM_END
/*--------------------------------
/ Future World (10/78)
/-------------------------------*/
ROM_START(futurwld)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "futwld_1.lgc", 0x0000, 0x0400, CRC(d83b8793) SHA1(3bb04d8395191ecf324b6da0bcddcf7bd8d41867))
ROM_LOAD ( "futwld_2.lgc", 0x0400, 0x0400, CRC(bdcb7e1d) SHA1(e6c0c7e8188df87937f0b22dbb0639872e03e948))
ROM_LOAD ( "futwld_3.lgc", 0x0800, 0x0400, CRC(48e3d293) SHA1(0029f30c4a94067e7782e22499b11db86f051934))
ROM_LOAD ( "futwld_4.lgc", 0x0c00, 0x0400, CRC(b1de2120) SHA1(970e1c4eadb7ace1398684accac289a434d13d84))
ROM_LOAD ( "futwld_5.lgc", 0x1000, 0x0400, CRC(6b7965f2) SHA1(31314bc63f01717004c5c2448b5db7d292145b60))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "futwld_1.u1", 0x0000, 0x0400, CRC(d83b8793) SHA1(3bb04d8395191ecf324b6da0bcddcf7bd8d41867))
ROM_LOAD ( "futwld_2.u2", 0x0400, 0x0400, CRC(bdcb7e1d) SHA1(e6c0c7e8188df87937f0b22dbb0639872e03e948))
ROM_LOAD ( "futwld_3.u3", 0x0800, 0x0400, CRC(48e3d293) SHA1(0029f30c4a94067e7782e22499b11db86f051934))
ROM_LOAD ( "futwld_4.u4", 0x0c00, 0x0400, CRC(b1de2120) SHA1(970e1c4eadb7ace1398684accac289a434d13d84))
ROM_LOAD ( "futwld_5.u5", 0x1000, 0x0400, CRC(6b7965f2) SHA1(31314bc63f01717004c5c2448b5db7d292145b60))
ROM_END
/*--------------------------------
/ Horror
/-------------------------------*/
// Conversion kit for Space Shuttle. One ROM is new.
/*--------------------------------
/ Hot Wheels (09/79)
/-------------------------------*/
ROM_START(hotwheel)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "zac_boot.lgc", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "htwhls_2.lgc", 0x1c00, 0x0400, CRC(7ff870ae) SHA1(274ee7c2cb92b6710c546058e7277f06720b5e37))
ROM_LOAD ( "htwhls_3.lgc", 0x0800, 0x0400, CRC(7c1fba91) SHA1(d514e9b3128dfe7999e414fd9044dc20c0d76c66))
ROM_LOAD ( "htwhls_4.lgc", 0x0c00, 0x0400, CRC(974804ba) SHA1(f35c1b52327b2d3170a9a28dbee4d1437f1f594a))
ROM_LOAD ( "htwhls_5.lgc", 0x1000, 0x0400, CRC(e28f3c60) SHA1(eb780be60b41017d105288cef71906d15474b8fa))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "zac_boot.u1", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "htwhls_2.u2", 0x1c00, 0x0400, CRC(7ff870ae) SHA1(274ee7c2cb92b6710c546058e7277f06720b5e37))
ROM_LOAD ( "htwhls_3.u3", 0x0800, 0x0400, CRC(7c1fba91) SHA1(d514e9b3128dfe7999e414fd9044dc20c0d76c66))
ROM_LOAD ( "htwhls_4.u4", 0x0c00, 0x0400, CRC(974804ba) SHA1(f35c1b52327b2d3170a9a28dbee4d1437f1f594a))
ROM_LOAD ( "htwhls_5.u5", 0x1000, 0x0400, CRC(e28f3c60) SHA1(eb780be60b41017d105288cef71906d15474b8fa))
ROM_END
// Alternatives for rom3
// ROM_LOAD( "hw04-3-425i.bin", 0x0800, 0x0400, CRC(ef0dcd76) SHA1(2250ecb883534df394466bdae96cef1ab7adf190) )
// ROM_LOAD( "hw04-3-429a.bin", 0x0800, 0x0400, CRC(997daff6) SHA1(c0889f1c48e72cdf4b10548442002b31499d4123) )
// ROM_LOAD( "hw04-3-5245.bin", 0x0800, 0x0400, CRC(2067112a) SHA1(8a6c21c6d0fff97b3577f0334d0f5e45a1f076c8) )
/*--------------------------------
// House of Diamonds (07/78)
/-------------------------------*/
ROM_START(hod)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "hod_1.bin", 0x0000, 0x0400, CRC(b666af0e) SHA1(e6a96ed30733e7b011ba35d1a628cefd073f29a1))
ROM_LOAD ( "hod_2.bin", 0x0400, 0x0400, CRC(956aac25) SHA1(2a59c3589d14e36ab2c61c6fbc9e8212410a385b))
ROM_LOAD ( "hod_3.bin", 0x0800, 0x0400, CRC(88b05360) SHA1(44992a01eaa8f58296d6fb003da8dad528f2b937))
ROM_LOAD ( "hod_4.bin", 0x0c00, 0x0400, CRC(25b6be1f) SHA1(351138404865d69ccb3ad450deda0776e987fdd2))
ROM_LOAD ( "hod_5.bin", 0x1000, 0x0400, CRC(81b73c40) SHA1(21b80cff132becdb028e6ee895231da635189ef4))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "hod_1.u1", 0x0000, 0x0400, CRC(b666af0e) SHA1(e6a96ed30733e7b011ba35d1a628cefd073f29a1))
ROM_LOAD ( "hod_2.u2", 0x0400, 0x0400, CRC(956aac25) SHA1(2a59c3589d14e36ab2c61c6fbc9e8212410a385b))
ROM_LOAD ( "hod_3.u3", 0x0800, 0x0400, CRC(88b05360) SHA1(44992a01eaa8f58296d6fb003da8dad528f2b937))
ROM_LOAD ( "hod_4.u4", 0x0c00, 0x0400, CRC(25b6be1f) SHA1(351138404865d69ccb3ad450deda0776e987fdd2))
ROM_LOAD ( "hod_5.u5", 0x1000, 0x0400, CRC(81b73c40) SHA1(21b80cff132becdb028e6ee895231da635189ef4))
ROM_END
/*--------------------------------
/ Locomotion (09/81)
/-------------------------------*/
ROM_START(locomotp)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "loc-1.fil", 0x0000, 0x0800, CRC(8d0252a2) SHA1(964dca642fb26eef2c132eca354a0ffce32e25df))
ROM_LOAD ( "loc-2.fil", 0x1c00, 0x0400, CRC(9dbd8601) SHA1(10bc37d2691c7237a14e0718febed2aa7822db23))
ROM_LOAD ( "loc-3.fil", 0x0800, 0x0400, CRC(8cadea7b) SHA1(e712add828dd22a2b495f0479f949748db21fbf7))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "loc-1.u1", 0x0000, 0x0800, CRC(8d0252a2) SHA1(964dca642fb26eef2c132eca354a0ffce32e25df))
ROM_LOAD ( "loc-2.u2", 0x1c00, 0x0400, CRC(9dbd8601) SHA1(10bc37d2691c7237a14e0718febed2aa7822db23))
ROM_LOAD ( "loc-3.u3", 0x0800, 0x0400, CRC(8cadea7b) SHA1(e712add828dd22a2b495f0479f949748db21fbf7))
ROM_CONTINUE(0x1400, 0x0400)
ROM_LOAD ( "loc-4.fil", 0x0c00, 0x0400, CRC(177c89b6) SHA1(23de8208dbbf141952a974514fc752ed2eb6b202))
ROM_LOAD ( "loc-5.fil", 0x1000, 0x0400, CRC(cad4122a) SHA1(df29914adeb9675abbd9f43dbef23adf2fe96c81))
ROM_LOAD ( "loc-4.u4", 0x0c00, 0x0400, CRC(177c89b6) SHA1(23de8208dbbf141952a974514fc752ed2eb6b202))
ROM_LOAD ( "loc-5.u5", 0x1000, 0x0400, CRC(cad4122a) SHA1(df29914adeb9675abbd9f43dbef23adf2fe96c81))
ROM_REGION(0x10000, "cpu2", 0)
ROM_REGION(0x1000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("loc-snd.fil", 0x0000, 0x0800, CRC(51ea9d2a) SHA1(9a68687af2c1cad2a261f61a67a625d906c502e1))
ROM_END
// Alternate dumps (not working)
// ROM_LOAD( "loc-2.fil", 0x1c00, 0x0800, CRC(2ca902ac) SHA1(39d2728194933527f2aa4b2f5c2b2695b31bbedf) )
// ROM_LOAD( "loc-4.fil", 0x0c00, 0x0800, CRC(c370a033) SHA1(e21c008662d7253d0eabf68832f93eb458999748) )
// ROM_LOAD( "loc-5.fil", 0x1000, 0x0800, CRC(ba1f3e71) SHA1(f691a9b50295a1ec60c85c820c90d4af629ebc9c) )
/*--------------------------------
/ Shooting the Rapids (04/79)
/-------------------------------*/
ROM_START(strapids)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "rapids_1.lgc", 0x0000, 0x0400, CRC(2a30cef3) SHA1(1af0ad08316fca565a6de1d308ed0495907656e7))
ROM_LOAD ( "rapids_2.lgc", 0x0400, 0x0400, CRC(04adaa14) SHA1(7819de53cee669b7e42624cd577ed1e3b771d2a9))
ROM_LOAD ( "rapids_3.lgc", 0x0800, 0x0400, CRC(397992fb) SHA1(46e4f293fc8d8094eb16030261342504694fbf8f))
ROM_LOAD ( "rapids_4.lgc", 0x0c00, 0x0400, CRC(3319fa21) SHA1(b384a7347e0d6ca3bec53f356312b66d66b5b03f))
ROM_LOAD ( "rapids_5.lgc", 0x1000, 0x0400, CRC(0dd67110) SHA1(0c32e400ef07d7243148ae280e145a3e050313e8))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "rapids_1.u1", 0x0000, 0x0400, CRC(2a30cef3) SHA1(1af0ad08316fca565a6de1d308ed0495907656e7))
ROM_LOAD ( "rapids_2.u2", 0x0400, 0x0400, CRC(04adaa14) SHA1(7819de53cee669b7e42624cd577ed1e3b771d2a9))
ROM_LOAD ( "rapids_3.u3", 0x0800, 0x0400, CRC(397992fb) SHA1(46e4f293fc8d8094eb16030261342504694fbf8f))
ROM_LOAD ( "rapids_4.u4", 0x0c00, 0x0400, CRC(3319fa21) SHA1(b384a7347e0d6ca3bec53f356312b66d66b5b03f))
ROM_LOAD ( "rapids_5.u5", 0x1000, 0x0400, CRC(0dd67110) SHA1(0c32e400ef07d7243148ae280e145a3e050313e8))
ROM_END
/*--------------------------------
/ Space Shuttle (09/80)
/-------------------------------*/
ROM_START(sshtlzac)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "zac_boot.lgc", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "spcshtl2.lgc", 0x1c00, 0x0400, CRC(0e06771b) SHA1(f30f3727f24219e5047c871fe81c2e172a17cd38))
ROM_LOAD ( "spcshtl3.lgc", 0x0800, 0x0400, CRC(a302e5a9) SHA1(1585f4000d105a7a2be5638ade9ab8668e6c8a5e))
ROM_LOAD ( "spcshtl4.lgc", 0x0c00, 0x0400, CRC(a02ee0b5) SHA1(50532bdc347ecfdbd4cc43403ff2cb1dcb1fe1ac))
ROM_LOAD ( "spcshtl5.lgc", 0x1000, 0x0400, CRC(d1dabd9b) SHA1(0d28336764f43fa4d1b23d849b6ec0f60b2b4ecf))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "zac_boot.u1", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "spcshtl2.u2", 0x1c00, 0x0400, CRC(0e06771b) SHA1(f30f3727f24219e5047c871fe81c2e172a17cd38))
ROM_LOAD ( "spcshtl3.u3", 0x0800, 0x0400, CRC(a302e5a9) SHA1(1585f4000d105a7a2be5638ade9ab8668e6c8a5e))
ROM_LOAD ( "spcshtl4.u4", 0x0c00, 0x0400, CRC(a02ee0b5) SHA1(50532bdc347ecfdbd4cc43403ff2cb1dcb1fe1ac))
ROM_LOAD ( "spcshtl5.u5", 0x1000, 0x0400, CRC(d1dabd9b) SHA1(0d28336764f43fa4d1b23d849b6ec0f60b2b4ecf))
ROM_REGION(0x10000, "cpu2", 0)
ROM_REGION(0x1000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spcshtl.snd", 0x0000, 0x0800, CRC(9a61781c) SHA1(0293640653d8cc9532debd31bbb70f025b4e6d03))
// Alternate dumps
// ROM_LOAD( "campioneflash1-2-3.bin", 0x0000, 0x0800, CRC(61894206) SHA1(f78724b416c27c26990ad28c1c4f5376353be55b) )
// ROM_LOAD( "flash17.bin", 0x0000, 0x0800, CRC(5049326d) SHA1(3b2f4ea054962bf4ba41d46663b7d3d9a77590ef) )
// ROM_LOAD( "spaceshuttle3.bin", 0x0800, 0x0400, CRC(c6a95dfc) SHA1(135e65264455da41c35a68378227b1b84517f98c) )
ROM_END
/*--------------------------------
/ Star God (05/80)
/-------------------------------*/
ROM_START(stargod)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "zac_boot.lgc", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "stargod2.lgc", 0x1c00, 0x0400, CRC(7a784b03) SHA1(bc3490b69913f52e3e9db5c3de5617ab89efe073))
ROM_LOAD ( "stargod3.lgc", 0x0800, 0x0400, CRC(95492ac0) SHA1(992ad53efc5b53020e3939dfca5431fd50b6571c))
ROM_LOAD ( "stargod4.lgc", 0x0c00, 0x0400, CRC(09e5682a) SHA1(c9fcad4f55ee005e204a49fa65e7d77ecfde9680))
ROM_LOAD ( "stargod5.lgc", 0x1000, 0x0400, CRC(43ba2462) SHA1(6749bdceca4a1dc2bc90d7ee3b671f52219e1af4))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "zac_boot.u1", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "stargod2.u2", 0x1c00, 0x0400, CRC(7a784b03) SHA1(bc3490b69913f52e3e9db5c3de5617ab89efe073))
ROM_LOAD ( "stargod3.u3", 0x0800, 0x0400, CRC(95492ac0) SHA1(992ad53efc5b53020e3939dfca5431fd50b6571c))
ROM_LOAD ( "stargod4.u4", 0x0c00, 0x0400, CRC(09e5682a) SHA1(c9fcad4f55ee005e204a49fa65e7d77ecfde9680))
ROM_LOAD ( "stargod5.u5", 0x1000, 0x0400, CRC(43ba2462) SHA1(6749bdceca4a1dc2bc90d7ee3b671f52219e1af4))
ROM_END
ROM_START(stargoda)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "zac_boot.lgc", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "stargod2.lgc", 0x1c00, 0x0400, CRC(7a784b03) SHA1(bc3490b69913f52e3e9db5c3de5617ab89efe073))
ROM_LOAD ( "stargod3.lgc", 0x0800, 0x0400, CRC(95492ac0) SHA1(992ad53efc5b53020e3939dfca5431fd50b6571c))
ROM_LOAD ( "stargod4.lgc", 0x0c00, 0x0400, CRC(09e5682a) SHA1(c9fcad4f55ee005e204a49fa65e7d77ecfde9680))
ROM_LOAD ( "stargod5.lgc", 0x1000, 0x0400, CRC(43ba2462) SHA1(6749bdceca4a1dc2bc90d7ee3b671f52219e1af4))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "zac_boot.u1", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "stargod2.u2", 0x1c00, 0x0400, CRC(7a784b03) SHA1(bc3490b69913f52e3e9db5c3de5617ab89efe073))
ROM_LOAD ( "stargod3.u3", 0x0800, 0x0400, CRC(95492ac0) SHA1(992ad53efc5b53020e3939dfca5431fd50b6571c))
ROM_LOAD ( "stargod4.u4", 0x0c00, 0x0400, CRC(09e5682a) SHA1(c9fcad4f55ee005e204a49fa65e7d77ecfde9680))
ROM_LOAD ( "stargod5.u5", 0x1000, 0x0400, CRC(43ba2462) SHA1(6749bdceca4a1dc2bc90d7ee3b671f52219e1af4))
ROM_REGION(0x10000, "cpu2", 0)
ROM_LOAD("stargod.snd", 0x7800, 0x0800, CRC(c9103a68) SHA1(cc77af54fdb192f0b334d9d1028210618c3f1d95))
@ -453,35 +854,49 @@ ROM_START(stargoda)
ROM_END
ROM_START(stargodb) // alternate version of the stargod set, with variable replay score
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "zac_boot.lgc", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "stargod.ic2", 0x1c00, 0x0400, CRC(a92ae202) SHA1(b5ed61f0c0c769f0bd4f5a69677d0eb5122bdb56))
ROM_LOAD ( "stargod.ic3", 0x0800, 0x0400, CRC(e677cf0d) SHA1(6aff0275148ccc56f2ac1bf5e5bd5baed64bfa7c))
ROM_LOAD ( "stargod.ic4", 0x0c00, 0x0400, CRC(fdfbb31f) SHA1(b64a529a097a7e2589ff124998160d375153d16c))
ROM_LOAD ( "stargod.ic5", 0x1000, 0x0400, CRC(536484f8) SHA1(7c40bf7e8b5b21cce44d96633581730ea9eeb176))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "zac_boot.u1", 0x0000, 0x0800, CRC(62a3da59) SHA1(db571139aff61757f6c0fda6fa0d1fea8257cb15))
ROM_LOAD ( "stargod.u2", 0x1c00, 0x0400, CRC(a92ae202) SHA1(b5ed61f0c0c769f0bd4f5a69677d0eb5122bdb56))
ROM_LOAD ( "stargod.u3", 0x0800, 0x0400, CRC(e677cf0d) SHA1(6aff0275148ccc56f2ac1bf5e5bd5baed64bfa7c))
ROM_LOAD ( "stargod.u4", 0x0c00, 0x0400, CRC(fdfbb31f) SHA1(b64a529a097a7e2589ff124998160d375153d16c))
ROM_LOAD ( "stargod.u5", 0x1000, 0x0400, CRC(536484f8) SHA1(7c40bf7e8b5b21cce44d96633581730ea9eeb176))
ROM_END
// Alternate stargod dumps (not working)
// ROM_LOAD( "stargod5.lgc", 0x1000, 0x0400, CRC(03cd4e24) SHA1(b73d383dc71e44277de9116a702b899a54ce32b9) )
// ROM_LOAD( "stargod.snd", 0x7800, 0x0800, CRC(5079e493) SHA1(51d366cdd09ad00b8b016b0ea1c85ac95ef94d71) )
/*--------------------------------
/ Winter Sports (01/78)
/-------------------------------*/
ROM_START(wsports)
ROM_REGION(0x8000, "maincpu", 0)
ROM_LOAD ( "ws1.bin", 0x0000, 0x0400, CRC(58feb058) SHA1(50216bba5be28284e63d826543297d1b6b609325))
ROM_LOAD ( "ws2.bin", 0x0400, 0x0400, CRC(ece702cb) SHA1(84cf0976b33bd7cf25976de9c66cc85808f1cd50))
ROM_LOAD ( "ws3.bin", 0x0800, 0x0400, CRC(ff7f6824) SHA1(0eef4aca51c0e823f7634d7fc22c96c590239269))
ROM_LOAD ( "ws4.bin", 0x0c00, 0x0400, CRC(74460cf2) SHA1(4afa612af1eff8eae686ceba7c117bc7962272c7))
ROM_LOAD ( "ws5.bin", 0x1000, 0x0400, CRC(5ef51ced) SHA1(390579d0482ceabf87924f7718ef33e336726d92))
ROM_REGION(0x2000, "maincpu", ROMREGION_ERASEFF)
ROM_LOAD ( "ws1.u1", 0x0000, 0x0400, CRC(58feb058) SHA1(50216bba5be28284e63d826543297d1b6b609325))
ROM_LOAD ( "ws2.u2", 0x0400, 0x0400, CRC(ece702cb) SHA1(84cf0976b33bd7cf25976de9c66cc85808f1cd50))
ROM_LOAD ( "ws3.u3", 0x0800, 0x0400, CRC(ff7f6824) SHA1(0eef4aca51c0e823f7634d7fc22c96c590239269))
ROM_LOAD ( "ws4.u4", 0x0c00, 0x0400, CRC(74460cf2) SHA1(4afa612af1eff8eae686ceba7c117bc7962272c7))
ROM_LOAD ( "ws5.u5", 0x1000, 0x0400, CRC(5ef51ced) SHA1(390579d0482ceabf87924f7718ef33e336726d92))
ROM_END
GAME(1981, ewf, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Earth Wind Fire", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1980, firemntn, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Fire Mountain", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1978, futurwld, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Future World", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1979, hotwheel, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Hot Wheels", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1978, hod, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "House of Diamonds", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1981, locomotp, 0, locomotp, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Locomotion", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1979, strapids, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Shooting the Rapids", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1980, sshtlzac, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Space Shuttle (Zaccaria)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1980, stargod, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1980, stargoda, stargod, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God (alternate sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1980, stargodb, stargod, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God (variable replay score)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
GAME(1978, wsports, 0, zac_1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Winter Sports", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
} // anonymous namespace
// Basic audio
GAME(1978, futurwld, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Future World", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME(1978, hod, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "House of Diamonds", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME(1978, wsports, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Winter Sports", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
// 1B1125 audio (SN76477, NE555)
GAME(1980, firemntn, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Fire Mountain", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME(1979, hotwheel, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Hot Wheels", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME(1979, strapids, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Shooting the Rapids", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME(1980, stargod, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME(1980, stargodb, stargod, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God (variable replay score)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
// 1B1346 audio (i8035, MC1408)
GAME(1981, ewf, 0, zac2, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Earth Wind Fire", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME(1980, sshtlzac, 0, zac2, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Space Shuttle (Zaccaria)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
// 1B1146 audio (i8035, MC1408, SN76477, NE555, MM5837)
GAME(1981, locomotp, 0, locomotp, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Locomotion", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
// unknown audio
GAME(1980, stargoda, stargod, zac4, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God (alternate sound)", MACHINE_MECHANICAL | MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -41,8 +41,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_speaker(*this, "speaker")
, m_digits(*this, "digit%u", 0U)
, m_io_lamps(*this, "lamp%u", 0U)
, m_io_solenoids(*this, "sol%u", 0U)
, m_io_outputs(*this, "out%u", 0U)
{ }
void zac_proto(machine_config &config);
@ -64,8 +63,7 @@ private:
required_device<cpu_device> m_maincpu;
required_device<speaker_sound_device> m_speaker;
output_finder<11> m_digits;
output_finder<84> m_io_lamps;
output_finder<12> m_io_solenoids;
output_finder<12+84> m_io_outputs;
};
@ -234,7 +232,7 @@ void zac_proto_state::out0_w(offs_t offset, uint8_t data)
break;
}
for (u8 i = 0; i < 6; i++)
m_io_solenoids[offset*6+i] = BIT(data, i);
m_io_outputs[offset*6+i] = BIT(data, i);
}
// lamps
@ -242,7 +240,7 @@ void zac_proto_state::out1_w(offs_t offset, uint8_t data)
{
data &= 0x3f;
for (u8 i = 0; i < 6; i++)
m_io_lamps[offset*6+i] = BIT(data, i);
m_io_outputs[12+offset*6+i] = BIT(data, i);
}
// need to implement blanking of leading zeroes
@ -291,8 +289,7 @@ WRITE_LINE_MEMBER(zac_proto_state::audio_clock)
void zac_proto_state::machine_start()
{
m_digits.resolve();
m_io_lamps.resolve();
m_io_solenoids.resolve();
m_io_outputs.resolve();
save_item(NAME(m_u36));
save_item(NAME(m_u37));