gts1: improved the sound

This commit is contained in:
Robbbert 2022-05-25 23:51:48 +10:00
parent f28212d524
commit 362201a23b

View File

@ -161,7 +161,6 @@ private:
u16 m_6351_addr = 0U; //!< ROM MM6351 address (12 bits) u16 m_6351_addr = 0U; //!< ROM MM6351 address (12 bits)
u8 m_z30_out = 0U; //!< 4-to-16 decoder outputs u8 m_z30_out = 0U; //!< 4-to-16 decoder outputs
u8 m_lamp_data = 0U; u8 m_lamp_data = 0U;
u8 m_snd_save = 0U;
}; };
void gts1_state::gts1_map(address_map &map) void gts1_state::gts1_map(address_map &map)
@ -402,7 +401,6 @@ void gts1_state::machine_start()
save_item(NAME(m_6351_addr)); save_item(NAME(m_6351_addr));
save_item(NAME(m_z30_out)); save_item(NAME(m_z30_out));
save_item(NAME(m_lamp_data)); save_item(NAME(m_lamp_data));
save_item(NAME(m_snd_save));
} }
void gts1_state::machine_reset() void gts1_state::machine_reset()
@ -415,7 +413,6 @@ void gts1_state::machine_reset()
m_6351_addr = 0x3ff; m_6351_addr = 0x3ff;
m_z30_out = 0U; m_z30_out = 0U;
m_lamp_data = 0U; m_lamp_data = 0U;
m_snd_save = 0U;
} }
u8 gts1_state::gts1_solenoid_r(offs_t offset) // does nothing u8 gts1_state::gts1_solenoid_r(offs_t offset) // does nothing
@ -425,7 +422,7 @@ u8 gts1_state::gts1_solenoid_r(offs_t offset) // does nothing
return data; return data;
} }
void gts1_state::gts1_solenoid_w(offs_t offset, u8 data) // WORKS void gts1_state::gts1_solenoid_w(offs_t offset, u8 data)
{ {
//LOG("%s: solenoid #[%02X] gets data=%X\n", __FUNCTION__, offset, data); //LOG("%s: solenoid #[%02X] gets data=%X\n", __FUNCTION__, offset, data);
switch (offset) switch (offset)
@ -439,36 +436,42 @@ void gts1_state::gts1_solenoid_w(offs_t offset, u8 data) // WORKS
m_samples->start(0, 6); m_samples->start(0, 6);
break; break;
case 2: // tens chime case 2: // tens chime
m_snd_save = data ? (m_snd_save | 4) : (m_snd_save & 0xfb);
if (m_p1_sound) if (m_p1_sound)
{ {
m_p1_sound->set_clock(593); m_p1_sound->set_clock(593);
m_p1_sound->set_state(data); m_p1_sound->set_state(data);
} }
else else
if (!m_p2_sound && data) if (m_p2_sound)
m_p2_sound->write(data ? 11 : 15);
else
if (data)
m_samples->start(3, 3); m_samples->start(3, 3);
break; break;
case 3: // hundreds chime case 3: // hundreds chime
m_snd_save = data ? (m_snd_save | 2) : (m_snd_save & 0xfd);
if (m_p1_sound) if (m_p1_sound)
{ {
m_p1_sound->set_clock(265); m_p1_sound->set_clock(265);
m_p1_sound->set_state(data); m_p1_sound->set_state(data);
} }
else else
if (!m_p2_sound && data) if (m_p2_sound)
m_p2_sound->write(data ? 13 : 15);
else
if (data)
m_samples->start(2, 2); m_samples->start(2, 2);
break; break;
case 4: // thousands chime case 4: // thousands chime
m_snd_save = data ? (m_snd_save | 1) : (m_snd_save & 0xfe);
if (m_p1_sound) if (m_p1_sound)
{ {
m_p1_sound->set_clock(153); m_p1_sound->set_clock(153);
m_p1_sound->set_state(data); m_p1_sound->set_state(data);
} }
else else
if (!m_p2_sound && data) if (m_p2_sound)
m_p2_sound->write(data ? 14 : 15);
else
if (data)
m_samples->start(1, 1); m_samples->start(1, 1);
break; break;
case 5: // optional per machine case 5: // optional per machine
@ -492,8 +495,6 @@ void gts1_state::gts1_solenoid_w(offs_t offset, u8 data) // WORKS
case 15: // spare case 15: // spare
break; break;
} }
if (m_p2_sound)
m_p2_sound->write(m_snd_save);
if (offset < 8) if (offset < 8)
m_io_outputs[offset] = data; m_io_outputs[offset] = data;
@ -685,6 +686,7 @@ u8 gts1_state::gts1_lamp_apm_r(offs_t offset) // Think this works - dips seem to
*/ */
void gts1_state::gts1_lamp_apm_w(offs_t offset, u8 data) void gts1_state::gts1_lamp_apm_w(offs_t offset, u8 data)
{ {
u8 sndcmd = 0;
switch (offset) { switch (offset) {
case 0: // LD1-LD4 on jumper J5 case 0: // LD1-LD4 on jumper J5
m_lamp_data = data & 15; m_lamp_data = data & 15;
@ -696,9 +698,11 @@ void gts1_state::gts1_lamp_apm_w(offs_t offset, u8 data)
if (m_p2_sound) if (m_p2_sound)
{ {
// Sound card has inputs from tilt and game over relays // Sound card has inputs from tilt and game over relays
m_snd_save = BIT(m_lamp_data, 0) ? (m_snd_save | 0x40) : (m_snd_save & 0xbf); if (BIT(m_lamp_data, 0))
m_snd_save = BIT(m_lamp_data, 1) ? (m_snd_save | 0x08) : (m_snd_save & 0xf7); sndcmd |= 0x40;
m_p2_sound->write(m_snd_save); if (BIT(m_lamp_data, 1))
sndcmd |= 0x08;
m_p2_sound->write(sndcmd);
} }
} }
if ((m_z30_out >= 1) && (m_z30_out <= 9)) if ((m_z30_out >= 1) && (m_z30_out <= 9))
@ -1065,11 +1069,11 @@ GAME(1977, cleoptra, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gott
GAME(1978, sinbad, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, sinbad, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, sinbadn, sinbad, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad (Norway)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, sinbadn, sinbad, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Sinbad (Norway)", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, jokrpokr, gts1, p0, jokrpokr, gts1_state, empty_init, ROT0, "Gottlieb", "Joker Poker", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, jokrpokr, gts1, p0, jokrpokr, gts1_state, empty_init, ROT0, "Gottlieb", "Joker Poker", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, dragon, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Dragon", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, solaride, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Solar Ride", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, countdwn, gts1, p0, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Count-Down", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
// NE555 beeper // NE555 beeper
GAME(1978, dragon, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Dragon", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, solaride, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Solar Ride", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, countdwn, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Count-Down", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, closeenc, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Close Encounters of the Third Kind", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, closeenc, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Close Encounters of the Third Kind", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1978, charlies, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Charlie's Angels", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1978, charlies, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Charlie's Angels", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )
GAME(1979, pinpool, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Pinball Pool", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE ) GAME(1979, pinpool, gts1, p1, gts1, gts1_state, empty_init, ROT0, "Gottlieb", "Pinball Pool", MACHINE_IS_SKELETON_MECHANICAL | MACHINE_SUPPORTS_SAVE )