TIMER_CALLBACK_MEMBER(cps_state::cps2_update_digital_volume)
{
int vol_button_state;
vol_button_state = ioport("DIGITALVOL")->read();
if (vol_button_state & 0x01) m_cps2digitalvolumelevel -= 1;
if (vol_button_state & 0x02) m_cps2digitalvolumelevel += 1;
if (m_cps2digitalvolumelevel > 39) m_cps2digitalvolumelevel = 39;
if (m_cps2digitalvolumelevel < 0) m_cps2digitalvolumelevel = 0;
machine().device<qsound_device>("qsound")->set_output_gain(0, m_cps2digitalvolumelevel / 39.0);
machine().device<qsound_device>("qsound")->set_output_gain(1, m_cps2digitalvolumelevel / 39.0);
}
static READ16_HANDLER( cps2_qsound_volume_r )
{
cps_state *state = space.machine().driver_data<cps_state>();
UINT16 cps2_vol_states[40] =
{
0xf010, 0xf008, 0xf004, 0xf002, 0xf001, 0xe810, 0xe808, 0xe804, 0xe802, 0xe801,
0xe410, 0xe408, 0xe404, 0xe402, 0xe401, 0xe210, 0xe208, 0xe204, 0xe202, 0xe201,
0xe110, 0xe108, 0xe104, 0xe102, 0xe101, 0xe090, 0xe088, 0xe084, 0xe082, 0xe081,
0xe050, 0xe048, 0xe044, 0xe042, 0xe041, 0xe030, 0xe028, 0xe024, 0xe022, 0xe021
};
UINT16 result;
result = cps2_vol_states[state->m_cps2digitalvolumelevel];
/* Extra adapter memory (0x660000-0x663fff) available when bit 14 = 0 */
/* Network adapter (ssf2tb) present when bit 15 = 0 */
/* Only game known to use both these so far is SSF2TB */
if (state->m_cps2networkpresent)
return 0x2021; /* SSF2TB doesn't have a digital slider in the test screen */
else
if (state->m_cps2disabledigitalvolume)
return 0xd000; /* digital display isn't shown in test mode */
else
return result;
}