mirror of
https://github.com/holub/mame
synced 2025-04-26 10:13:37 +03:00
k005289.c: refactored, removed redundant state variables and unneccessary floating point math, added savestate support [Alex Jackson]
This commit is contained in:
parent
8e33098361
commit
d932860d37
@ -28,8 +28,9 @@
|
||||
#include "emu.h"
|
||||
#include "k005289.h"
|
||||
|
||||
#define FREQBASEBITS 16
|
||||
|
||||
// is this an actual hardware limit? or just an arbitrary divider
|
||||
// to bring the output frequency down to a reasonable value for MAME?
|
||||
#define CLOCK_DIVIDER 32
|
||||
|
||||
// device type definition
|
||||
const device_type K005289 = &device_creator<k005289_device>;
|
||||
@ -48,19 +49,10 @@ k005289_device::k005289_device(const machine_config &mconfig, const char *tag, d
|
||||
device_sound_interface(mconfig, *this),
|
||||
m_sound_prom(NULL),
|
||||
m_stream(NULL),
|
||||
m_mclock(0),
|
||||
m_rate(0),
|
||||
m_mixer_table(NULL),
|
||||
m_mixer_lookup(NULL),
|
||||
m_mixer_buffer(NULL),
|
||||
m_k005289_A_frequency(0),
|
||||
m_k005289_B_frequency(0),
|
||||
m_k005289_A_volume(0),
|
||||
m_k005289_B_volume(0),
|
||||
m_k005289_A_waveform(0),
|
||||
m_k005289_B_waveform(0),
|
||||
m_k005289_A_latch(0),
|
||||
m_k005289_B_latch(0)
|
||||
m_mixer_buffer(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
@ -71,14 +63,9 @@ k005289_device::k005289_device(const machine_config &mconfig, const char *tag, d
|
||||
|
||||
void k005289_device::device_start()
|
||||
{
|
||||
k005289_sound_channel *voice;
|
||||
|
||||
voice = m_channel_list;
|
||||
|
||||
/* get stream channels */
|
||||
m_rate = clock()/16;
|
||||
m_rate = clock() / CLOCK_DIVIDER;
|
||||
m_stream = stream_alloc(0, 1, m_rate);
|
||||
m_mclock = clock();
|
||||
|
||||
/* allocate a pair of buffers to mix into - 1 second's worth should be more than enough */
|
||||
m_mixer_buffer = auto_alloc_array(machine(), short, 2 * m_rate);
|
||||
@ -89,14 +76,20 @@ void k005289_device::device_start()
|
||||
m_sound_prom = m_region->base();
|
||||
|
||||
/* reset all the voices */
|
||||
voice[0].frequency = 0;
|
||||
voice[0].volume = 0;
|
||||
voice[0].wave = &m_sound_prom[0];
|
||||
voice[0].counter = 0;
|
||||
voice[1].frequency = 0;
|
||||
voice[1].volume = 0;
|
||||
voice[1].wave = &m_sound_prom[0x100];
|
||||
voice[1].counter = 0;
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
m_counter[i] = 0;
|
||||
m_frequency[i] = 0;
|
||||
m_freq_latch[i] = 0;
|
||||
m_waveform[i] = i * 0x100;
|
||||
m_volume[i] = 0;
|
||||
}
|
||||
|
||||
save_item(NAME(m_counter));
|
||||
save_item(NAME(m_frequency));
|
||||
save_item(NAME(m_freq_latch));
|
||||
save_item(NAME(m_waveform));
|
||||
save_item(NAME(m_volume));
|
||||
}
|
||||
|
||||
|
||||
@ -106,7 +99,6 @@ void k005289_device::device_start()
|
||||
|
||||
void k005289_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
|
||||
{
|
||||
k005289_sound_channel *voice=m_channel_list;
|
||||
stream_sample_t *buffer = outputs[0];
|
||||
short *mix;
|
||||
int i,v,f;
|
||||
@ -114,12 +106,12 @@ void k005289_device::sound_stream_update(sound_stream &stream, stream_sample_t *
|
||||
/* zap the contents of the mixer buffer */
|
||||
memset(m_mixer_buffer, 0, samples * sizeof(INT16));
|
||||
|
||||
v=voice[0].volume;
|
||||
f=voice[0].frequency;
|
||||
v=m_volume[0];
|
||||
f=m_frequency[0];
|
||||
if (v && f)
|
||||
{
|
||||
const unsigned char *w = voice[0].wave;
|
||||
int c = voice[0].counter;
|
||||
const unsigned char *w = m_sound_prom + m_waveform[0];
|
||||
int c = m_counter[0];
|
||||
|
||||
mix = m_mixer_buffer;
|
||||
|
||||
@ -128,21 +120,21 @@ void k005289_device::sound_stream_update(sound_stream &stream, stream_sample_t *
|
||||
{
|
||||
int offs;
|
||||
|
||||
c+=(long)((((float)m_mclock / (float)(f * 16))*(float)(1<<FREQBASEBITS)) / (float)(m_rate / 32));
|
||||
offs = (c >> 16) & 0x1f;
|
||||
c += CLOCK_DIVIDER;
|
||||
offs = (c / f) & 0x1f;
|
||||
*mix++ += ((w[offs] & 0x0f) - 8) * v;
|
||||
}
|
||||
|
||||
/* update the counter for this voice */
|
||||
voice[0].counter = c;
|
||||
m_counter[0] = c % (f * 0x20);
|
||||
}
|
||||
|
||||
v=voice[1].volume;
|
||||
f=voice[1].frequency;
|
||||
v=m_volume[1];
|
||||
f=m_frequency[1];
|
||||
if (v && f)
|
||||
{
|
||||
const unsigned char *w = voice[1].wave;
|
||||
int c = voice[1].counter;
|
||||
const unsigned char *w = m_sound_prom + m_waveform[1];
|
||||
int c = m_counter[1];
|
||||
|
||||
mix = m_mixer_buffer;
|
||||
|
||||
@ -151,13 +143,13 @@ void k005289_device::sound_stream_update(sound_stream &stream, stream_sample_t *
|
||||
{
|
||||
int offs;
|
||||
|
||||
c+=(long)((((float)m_mclock / (float)(f * 16))*(float)(1<<FREQBASEBITS)) / (float)(m_rate / 32));
|
||||
offs = (c >> 16) & 0x1f;
|
||||
c += CLOCK_DIVIDER;
|
||||
offs = (c / f) & 0x1f;
|
||||
*mix++ += ((w[offs] & 0x0f) - 8) * v;
|
||||
}
|
||||
|
||||
/* update the counter for this voice */
|
||||
voice[1].counter = c;
|
||||
m_counter[1] = c % (f * 0x20);
|
||||
}
|
||||
|
||||
/* mix it down */
|
||||
@ -195,58 +187,47 @@ void k005289_device::make_mixer_table(int voices)
|
||||
}
|
||||
|
||||
|
||||
void k005289_device::k005289_recompute()
|
||||
{
|
||||
k005289_sound_channel *voice = m_channel_list;
|
||||
|
||||
m_stream->update(); /* update the streams */
|
||||
|
||||
voice[0].frequency = m_k005289_A_frequency;
|
||||
voice[1].frequency = m_k005289_B_frequency;
|
||||
voice[0].volume = m_k005289_A_volume;
|
||||
voice[1].volume = m_k005289_B_volume;
|
||||
voice[0].wave = &m_sound_prom[32 * m_k005289_A_waveform];
|
||||
voice[1].wave = &m_sound_prom[32 * m_k005289_B_waveform + 0x100];
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( k005289_device::k005289_control_A_w )
|
||||
{
|
||||
m_k005289_A_volume=data&0xf;
|
||||
m_k005289_A_waveform=data>>5;
|
||||
k005289_recompute();
|
||||
m_stream->update();
|
||||
|
||||
m_volume[0] = data & 0xf;
|
||||
m_waveform[0] = data & 0xe0;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( k005289_device::k005289_control_B_w )
|
||||
{
|
||||
m_k005289_B_volume=data&0xf;
|
||||
m_k005289_B_waveform=data>>5;
|
||||
k005289_recompute();
|
||||
m_stream->update();
|
||||
|
||||
m_volume[1] = data & 0xf;
|
||||
m_waveform[1] = (data & 0xe0) + 0x100;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( k005289_device::k005289_pitch_A_w )
|
||||
{
|
||||
m_k005289_A_latch = 0x1000 - offset;
|
||||
m_freq_latch[0] = 0x1000 - offset;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( k005289_device::k005289_pitch_B_w )
|
||||
{
|
||||
m_k005289_B_latch = 0x1000 - offset;
|
||||
m_freq_latch[1] = 0x1000 - offset;
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( k005289_device::k005289_keylatch_A_w )
|
||||
{
|
||||
m_k005289_A_frequency = m_k005289_A_latch;
|
||||
k005289_recompute();
|
||||
m_stream->update();
|
||||
|
||||
m_frequency[0] = m_freq_latch[0];
|
||||
}
|
||||
|
||||
|
||||
WRITE8_MEMBER( k005289_device::k005289_keylatch_B_w )
|
||||
{
|
||||
m_k005289_B_frequency = m_k005289_B_latch;
|
||||
k005289_recompute();
|
||||
m_stream->update();
|
||||
|
||||
m_frequency[1] = m_freq_latch[1];
|
||||
}
|
||||
|
@ -14,19 +14,6 @@
|
||||
MCFG_DEVICE_REPLACE(_tag, K005289, _clock)
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
struct k005289_sound_channel
|
||||
{
|
||||
int frequency;
|
||||
int counter;
|
||||
int volume;
|
||||
const unsigned char *wave;
|
||||
};
|
||||
|
||||
|
||||
// ======================> k005289_device
|
||||
|
||||
class k005289_device : public device_t,
|
||||
@ -53,14 +40,9 @@ public:
|
||||
|
||||
private:
|
||||
void make_mixer_table(int voices);
|
||||
void k005289_recompute();
|
||||
|
||||
private:
|
||||
k005289_sound_channel m_channel_list[2];
|
||||
|
||||
const unsigned char *m_sound_prom;
|
||||
sound_stream *m_stream;
|
||||
int m_mclock;
|
||||
int m_rate;
|
||||
|
||||
/* mixer tables and internal buffers */
|
||||
@ -68,14 +50,11 @@ private:
|
||||
INT16 *m_mixer_lookup;
|
||||
short *m_mixer_buffer;
|
||||
|
||||
int m_k005289_A_frequency;
|
||||
int m_k005289_B_frequency;
|
||||
int m_k005289_A_volume;
|
||||
int m_k005289_B_volume;
|
||||
int m_k005289_A_waveform;
|
||||
int m_k005289_B_waveform;
|
||||
int m_k005289_A_latch;
|
||||
int m_k005289_B_latch;
|
||||
UINT32 m_counter[2];
|
||||
UINT16 m_frequency[2];
|
||||
UINT16 m_freq_latch[2];
|
||||
UINT16 m_waveform[2];
|
||||
UINT8 m_volume[2];
|
||||
};
|
||||
|
||||
extern const device_type K005289;
|
||||
|
@ -206,12 +206,6 @@ READ16_MEMBER(nemesis_state::selected_ip_word_r)
|
||||
}
|
||||
|
||||
|
||||
WRITE16_MEMBER(nemesis_state::nemesis_soundlatch_word_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
soundlatch_byte_w(space, offset, data & 0xff);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(nemesis_state::gx400_speech_start_w)
|
||||
{
|
||||
/* the voice data is not in a rom but in sound RAM at $8000 */
|
||||
@ -266,7 +260,7 @@ static ADDRESS_MAP_START( nemesis_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x055000, 0x055fff) AM_RAM_WRITE(nemesis_colorram2_word_w) AM_SHARE("colorram2")
|
||||
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x05c400, 0x05c401) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x05c800, 0x05c801) AM_WRITE(watchdog_reset16_w) /* probably */
|
||||
@ -300,7 +294,7 @@ static ADDRESS_MAP_START( gx400_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x057000, 0x057fff) AM_RAM /* needed for twinbee */
|
||||
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x05c404, 0x05c405) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x05c406, 0x05c407) AM_READ_PORT("TEST")
|
||||
@ -332,7 +326,7 @@ static ADDRESS_MAP_START( konamigt_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x055000, 0x055fff) AM_RAM_WRITE(nemesis_colorram2_word_w) AM_SHARE("colorram2")
|
||||
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x05c400, 0x05c401) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x05c800, 0x05c801) AM_WRITE(watchdog_reset16_w) /* probably */
|
||||
@ -366,7 +360,7 @@ static ADDRESS_MAP_START( rf2_gx400_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x055000, 0x055fff) AM_RAM_WRITE(nemesis_colorram2_word_w) AM_SHARE("colorram2")
|
||||
AM_RANGE(0x056000, 0x056fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x05a000, 0x05afff) AM_RAM_WRITE(nemesis_palette_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x05c000, 0x05c001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x05c402, 0x05c403) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x05c404, 0x05c405) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x05c406, 0x05c407) AM_READ_PORT("TEST")
|
||||
@ -427,7 +421,7 @@ static ADDRESS_MAP_START( salamand_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x080000, 0x087fff) AM_RAM
|
||||
AM_RANGE(0x090000, 0x091fff) AM_RAM_WRITE(salamander_palette_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x0a0000, 0x0a0001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x0c0004, 0x0c0005) AM_WRITE(watchdog_reset16_w) /* probably */
|
||||
AM_RANGE(0x0c2000, 0x0c2001) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
|
||||
@ -452,7 +446,7 @@ static ADDRESS_MAP_START( blkpnthr_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x080000, 0x081fff) AM_RAM_WRITE(salamander_palette_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x090000, 0x097fff) AM_RAM
|
||||
AM_RANGE(0x0a0000, 0x0a0001) AM_RAM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x0c0004, 0x0c0005) AM_WRITE(watchdog_reset16_w) /* probably */
|
||||
AM_RANGE(0x0c2000, 0x0c2001) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
|
||||
@ -481,7 +475,7 @@ static ADDRESS_MAP_START( citybomb_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x0f0004, 0x0f0005) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x0f0006, 0x0f0007) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
|
||||
AM_RANGE(0x0f0008, 0x0f0009) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x0f0010, 0x0f0011) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x0f0010, 0x0f0011) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x0f0018, 0x0f0019) AM_WRITE(watchdog_reset16_w) /* probably */
|
||||
AM_RANGE(0x0f0020, 0x0f0021) AM_READ(selected_ip_word_r) AM_WRITENOP /* WEC Le Mans 24 control? */
|
||||
AM_RANGE(0x0f8000, 0x0f8001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
|
||||
@ -509,7 +503,7 @@ static ADDRESS_MAP_START( nyanpani_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x070004, 0x070005) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x070006, 0x070007) AM_READ_PORT("IN0") /* Coins, start buttons, test mode */
|
||||
AM_RANGE(0x070008, 0x070009) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x070010, 0x070011) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x070010, 0x070011) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x070018, 0x070019) AM_WRITE(watchdog_reset16_w) /* probably */
|
||||
AM_RANGE(0x078000, 0x078001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
|
||||
AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(nemesis_videoram1_word_w) AM_SHARE("videoram1") /* VRAM */
|
||||
@ -573,7 +567,7 @@ static ADDRESS_MAP_START( hcrash_map, AS_PROGRAM, 16, nemesis_state )
|
||||
AM_RANGE(0x080000, 0x083fff) AM_RAM
|
||||
AM_RANGE(0x090000, 0x091fff) AM_RAM_WRITE(salamander_palette_word_w) AM_SHARE("paletteram")
|
||||
AM_RANGE(0x0a0000, 0x0a0001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE(nemesis_soundlatch_word_w)
|
||||
AM_RANGE(0x0c0000, 0x0c0001) AM_WRITE8(soundlatch_byte_w, 0x00ff)
|
||||
AM_RANGE(0x0c0002, 0x0c0003) AM_READ_PORT("DSW0")
|
||||
AM_RANGE(0x0c0004, 0x0c0005) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x0c0006, 0x0c0007) AM_READ_PORT("TEST")
|
||||
@ -1562,7 +1556,7 @@ static MACHINE_CONFIG_START( nemesis, nemesis_state )
|
||||
MCFG_SOUND_CONFIG(ay8910_interface_2) /* fixed */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* verified with OST */
|
||||
|
||||
MCFG_K005289_ADD("k005289", 3579545/2)
|
||||
MCFG_K005289_ADD("k005289", 3579545)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) /* verified with OST */
|
||||
|
||||
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
|
||||
@ -1605,7 +1599,7 @@ static MACHINE_CONFIG_START( gx400, nemesis_state )
|
||||
MCFG_SOUND_CONFIG(ay8910_interface_2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* verified with OST */
|
||||
|
||||
MCFG_K005289_ADD("k005289", 3579545/2)
|
||||
MCFG_K005289_ADD("k005289", 3579545)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) /* verified with OST */
|
||||
|
||||
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
|
||||
@ -1647,7 +1641,7 @@ static MACHINE_CONFIG_START( konamigt, nemesis_state )
|
||||
MCFG_SOUND_CONFIG(ay8910_interface_2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
|
||||
|
||||
MCFG_K005289_ADD("k005289", 3579545/2)
|
||||
MCFG_K005289_ADD("k005289", 3579545)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -1687,7 +1681,7 @@ static MACHINE_CONFIG_START( rf2_gx400, nemesis_state )
|
||||
MCFG_SOUND_CONFIG(ay8910_interface_2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
|
||||
|
||||
MCFG_K005289_ADD("k005289", 3579545/2)
|
||||
MCFG_K005289_ADD("k005289", 3579545)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
|
||||
|
||||
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
|
||||
@ -2433,7 +2427,7 @@ Notes:
|
||||
VLM5030 - clock 1.7897725MHz [3.579545/2]
|
||||
AY3-8910 - clock 3.579545MHz
|
||||
400A1.2B / 400A2.1B - Texas Instruments TBP24S10 Bipolar PROMs
|
||||
Connected to 0005289, maybe MCU code?
|
||||
Connected to 0005289 (wavetable data)
|
||||
400B03.8G - 2764 EPROM
|
||||
2128 - 2kx8 SRAM
|
||||
6264 - 8kx8 SRAM
|
||||
@ -2441,10 +2435,7 @@ Notes:
|
||||
VSync - 60Hz
|
||||
HSync - 15.52kHz
|
||||
|
||||
Custom Chips - 0005289 (DIP42, possibly MCU?), 0005297 (SDIP64)
|
||||
NOTE! Removing the 0005289 results in the music at start-up having missing notes,
|
||||
as if only one of the AY3-8910's is being used. The game otherwise boots fine and
|
||||
appears to play perfectly without any noticeable errors or missing graphics or sounds.
|
||||
Custom Chips - 0005289 (DIP42, wavetable sound chip), 0005297 (SDIP64)
|
||||
|
||||
|
||||
Bottom PCB
|
||||
@ -2656,7 +2647,7 @@ static MACHINE_CONFIG_START( bubsys, nemesis_state )
|
||||
MCFG_SOUND_CONFIG(ay8910_interface_2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* verified with OST */
|
||||
|
||||
MCFG_SOUND_ADD("k005289", K005289, 3579545/2)
|
||||
MCFG_K005289_ADD("k005289", 3579545)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) /* verified with OST */
|
||||
|
||||
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
|
||||
|
@ -74,7 +74,6 @@ public:
|
||||
DECLARE_READ16_MEMBER(konamigt_input_word_r);
|
||||
DECLARE_WRITE16_MEMBER(selected_ip_word_w);
|
||||
DECLARE_READ16_MEMBER(selected_ip_word_r);
|
||||
DECLARE_WRITE16_MEMBER(nemesis_soundlatch_word_w);
|
||||
DECLARE_READ8_MEMBER(wd_r);
|
||||
DECLARE_WRITE16_MEMBER(nemesis_gfx_flipx_word_w);
|
||||
DECLARE_WRITE16_MEMBER(nemesis_gfx_flipy_word_w);
|
||||
|
Loading…
Reference in New Issue
Block a user