summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/sound/qsound.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/sound/qsound.c')
-rw-r--r--src/emu/sound/qsound.c96
1 files changed, 51 insertions, 45 deletions
diff --git a/src/emu/sound/qsound.c b/src/emu/sound/qsound.c
index 49c3911b044..6b8e679bad1 100644
--- a/src/emu/sound/qsound.c
+++ b/src/emu/sound/qsound.c
@@ -72,7 +72,8 @@ struct QSOUND_CHANNEL
INT32 offset; /* current offset counter */
};
-struct qsound_info
+typedef struct _qsound_state qsound_state;
+struct _qsound_state
{
/* Private variables */
sound_stream * stream; /* Audio stream */
@@ -88,13 +89,23 @@ struct qsound_info
FILE *fpRawDataR;
};
+INLINE qsound_state *get_safe_token(const device_config *device)
+{
+ assert(device != NULL);
+ assert(device->token != NULL);
+ assert(device->type == SOUND);
+ assert(sound_get_type(device) == SOUND_QSOUND);
+ return (qsound_state *)device->token;
+}
+
+
/* Function prototypes */
static STREAM_UPDATE( qsound_update );
-static void qsound_set_command(struct qsound_info *chip, int data, int value);
+static void qsound_set_command(qsound_state *chip, int data, int value);
-static SND_START( qsound )
+static DEVICE_START( qsound )
{
- struct qsound_info *chip = device->token;
+ qsound_state *chip = get_safe_token(device);
int i;
chip->sample_rom = (QSOUND_SRC_SAMPLE *)device->region;
@@ -118,7 +129,7 @@ static SND_START( qsound )
/* Allocate stream */
chip->stream = stream_create(
device, 0, 2,
- clock / QSOUND_CLOCKDIV,
+ device->clock / QSOUND_CLOCKDIV,
chip,
qsound_update );
}
@@ -147,9 +158,9 @@ static SND_START( qsound )
}
}
-static SND_STOP( qsound )
+static DEVICE_STOP( qsound )
{
- struct qsound_info *chip = device->token;
+ qsound_state *chip = get_safe_token(device);
if (chip->fpRawDataR)
{
fclose(chip->fpRawDataR);
@@ -162,31 +173,36 @@ static SND_STOP( qsound )
chip->fpRawDataL = NULL;
}
-WRITE8_HANDLER( qsound_data_h_w )
-{
- struct qsound_info *chip = sndti_token(SOUND_QSOUND, 0);
- chip->data=(chip->data&0xff)|(data<<8);
-}
-
-WRITE8_HANDLER( qsound_data_l_w )
-{
- struct qsound_info *chip = sndti_token(SOUND_QSOUND, 0);
- chip->data=(chip->data&0xff00)|data;
-}
-
-WRITE8_HANDLER( qsound_cmd_w )
+WRITE8_DEVICE_HANDLER( qsound_w )
{
- struct qsound_info *chip = sndti_token(SOUND_QSOUND, 0);
- qsound_set_command(chip, data, chip->data);
+ qsound_state *chip = get_safe_token(device);
+ switch (offset)
+ {
+ case 0:
+ chip->data=(chip->data&0xff)|(data<<8);
+ break;
+
+ case 1:
+ chip->data=(chip->data&0xff00)|data;
+ break;
+
+ case 2:
+ qsound_set_command(chip, data, chip->data);
+ break;
+
+ default:
+ logerror("%s: unexpected qsound write to offset %d == %02X\n", cpuexec_describe_context(device->machine), offset, data);
+ break;
+ }
}
-READ8_HANDLER( qsound_status_r )
+READ8_DEVICE_HANDLER( qsound_r )
{
/* Port ready bit (0x80 if ready) */
return 0x80;
}
-static void qsound_set_command(struct qsound_info *chip, int data, int value)
+static void qsound_set_command(qsound_state *chip, int data, int value)
{
int ch=0,reg=0;
if (data < 0x80)
@@ -301,7 +317,7 @@ static void qsound_set_command(struct qsound_info *chip, int data, int value)
static STREAM_UPDATE( qsound_update )
{
- struct qsound_info *chip = param;
+ qsound_state *chip = param;
int i,j;
int rvol, lvol, count;
struct QSOUND_CHANNEL *pC=&chip->channel[0];
@@ -364,34 +380,24 @@ static STREAM_UPDATE( qsound_update )
* Generic get_info
**************************************************************************/
-static SND_SET_INFO( qsound )
-{
- switch (state)
- {
- /* no parameters to set */
- }
-}
-
-
-SND_GET_INFO( qsound )
+DEVICE_GET_INFO( qsound )
{
switch (state)
{
/* --- the following bits of info are returned as 64-bit signed integers --- */
- case SNDINFO_INT_TOKEN_BYTES: info->i = sizeof(struct qsound_info); break;
+ case DEVINFO_INT_TOKEN_BYTES: info->i = sizeof(qsound_state); break;
/* --- the following bits of info are returned as pointers to data or functions --- */
- case SNDINFO_PTR_SET_INFO: info->set_info = SND_SET_INFO_NAME( qsound ); break;
- case SNDINFO_PTR_START: info->start = SND_START_NAME( qsound ); break;
- case SNDINFO_PTR_STOP: info->stop = SND_STOP_NAME( qsound ); break;
- case SNDINFO_PTR_RESET: /* Nothing */ break;
+ case DEVINFO_FCT_START: info->start = DEVICE_START_NAME( qsound ); break;
+ case DEVINFO_FCT_STOP: info->stop = DEVICE_STOP_NAME( qsound ); break;
+ case DEVINFO_FCT_RESET: /* Nothing */ break;
/* --- the following bits of info are returned as NULL-terminated strings --- */
- case SNDINFO_STR_NAME: strcpy(info->s, "Q-Sound"); break;
- case SNDINFO_STR_CORE_FAMILY: strcpy(info->s, "Capcom custom"); break;
- case SNDINFO_STR_CORE_VERSION: strcpy(info->s, "1.0"); break;
- case SNDINFO_STR_CORE_FILE: strcpy(info->s, __FILE__); break;
- case SNDINFO_STR_CORE_CREDITS: strcpy(info->s, "Copyright Nicola Salmoria and the MAME Team"); break;
+ case DEVINFO_STR_NAME: strcpy(info->s, "Q-Sound"); break;
+ case DEVINFO_STR_FAMILY: strcpy(info->s, "Capcom custom"); break;
+ case DEVINFO_STR_VERSION: strcpy(info->s, "1.0"); break;
+ case DEVINFO_STR_SOURCE_FILE: strcpy(info->s, __FILE__); break;
+ case DEVINFO_STR_CREDITS: strcpy(info->s, "Copyright Nicola Salmoria and the MAME Team"); break;
}
}