mirror of
https://github.com/holub/mame
synced 2025-05-28 16:43:04 +03:00
improved cpu clock and speaker lvl
This commit is contained in:
parent
282a6e03a5
commit
71933553c1
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
- accurate rc osc
|
- accurate rc osc
|
||||||
|
- accurate speaker levels (tone pitch sounds good though)
|
||||||
- is the rom dump good?
|
- is the rom dump good?
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
@ -23,8 +24,9 @@
|
|||||||
|
|
||||||
#include "merlin.lh"
|
#include "merlin.lh"
|
||||||
|
|
||||||
// master clock is a single stage RC oscillator: R=?, C=?
|
// master clock is a single stage RC oscillator: R=27K, C=100pf
|
||||||
#define MERLIN_RC_CLOCK (500000)
|
// this is an approximation compared with recordings
|
||||||
|
#define MERLIN_RC_CLOCK (355000)
|
||||||
|
|
||||||
|
|
||||||
class merlin_state : public driver_device
|
class merlin_state : public driver_device
|
||||||
@ -37,17 +39,18 @@ public:
|
|||||||
m_speaker(*this, "speaker")
|
m_speaker(*this, "speaker")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
required_device<cpu_device> m_maincpu;
|
|
||||||
required_ioport_array<4> m_button_matrix;
|
|
||||||
required_device<speaker_sound_device> m_speaker;
|
|
||||||
|
|
||||||
UINT16 m_o;
|
|
||||||
|
|
||||||
DECLARE_READ8_MEMBER(read_k);
|
DECLARE_READ8_MEMBER(read_k);
|
||||||
DECLARE_WRITE16_MEMBER(write_o);
|
DECLARE_WRITE16_MEMBER(write_o);
|
||||||
DECLARE_WRITE16_MEMBER(write_r);
|
DECLARE_WRITE16_MEMBER(write_r);
|
||||||
|
|
||||||
virtual void machine_start();
|
virtual void machine_start();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_ioport_array<4> m_button_matrix;
|
||||||
|
required_device<speaker_sound_device> m_speaker;
|
||||||
|
|
||||||
|
UINT16 m_o;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -94,15 +97,17 @@ READ8_MEMBER(merlin_state::read_k)
|
|||||||
|
|
||||||
WRITE16_MEMBER(merlin_state::write_o)
|
WRITE16_MEMBER(merlin_state::write_o)
|
||||||
{
|
{
|
||||||
// O0-O3: input mux
|
|
||||||
m_o = data;
|
|
||||||
|
|
||||||
/* The speaker is connected to O4 through O6. The 3 outputs are paralleled for
|
/* The speaker is connected to O4 through O6. The 3 outputs are paralleled for
|
||||||
increased current driving capability. They are passed thru a 220 ohm resistor
|
increased current driving capability. They are passed thru a 220 ohm resistor
|
||||||
and then to the speaker, which has the other side grounded. The software then
|
and then to the speaker, which has the other side grounded. The software then
|
||||||
toggles these lines to make sounds and noises. (There is no audio generator
|
toggles these lines to make sounds and noises. (There is no audio generator
|
||||||
other than toggling it with a software delay between to make tones). */
|
other than toggling it with a software delay between to make tones). */
|
||||||
m_speaker->level_w(m_o & 0x70);
|
static const int count[8] = { 0, 1, 1, 2, 1, 2, 2, 3 };
|
||||||
|
m_speaker->level_w(count[data >> 4 & 7]);
|
||||||
|
|
||||||
|
// O0-O3: input mux
|
||||||
|
// O7: N/C
|
||||||
|
m_o = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE16_MEMBER(merlin_state::write_r)
|
WRITE16_MEMBER(merlin_state::write_r)
|
||||||
@ -177,6 +182,8 @@ static const UINT16 merlin_output_pla[0x20] =
|
|||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const INT16 speaker_levels[] = { 0, 32767, 0, 32767 }; // unknown too, due to output_pla being unknown
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_CONFIG_START( merlin, merlin_state )
|
static MACHINE_CONFIG_START( merlin, merlin_state )
|
||||||
|
|
||||||
@ -194,6 +201,7 @@ static MACHINE_CONFIG_START( merlin, merlin_state )
|
|||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
|
||||||
|
MCFG_SPEAKER_LEVELS(4, speaker_levels)
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user