mirror of
https://github.com/holub/mame
synced 2025-07-03 09:06:08 +03:00
ay8910.c:
* Fixes mantis bugs 01767, 01769 * Corrected some comments
This commit is contained in:
parent
128bfcc4e0
commit
b7880b33fa
@ -39,8 +39,8 @@
|
|||||||
This is backed by oscilloscope pictures from the datasheet. If a fixed volume
|
This is backed by oscilloscope pictures from the datasheet. If a fixed volume
|
||||||
is set, i.e. enveloppe is disabled, the output voltage is set to 0V. Recordings
|
is set, i.e. enveloppe is disabled, the output voltage is set to 0V. Recordings
|
||||||
I found on the web for gyruss indicate, that the AY-3-8910 offset should
|
I found on the web for gyruss indicate, that the AY-3-8910 offset should
|
||||||
be around 1.5V. This will also make sound levels more compatible with
|
be around 0.2V. This will also make sound levels more compatible with
|
||||||
user descriptions.
|
user observations for scramble.
|
||||||
|
|
||||||
The Model:
|
The Model:
|
||||||
5V 5V
|
5V 5V
|
||||||
@ -66,33 +66,34 @@ where used to calibrate channel mixing for the YM2149. This was done using
|
|||||||
a least square approach using a fixed RL of 1K Ohm.
|
a least square approach using a fixed RL of 1K Ohm.
|
||||||
|
|
||||||
For the AY measurements cited in e.g. openmsx as "Hacker Kay" for a single
|
For the AY measurements cited in e.g. openmsx as "Hacker Kay" for a single
|
||||||
channel were taken. These were normalized to 0 ... 65535 and adapted to on
|
channel were taken. These were normalized to 0 ... 65535 and consequently
|
||||||
offset of 1.5V and a VPP of 1.3V.
|
adapted to an offset of 0.2V and a VPP of 1.3V. These measurements are in
|
||||||
|
line e.g. with the formula used by pcmenc for the volume: vol(i) = exp(i/2-7.5).
|
||||||
|
|
||||||
The following is documentation from the code moved here and amended to reflect
|
The following is documentation from the code moved here and amended to reflect
|
||||||
the changes done:
|
the changes done:
|
||||||
|
|
||||||
Careful studies of the chip output prove that the chip counts up from 0
|
Careful studies of the chip output prove that the chip counts up from 0
|
||||||
until the counter becomes greater or equal to the period. This is an
|
until the counter becomes greater or equal to the period. This is an
|
||||||
important difference when the program is rapidly changing the period to
|
important difference when the program is rapidly changing the period to
|
||||||
modulate the sound. This is worthwhile noting, since the datasheets
|
modulate the sound. This is worthwhile noting, since the datasheets
|
||||||
say, that the chip counts down.
|
say, that the chip counts down.
|
||||||
Also, note that period = 0 is the same as period = 1. This is mentioned
|
Also, note that period = 0 is the same as period = 1. This is mentioned
|
||||||
in the YM2203 data sheets. However, this does NOT apply to the Envelope
|
in the YM2203 data sheets. However, this does NOT apply to the Envelope
|
||||||
period. In that case, period = 0 is half as period = 1.
|
period. In that case, period = 0 is half as period = 1.
|
||||||
|
|
||||||
Envelope shapes:
|
Envelope shapes:
|
||||||
C AtAlH
|
C AtAlH
|
||||||
0 0 x x \___
|
0 0 x x \___
|
||||||
0 1 x x /___
|
0 1 x x /___
|
||||||
1 0 0 0 \\\\
|
1 0 0 0 \\\\
|
||||||
1 0 0 1 \___
|
1 0 0 1 \___
|
||||||
1 0 1 0 \/\/
|
1 0 1 0 \/\/
|
||||||
1 0 1 1 \```
|
1 0 1 1 \```
|
||||||
1 1 0 0 ////
|
1 1 0 0 ////
|
||||||
1 1 0 1 /```
|
1 1 0 1 /```
|
||||||
1 1 1 0 /\/\
|
1 1 1 0 /\/\
|
||||||
1 1 1 1 /___
|
1 1 1 1 /___
|
||||||
|
|
||||||
The envelope counter on the AY-3-8910 has 16 steps. On the YM2149 it
|
The envelope counter on the AY-3-8910 has 16 steps. On the YM2149 it
|
||||||
has twice the steps, happening twice as fast.
|
has twice the steps, happening twice as fast.
|
||||||
@ -190,7 +191,7 @@ struct _ay8910_context
|
|||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Static
|
* Static
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
@ -262,7 +263,7 @@ static const ay_ym_param ay8910_param =
|
|||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Inline
|
* Inline
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
@ -310,7 +311,7 @@ INLINE void build_3D_table(double rl, const ay_ym_param *par, const ay_ym_param
|
|||||||
if (normalize)
|
if (normalize)
|
||||||
{
|
{
|
||||||
for (j=0; j < 32*32*32*8; j++)
|
for (j=0; j < 32*32*32*8; j++)
|
||||||
tab[j] = MAX_OUTPUT * (((temp[j] - min)/(max-min)) - 0.25) * factor;
|
tab[j] = MAX_OUTPUT * (((temp[j] - min)/(max-min))) * factor;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -379,7 +380,7 @@ INLINE UINT16 mix_3D(ay8910_context *psg)
|
|||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Static functions
|
* Static functions
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
@ -546,7 +547,7 @@ static void ay8910_update(void *param,stream_sample_t **inputs, stream_sample_t
|
|||||||
if (psg->holding == 0)
|
if (psg->holding == 0)
|
||||||
{
|
{
|
||||||
psg->count_env++;
|
psg->count_env++;
|
||||||
if (psg->count_env >= ENVELOPE_PERIOD(psg) * psg->step )
|
if (psg->count_env >= ENVELOPE_PERIOD(psg) * psg->step )
|
||||||
{
|
{
|
||||||
psg->count_env = 0;
|
psg->count_env = 0;
|
||||||
psg->env_step--;
|
psg->env_step--;
|
||||||
@ -619,9 +620,9 @@ static void build_mixer_table(ay8910_context *psg)
|
|||||||
build_single_table(psg->intf->res_load[chan], psg->par_env, normalize, psg->env_table[chan], 0);
|
build_single_table(psg->intf->res_load[chan], psg->par_env, normalize, psg->env_table[chan], 0);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* The previous implementation added all three channels up instead of averaging them.
|
* The previous implementation added all three channels up instead of averaging them.
|
||||||
* The factor of 3 will force the same levels if normalizing is used.
|
* The factor of 3 will force the same levels if normalizing is used.
|
||||||
*/
|
*/
|
||||||
build_3D_table(psg->intf->res_load[0], psg->par, psg->par_env, normalize, 3, psg->zero_is_off, psg->vol3d_table);
|
build_3D_table(psg->intf->res_load[0], psg->par, psg->par_env, normalize, 3, psg->zero_is_off, psg->vol3d_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -650,8 +651,8 @@ static void ay8910_statesave(ay8910_context *psg, int sndindex)
|
|||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Public functions
|
* Public functions
|
||||||
*
|
*
|
||||||
* used by e.g. YM2203, YM2210 ...
|
* used by e.g. YM2203, YM2210 ...
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
@ -812,7 +813,7 @@ int ay8910_read_ym(void *chip)
|
|||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Sound Interface
|
* Sound Interface
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static void *ay8910_start(int sndindex, int clock, const void *config)
|
static void *ay8910_start(int sndindex, int clock, const void *config)
|
||||||
@ -947,7 +948,7 @@ void ymz294_get_info(void *token, UINT32 state, sndinfo *info)
|
|||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Read/Write Handlers
|
* Read/Write Handlers
|
||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
READ8_HANDLER( AY8910_read_port_0_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 0)); }
|
READ8_HANDLER( AY8910_read_port_0_r ) { return ay8910_read_ym(sndti_token(SOUND_AY8910, 0)); }
|
||||||
|
Loading…
Reference in New Issue
Block a user