zac_1: improved the sounds

This commit is contained in:
Robbbert 2022-03-24 20:53:06 +11:00
parent ca2d086cd7
commit 399576e1f4
2 changed files with 206 additions and 145 deletions

View File

@ -5,8 +5,6 @@
PINBALL PINBALL
Zaccaria Generation 1 Zaccaria Generation 1
Made working in Sept 2012 [Robbbert]
Setup is via a menu - there are no dipswitches. Setup is via a menu - there are no dipswitches.
If you see 6 and 9 flashing at start- this indicates the battery is flat, If you see 6 and 9 flashing at start- this indicates the battery is flat,
@ -16,9 +14,16 @@ 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. 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 If at any time you 'clock' the machine (ie exceed 999,990), the last digit will
flash, indicating you have a million. flash, indicating you have a million. All games have 6-digit displays - don't be
fooled by the numerous videos of recreations on YouTube.
The ball number is how many balls are left. 1 = last ball. All games:
- To start, press 1
- Press X to end ball
- Ball counter runs backwards, so 1 = last ball.
- Earth Wind Fire, Locomotion:
When on the last ball, scoring points racks up a bonus counter. At the end, you get
an extra timed part, with infinite balls until the time runs out. Then press X.
Games: Games:
- Combat - Combat
@ -32,6 +37,8 @@ Games:
- Space Shuttle - Space Shuttle
- Earth Wind Fire - Earth Wind Fire
- Locomotion - Locomotion
**** Other Manufacturer ****
- Horror (conversion of Space Shuttle)
Sound - there's 5 sound boards Sound - there's 5 sound boards
1. 4 audio oscillators which can be switched on and off independently. It's shown 1. 4 audio oscillators which can be switched on and off independently. It's shown
@ -55,8 +62,9 @@ Status:
ToDo: ToDo:
- Monotone oscillator frequencies are guesses. We assume that only one tone at a time is used. - Monotone oscillator frequencies are guesses. We assume that only one tone at a time is used.
- NE555 for hotwheel,strapids,stargod,stargodb,firemntn. - hotwheel,strapids,stargod,stargodb,firemntn: NE555 to add
- Sound for stargoda - stargod: Sound is totally bad (stargodb is ok)
- stargoda: Different unknown sound card
- No machines sound like the real ones - No machines sound like the real ones
- Inbuilt Printer - Inbuilt Printer
@ -105,16 +113,21 @@ public:
void zac4(machine_config &config); void zac4(machine_config &config);
private: private:
uint8_t ctrl_r(); u8 ctrl_r();
void ctrl_w(uint8_t data); void ctrl_w(u8 data);
DECLARE_READ_LINE_MEMBER(audio_t1_r);
DECLARE_READ_LINE_MEMBER(serial_r); DECLARE_READ_LINE_MEMBER(serial_r);
DECLARE_WRITE_LINE_MEMBER(serial_w); DECLARE_WRITE_LINE_MEMBER(serial_w);
DECLARE_WRITE_LINE_MEMBER(noise_w); DECLARE_WRITE_LINE_MEMBER(noise_w);
DECLARE_WRITE_LINE_MEMBER(clock_w); DECLARE_WRITE_LINE_MEMBER(clock_w);
uint8_t reset_int_r(); u8 reset_int_r();
void reset_int_w(uint8_t data); void reset_int_w(u8 data);
TIMER_DEVICE_CALLBACK_MEMBER(zac_1_inttimer); TIMER_DEVICE_CALLBACK_MEMBER(zac_1_inttimer);
TIMER_DEVICE_CALLBACK_MEMBER(zac_1_outtimer); TIMER_DEVICE_CALLBACK_MEMBER(zac_1_outtimer);
virtual void machine_reset() override;
virtual void machine_start() override;
void audio_command_w(u8 data);
u8 audio_command_r();
void locomotp_data(address_map &map); void locomotp_data(address_map &map);
void locomotp_io(address_map &map); void locomotp_io(address_map &map);
@ -125,22 +138,18 @@ private:
void audio_data(address_map &map); void audio_data(address_map &map);
void audio_io(address_map &map); void audio_io(address_map &map);
uint8_t m_t_c = 0U; u8 m_t_c = 0U;
uint8_t m_out_offs = 0U; u8 m_out_offs = 0U;
uint8_t m_input_line = 0U; u8 m_input_line = 0U;
u8 m_sn_store = 0xffU; u8 m_sn_store = 0xffU;
bool m_clock_state = 0;
bool m_noise_state = 0;
u8 m_40193 = 0U; u8 m_40193 = 0U;
virtual void machine_reset() override; bool m_clock_state = false;
virtual void machine_start() override; bool m_noise_state = false;
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; required_device<s2650_device> m_maincpu;
optional_device<i8035_device> m_audiocpu; optional_device<i8035_device> m_audiocpu;
optional_device<speaker_sound_device> m_speaker; optional_device<speaker_sound_device> m_speaker;
required_shared_ptr<uint8_t> m_p_ram; required_shared_ptr<u8> m_p_ram;
optional_device<clock_device> m_monotone; optional_device<clock_device> m_monotone;
optional_device<clock_device> m_astable; optional_device<clock_device> m_astable;
optional_device<dac_byte_interface> m_dac; optional_device<dac_byte_interface> m_dac;
@ -182,9 +191,9 @@ void zac_1_state::audio_io(address_map &map)
map(0x80, 0xff).r(FUNC(zac_1_state::audio_command_r)); // 40097 map(0x80, 0xff).r(FUNC(zac_1_state::audio_command_r)); // 40097
} }
static INPUT_PORTS_START( zac_1 ) static INPUT_PORTS_START( common )
PORT_START("TEST") PORT_START("TEST")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Test") PORT_CODE(KEYCODE_3_PAD) // doesn't seem to do anything PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("CPU Test") PORT_CODE(KEYCODE_3_PAD) // doesn't seem to do anything
PORT_START("DSW2") PORT_START("DSW2")
PORT_DIPNAME( 0x10, 0x10, "Sound Test" ) PORT_DIPNAME( 0x10, 0x10, "Sound Test" )
@ -209,8 +218,11 @@ static INPUT_PORTS_START( zac_1 )
PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) // Another tilt 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) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Burn Test") PORT_CODE(KEYCODE_2_PAD)
INPUT_PORTS_END
static INPUT_PORTS_START( firemntn )
PORT_INCLUDE( common )
// from here there are variations per game
PORT_START("X2") PORT_START("X2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Outhole") PORT_CODE(KEYCODE_X) 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( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Flap") PORT_CODE(KEYCODE_A)
@ -244,100 +256,131 @@ static INPUT_PORTS_START( zac_1 )
PORT_START("X5") PORT_START("X5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 1") PORT_CODE(KEYCODE_Y) 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( 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( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 3") PORT_CODE(KEYCODE_COMMA)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 4") PORT_CODE(KEYCODE_BACKSPACE) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("LH Bank Target 4") PORT_CODE(KEYCODE_STOP)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 1") PORT_CODE(KEYCODE_OPENBRACE) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 1") PORT_CODE(KEYCODE_SLASH)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 2") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 2") PORT_CODE(KEYCODE_COLON)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 3") PORT_CODE(KEYCODE_BACKSLASH) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 3") PORT_CODE(KEYCODE_QUOTE)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 4") PORT_CODE(KEYCODE_COLON) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("RH Bank Target 4") PORT_CODE(KEYCODE_ENTER)
INPUT_PORTS_END INPUT_PORTS_END
void zac_1_state::audio_command_w(uint8_t data) static INPUT_PORTS_START( zac_1 )
PORT_INCLUDE( common )
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("INP17") PORT_CODE(KEYCODE_A)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP18") PORT_CODE(KEYCODE_B)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP19") PORT_CODE(KEYCODE_C)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP20") PORT_CODE(KEYCODE_D)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP21") PORT_CODE(KEYCODE_E)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP22") PORT_CODE(KEYCODE_F)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP23") PORT_CODE(KEYCODE_G)
PORT_START("X3")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP24") PORT_CODE(KEYCODE_H)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP25") PORT_CODE(KEYCODE_I)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP26") PORT_CODE(KEYCODE_J)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP27") PORT_CODE(KEYCODE_K)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP28") PORT_CODE(KEYCODE_L)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP29") PORT_CODE(KEYCODE_M)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP30") PORT_CODE(KEYCODE_N)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP31") PORT_CODE(KEYCODE_O)
PORT_START("X4")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP32") PORT_CODE(KEYCODE_P)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP33") PORT_CODE(KEYCODE_Q)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP34") PORT_CODE(KEYCODE_R)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP35") PORT_CODE(KEYCODE_S)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP36") PORT_CODE(KEYCODE_T)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP37") PORT_CODE(KEYCODE_U)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP38") PORT_CODE(KEYCODE_V)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP39") PORT_CODE(KEYCODE_W)
PORT_START("X5")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP40") PORT_CODE(KEYCODE_Y)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP41") PORT_CODE(KEYCODE_Z)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP42") PORT_CODE(KEYCODE_COMMA)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP43") PORT_CODE(KEYCODE_STOP)
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP44") PORT_CODE(KEYCODE_SLASH)
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP45") PORT_CODE(KEYCODE_COLON)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP46") PORT_CODE(KEYCODE_QUOTE)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("INP47") PORT_CODE(KEYCODE_ENTER)
INPUT_PORTS_END
void zac_1_state::audio_command_w(u8 data)
{ {
static const double res[8] { RES_INF, 4700, 2000, 820, 680, 560, 470, 330 }; // locomotp slf resistors
if (m_soundlatch) if (m_soundlatch)
m_soundlatch->write(data); m_soundlatch->write(data);
if (m_sn) if (m_sn)
{ {
if (m_p_ram[0x86]==1 || m_p_ram[0xb2]==1) // check for game over or tilt //if (m_p_ram[0x86]==1 || m_p_ram[0xb2]==1) // check for game over or tilt
{ //{
m_sn->enable_w(1); //m_sn->enable_w(1);
//return;
//}
if (data == m_sn_store)
return; return;
} m_sn_store = data;
// Locomotion // Locomotion
if (m_astable) if (m_astable)
{ {
// check for the steam whistle
if (data == 3)
m_astable->set_unscaled_clock(1277);
else
{
m_astable->set_unscaled_clock(0);
m_clock_state = 0;
}
// 4028 (U12) choose an action upon the 40193 (increment, decrement, reset)
switch (data) switch (data)
{ {
case 0: case 7: // schematic says 0 in error
m_astable->set_unscaled_clock(0);
m_clock_state = 0;
m_40193 = 0; m_40193 = 0;
break; break;
case 1: case 1:
m_astable->set_unscaled_clock(0);
m_clock_state = 0;
if (m_40193 < 7) if (m_40193 < 7)
m_40193++; m_40193++;
break; break;
case 2: case 2:
m_astable->set_unscaled_clock(0);
m_clock_state = 0;
if (m_40193 > 1) if (m_40193 > 1)
m_40193--; m_40193--;
break; break;
case 3: default: // other numbers are for electronic sounds
m_astable->set_unscaled_clock(1277);
break;
default:
break; break;
} }
m_sn->envelope_1_w(0); if (m_40193)
m_sn->envelope_2_w(1);
m_sn->mixer_b_w(0);
m_sn->mixer_c_w(1);
switch (m_40193)
{ {
case 0: // select locomotive speed (jiggle B and V to adjust throttle)
m_sn->envelope_1_w(1); m_sn->envelope_1_w(0);
m_sn->envelope_2_w(0); m_sn->envelope_2_w(1);
m_sn->mixer_b_w(1); m_sn->mixer_b_w(0);
m_sn->mixer_c_w(0); m_sn->mixer_c_w(1);
break; m_sn->slf_res_w(RES_K(res[m_40193 & 7]));
case 1: m_sn->enable_w(0);
m_sn->slf_res_w(RES_K(4700)); }
break; else
case 2: {
m_sn->slf_res_w(RES_K(2000)); // constant hiss of steam
break; m_sn->envelope_1_w(1);
case 3: m_sn->envelope_2_w(0);
m_sn->slf_res_w(RES_K(820)); m_sn->mixer_b_w(1);
break; m_sn->mixer_c_w(0);
case 4: m_sn->slf_res_w(RES_INF); // pin is disconnected
m_sn->slf_res_w(RES_K(680)); m_sn->enable_w(1);
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 else
{ {
// Hotwheels, Stargod, Strapids, Firemntn // Hotwheels, Stargod, Strapids, Firemntn
if (data == m_sn_store)
return;
m_sn_store = data;
if (!BIT(data, 0)) if (!BIT(data, 0))
m_sn->enable_w(1); m_sn->enable_w(1);
m_sn->vco_w(1); m_sn->vco_w(1);
@ -346,6 +389,7 @@ void zac_1_state::audio_command_w(uint8_t data)
m_sn->vco_res_w(RES_K(100)); m_sn->vco_res_w(RES_K(100));
m_sn->slf_res_w(RES_M(1)); m_sn->slf_res_w(RES_M(1));
m_sn->one_shot_res_w(RES_K(1500)); m_sn->one_shot_res_w(RES_K(1500));
m_sn->set_pitch_voltage(2.5); // wrong, this is varied by a waveform from the 555.
// These extra resistors are in parallel with the above ones, the resultant value is used. // These extra resistors are in parallel with the above ones, the resultant value is used.
switch (data >> 1) switch (data >> 1)
{ {
@ -409,7 +453,7 @@ WRITE_LINE_MEMBER( zac_1_state::clock_w )
m_speaker->level_w((m_clock_state && m_noise_state) ? 1 : 0); m_speaker->level_w((m_clock_state && m_noise_state) ? 1 : 0);
} }
uint8_t zac_1_state::audio_command_r() u8 zac_1_state::audio_command_r()
{ {
return m_soundlatch->read() | (ioport("DSW2")->read() & 0x30); return m_soundlatch->read() | (ioport("DSW2")->read() & 0x30);
} }
@ -419,7 +463,7 @@ READ_LINE_MEMBER(zac_1_state::audio_t1_r)
return (m_soundlatch->read() == 0); return (m_soundlatch->read() == 0);
} }
uint8_t zac_1_state::ctrl_r() u8 zac_1_state::ctrl_r()
{ {
// reads inputs // reads inputs
if (m_input_line == 0xfe) if (m_input_line == 0xfe)
@ -443,12 +487,12 @@ uint8_t zac_1_state::ctrl_r()
return 0xff; return 0xff;
} }
void zac_1_state::ctrl_w(uint8_t data) void zac_1_state::ctrl_w(u8 data)
{ {
m_input_line = data; m_input_line = data;
} }
void zac_1_state::reset_int_w(uint8_t data) void zac_1_state::reset_int_w(u8 data)
{ {
m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
} }
@ -483,7 +527,7 @@ void zac_1_state::machine_reset()
else else
{ {
m_p_ram[0xc0] = 3; // 3 balls m_p_ram[0xc0] = 3; // 3 balls
for (uint8_t i=0xc1; i < 0xd6; i++) for (u8 i=0xc1; i < 0xd6; i++)
m_p_ram[i] = 1; // enable match & coin slots m_p_ram[i] = 1; // enable match & coin slots
m_p_ram[0xf7] = 5; m_p_ram[0xf7] = 5;
m_p_ram[0xf8] = 0x0a; m_p_ram[0xf8] = 0x0a;
@ -517,7 +561,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(zac_1_state::zac_1_inttimer)
182E-183F is a storage area for inputs. */ 182E-183F is a storage area for inputs. */
TIMER_DEVICE_CALLBACK_MEMBER(zac_1_state::zac_1_outtimer) 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 static const u8 patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0, 0, 0, 0, 0, 0 }; // 4511
m_out_offs++; m_out_offs++;
if (m_out_offs > 0xbf) if (m_out_offs > 0xbf)
m_out_offs = 0; m_out_offs = 0;
@ -527,8 +571,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(zac_1_state::zac_1_outtimer)
// display // display
if (m_out_offs < 0x2e) if (m_out_offs < 0x2e)
{ {
uint8_t display = (m_out_offs >> 3) & 7; u8 display = (m_out_offs >> 3) & 7;
uint8_t digit = m_out_offs & 7; u8 digit = m_out_offs & 7;
m_digits[display * 10 + digit] = patterns[data]; m_digits[display * 10 + digit] = patterns[data];
if (m_out_offs == 0x16) if (m_out_offs == 0x16)
audio_command_w(data); audio_command_w(data);
@ -647,9 +691,9 @@ void zac_1_state::zac3(machine_config &config)
m_sn->set_pitch_voltage(5.0); m_sn->set_pitch_voltage(5.0);
m_sn->set_slf_params(CAP_U(2.2), RES_M(1)); 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_oneshot_params(CAP_U(2.2), RES_K(1500));
m_sn->set_vco_mode(0); m_sn->set_vco_mode(1);
m_sn->set_mixer_params(1, 1, 1); m_sn->set_mixer_params(0, 0, 0);
m_sn->set_envelope_params(0, 1); m_sn->set_envelope_params(1, 0);
m_sn->add_route(ALL_OUTPUTS, "mono", 0.30); m_sn->add_route(ALL_OUTPUTS, "mono", 0.30);
// add NE555 here - it provides external vco control, // add NE555 here - it provides external vco control,
// with 2 fixed frequencies and an auto-sliding frequency // with 2 fixed frequencies and an auto-sliding frequency
@ -682,7 +726,7 @@ void zac_1_state::locomotp_data(address_map &map)
map(S2650_DATA_PORT, S2650_DATA_PORT).r(FUNC(zac_1_state::reset_int_r)); map(S2650_DATA_PORT, S2650_DATA_PORT).r(FUNC(zac_1_state::reset_int_r));
} }
uint8_t zac_1_state::reset_int_r() u8 zac_1_state::reset_int_r()
{ {
m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE); m_maincpu->set_input_line(INPUT_LINE_IRQ0, CLEAR_LINE);
return 0; return 0;
@ -708,7 +752,7 @@ void zac_1_state::locomotp(machine_config &config)
m_sn->set_slf_params(CAP_N(220), RES_K(560)); 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_oneshot_params(CAP_U(1), RES_K(330));
m_sn->set_mixer_params(0, 0, 0); m_sn->set_mixer_params(0, 0, 0);
m_sn->add_route(ALL_OUTPUTS, "mono", 0.30); m_sn->add_route(ALL_OUTPUTS, "mono", 0.125);
// MM5837 noise device // MM5837 noise device
mm5837_device &noise(MM5837(config, "noise")); mm5837_device &noise(MM5837(config, "noise"));
@ -720,6 +764,30 @@ void zac_1_state::locomotp(machine_config &config)
m_astable->signal_handler().set(FUNC(zac_1_state::clock_w)); m_astable->signal_handler().set(FUNC(zac_1_state::clock_w));
} }
/* SYSTEM-1 ALTERNATE ROMS =======================================================================
This is a list of known alternate roms.
Hot Wheels (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) )
Locomotion (tested, 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) )
Space Shuttle
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) )
Star God (tested, not working)
ROM_LOAD( "stargod5.lgc", 0x1000, 0x0400, CRC(03cd4e24) SHA1(b73d383dc71e44277de9116a702b899a54ce32b9) )
ROM_LOAD( "stargod.snd", 0x7800, 0x0800, CRC(5079e493) SHA1(51d366cdd09ad00b8b016b0ea1c85ac95ef94d71) )
*/
/*-------------------------------- /*--------------------------------
/ Earth Wind Fire (04/81) / Earth Wind Fire (04/81)
@ -776,10 +844,6 @@ ROM_START(hotwheel)
ROM_LOAD ( "htwhls_4.u4", 0x0c00, 0x0400, CRC(974804ba) SHA1(f35c1b52327b2d3170a9a28dbee4d1437f1f594a)) ROM_LOAD ( "htwhls_4.u4", 0x0c00, 0x0400, CRC(974804ba) SHA1(f35c1b52327b2d3170a9a28dbee4d1437f1f594a))
ROM_LOAD ( "htwhls_5.u5", 0x1000, 0x0400, CRC(e28f3c60) SHA1(eb780be60b41017d105288cef71906d15474b8fa)) ROM_LOAD ( "htwhls_5.u5", 0x1000, 0x0400, CRC(e28f3c60) SHA1(eb780be60b41017d105288cef71906d15474b8fa))
ROM_END 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) // House of Diamonds (07/78)
@ -808,10 +872,6 @@ ROM_START(locomotp)
ROM_REGION(0x1000, "audiocpu", ROMREGION_ERASEFF) ROM_REGION(0x1000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("loc-snd.fil", 0x0000, 0x0800, CRC(51ea9d2a) SHA1(9a68687af2c1cad2a261f61a67a625d906c502e1)) ROM_LOAD("loc-snd.fil", 0x0000, 0x0800, CRC(51ea9d2a) SHA1(9a68687af2c1cad2a261f61a67a625d906c502e1))
ROM_END 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) / Shooting the Rapids (04/79)
@ -838,10 +898,6 @@ ROM_START(sshtlzac)
ROM_REGION(0x1000, "audiocpu", ROMREGION_ERASEFF) ROM_REGION(0x1000, "audiocpu", ROMREGION_ERASEFF)
ROM_LOAD("spcshtl.snd", 0x0000, 0x0800, CRC(9a61781c) SHA1(0293640653d8cc9532debd31bbb70f025b4e6d03)) 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 ROM_END
/*-------------------------------- /*--------------------------------
@ -877,9 +933,6 @@ ROM_START(stargodb) // alternate version of the stargod set, with variable repla
ROM_LOAD ( "stargod.u4", 0x0c00, 0x0400, CRC(fdfbb31f) SHA1(b64a529a097a7e2589ff124998160d375153d16c)) ROM_LOAD ( "stargod.u4", 0x0c00, 0x0400, CRC(fdfbb31f) SHA1(b64a529a097a7e2589ff124998160d375153d16c))
ROM_LOAD ( "stargod.u5", 0x1000, 0x0400, CRC(536484f8) SHA1(7c40bf7e8b5b21cce44d96633581730ea9eeb176)) ROM_LOAD ( "stargod.u5", 0x1000, 0x0400, CRC(536484f8) SHA1(7c40bf7e8b5b21cce44d96633581730ea9eeb176))
ROM_END 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) / Winter Sports (01/78)
@ -896,20 +949,20 @@ ROM_END
} // anonymous namespace } // anonymous namespace
// Basic audio // Basic audio
GAME(1978, futurwld, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Future World", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, hod, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "House of Diamonds", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, wsports, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Winter Sports", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, wsports, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Winter Sports", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, hod, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "House of Diamonds", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, futurwld, 0, zac1, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Future World", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
// 1B1125 audio (SN76477, NE555) // 1B1125 audio (SN76477, NE555)
GAME(1980, firemntn, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Fire Mountain", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, hotwheel, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Hot Wheels", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, strapids, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Shooting the Rapids", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1979, strapids, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Shooting the Rapids", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, hotwheel, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Hot Wheels", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1980, firemntn, 0, zac3, firemntn, zac_1_state, empty_init, ROT0, "Zaccaria", "Fire Mountain", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1980, stargod, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1980, stargod, 0, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1980, stargodb, stargod, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God (variable replay score)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1980, stargodb, stargod, zac3, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Star God (variable replay score)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
// 1B1346 audio (i8035, MC1408) // 1B1346 audio (i8035, MC1408)
GAME(1981, ewf, 0, zac2, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Earth Wind Fire", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1980, sshtlzac, 0, zac2, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Space Shuttle (Zaccaria)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1980, sshtlzac, 0, zac2, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Space Shuttle (Zaccaria)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1981, ewf, 0, zac2, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Earth Wind Fire", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
// 1B1146 audio (i8035, MC1408, SN76477, NE555, MM5837) // 1B1146 audio (i8035, MC1408, SN76477, NE555, MM5837)
GAME(1981, locomotp, 0, locomotp, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Locomotion", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1981, locomotp, 0, locomotp, zac_1, zac_1_state, empty_init, ROT0, "Zaccaria", "Locomotion", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )

View File

@ -104,34 +104,42 @@ static INPUT_PORTS_START( zac_proto )
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("INP06") PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_A) PORT_NAME("INP06")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("INP07") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_B) PORT_NAME("INP07")
PORT_START("X1") PORT_START("X1")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("INP10") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_C) PORT_NAME("INP08")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("INP11") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_D) PORT_NAME("INP09")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("INP12") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_E) PORT_NAME("INP10")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("INP13") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_F) PORT_NAME("INP11")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("INP14") PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_G) PORT_NAME("INP12")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("INP15") PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_H) PORT_NAME("INP13")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("INP16") PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_NAME("INP14")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME("INP17") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_J) PORT_NAME("INP15")
PORT_START("X2") PORT_START("X2")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("INP20") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_K) PORT_NAME("INP16")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("INP21") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_L) PORT_NAME("INP17")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("INP22") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_M) PORT_NAME("INP18")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("INP23") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_N) PORT_NAME("INP19")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("INP24") PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_O) PORT_NAME("INP20")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_P) PORT_NAME("INP25") PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_P) PORT_NAME("INP21")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("INP26") PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("INP22")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("INP27") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_R) PORT_NAME("INP23")
PORT_START("X3") PORT_START("X3")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("INP30") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_S) PORT_NAME("INP24")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("INP31") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_T) PORT_NAME("INP25")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("INP32") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("INP26")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("INP33") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_V) PORT_NAME("INP27")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("INP34") PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_W) PORT_NAME("INP28")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("INP35") PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("INP29")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP36") PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_COMMA) PORT_NAME("INP30")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP37") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_STOP) PORT_NAME("INP31")
// None of the games respond to this row, even though the Strike manual says INP32 is used.
PORT_START("X4") PORT_START("X4")
PORT_BIT(0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_SLASH) PORT_NAME("INP32")
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_COLON) PORT_NAME("INP33")
PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_QUOTE) PORT_NAME("INP34")
PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("INP35")
PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("INP36")
PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("INP37")
PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_BACKSLASH) PORT_NAME("INP38")
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("INP39")
// dipswitches // dipswitches
PORT_START("X5") PORT_START("X5")
@ -343,7 +351,7 @@ void zac_proto_state::zac_proto(machine_config &config)
// The PCB has a space for another rom, U27, @0x1800, but it was never used. // The PCB has a space for another rom, U27, @0x1800, but it was never used.
/*-------------------------------- /*--------------------------------
/ Strike / Strike (09/78)
/-------------------------------*/ /-------------------------------*/
ROM_START(strike) ROM_START(strike)
ROM_REGION(0x1800, "maincpu", ROMREGION_ERASEFF) ROM_REGION(0x1800, "maincpu", ROMREGION_ERASEFF)
@ -377,6 +385,6 @@ ROM_END
} // anonymous namespace } // anonymous namespace
GAME(1978, strike, 0, zac_proto, zac_proto, zac_proto_state, empty_init, ROT0, "Zaccaria", "Strike", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, skijump, 0, zac_proto, zac_proto, zac_proto_state, empty_init, ROT0, "Zaccaria", "Ski Jump", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, skijump, 0, zac_proto, zac_proto, zac_proto_state, empty_init, ROT0, "Zaccaria", "Ski Jump", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, spacecty, 0, zac_proto, zac_proto, zac_proto_state, empty_init, ROT0, "Zaccaria", "Space City", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1979, spacecty, 0, zac_proto, zac_proto, zac_proto_state, empty_init, ROT0, "Zaccaria", "Space City", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, strike, 0, zac_proto, zac_proto, zac_proto_state, empty_init, ROT0, "Zaccaria", "Strike", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )