mirror of
https://github.com/holub/mame
synced 2025-07-04 01:18:59 +03:00
Merge branch 'master' of https://github.com/mamedev/mame
This commit is contained in:
commit
a9f2f5ba4a
@ -20,14 +20,27 @@ public:
|
|||||||
k28_state(const machine_config &mconfig, device_type type, const char *tag)
|
k28_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
|
m_tms6100(*this, "tms6100"),
|
||||||
|
m_speech(*this, "speech"),
|
||||||
m_inp_matrix(*this, "IN")
|
m_inp_matrix(*this, "IN")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
// devices
|
// devices
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_device<tms6100_device> m_tms6100;
|
||||||
|
required_device<votrax_sc01_device> m_speech;
|
||||||
required_ioport_array<7> m_inp_matrix;
|
required_ioport_array<7> m_inp_matrix;
|
||||||
|
|
||||||
UINT16 m_inp_mux;
|
UINT8 m_inp_mux;
|
||||||
|
UINT8 m_phoneme;
|
||||||
|
int m_speech_strobe;
|
||||||
|
|
||||||
|
DECLARE_WRITE8_MEMBER(mcu_p0_w);
|
||||||
|
DECLARE_READ8_MEMBER(mcu_p1_r);
|
||||||
|
DECLARE_READ8_MEMBER(mcu_p2_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(mcu_p2_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(mcu_prog_w);
|
||||||
|
DECLARE_READ8_MEMBER(mcu_t1_r);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void machine_start() override;
|
virtual void machine_start() override;
|
||||||
@ -37,9 +50,13 @@ void k28_state::machine_start()
|
|||||||
{
|
{
|
||||||
// zerofill
|
// zerofill
|
||||||
m_inp_mux = 0;
|
m_inp_mux = 0;
|
||||||
|
m_speech_strobe = 0;
|
||||||
|
m_phoneme = 0x3f;
|
||||||
|
|
||||||
// register for savestates
|
// register for savestates
|
||||||
save_item(NAME(m_inp_mux));
|
save_item(NAME(m_inp_mux));
|
||||||
|
save_item(NAME(m_speech_strobe));
|
||||||
|
save_item(NAME(m_phoneme));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -49,12 +66,76 @@ void k28_state::machine_start()
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
WRITE8_MEMBER(k28_state::mcu_p0_w)
|
||||||
|
{
|
||||||
|
// d0,d1: phoneme high bits
|
||||||
|
// d0-d2: input mux high bits
|
||||||
|
m_inp_mux = (m_inp_mux & 0xf) | (~data << 4 & 0x70);
|
||||||
|
m_phoneme = (m_phoneme & 0xf) | (data << 4 & 0x30);
|
||||||
|
|
||||||
|
// d3: SC-01 strobe, latch phoneme on rising edge
|
||||||
|
if (data & 8 && m_speech_strobe == 0)
|
||||||
|
m_speech->write(space, 0, m_phoneme);
|
||||||
|
m_speech_strobe = data & 8;
|
||||||
|
|
||||||
|
//printf("%d",data>>4&1);
|
||||||
|
|
||||||
|
// d4: VSM chip enable
|
||||||
|
// d6: VSM M0
|
||||||
|
// d7: VSM M1
|
||||||
|
m_tms6100->cs_w(~data >> 4 & 1);
|
||||||
|
m_tms6100->m0_w(data >> 6 & 1);
|
||||||
|
m_tms6100->m1_w(data >> 7 & 1);
|
||||||
|
m_tms6100->clk_w(1);
|
||||||
|
m_tms6100->clk_w(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(k28_state::mcu_p1_r)
|
||||||
|
{
|
||||||
|
UINT8 data = 0;
|
||||||
|
|
||||||
|
// multiplexed inputs (active low)
|
||||||
|
for (int i = 0; i < 7; i++)
|
||||||
|
if (m_inp_mux >> i & 1)
|
||||||
|
data |= m_inp_matrix[i]->read();
|
||||||
|
|
||||||
|
return data ^ 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(k28_state::mcu_p2_r)
|
||||||
|
{
|
||||||
|
// d3: VSM data
|
||||||
|
return (m_tms6100->data_line_r()) ? 8 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(k28_state::mcu_p2_w)
|
||||||
|
{
|
||||||
|
// d0-d3: VSM data, input mux and SC-01 phoneme lower nibble
|
||||||
|
m_tms6100->add_w(space, 0, data);
|
||||||
|
m_inp_mux = (m_inp_mux & ~0xf) | (~data & 0xf);
|
||||||
|
m_phoneme = (m_phoneme & ~0xf) | (data & 0xf);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(k28_state::mcu_prog_w)
|
||||||
|
{
|
||||||
|
// 8021 PROG: MM5445 CLK pin
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(k28_state::mcu_t1_r)
|
||||||
|
{
|
||||||
|
printf("1");
|
||||||
|
|
||||||
|
// 8021 T1: SC-01 A/R pin
|
||||||
|
return m_speech->request();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START( k28_mcu_map, AS_IO, 8, k28_state )
|
static ADDRESS_MAP_START( k28_mcu_map, AS_IO, 8, k28_state )
|
||||||
ADDRESS_MAP_UNMAP_LOW
|
AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_WRITE(mcu_p0_w)
|
||||||
//AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1)
|
AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(mcu_p1_r)
|
||||||
//AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2)
|
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(mcu_p2_r, mcu_p2_w)
|
||||||
//AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG)
|
AM_RANGE(MCS48_PORT_PROG, MCS48_PORT_PROG) AM_WRITE(mcu_prog_w)
|
||||||
//AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T1)
|
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(mcu_t1_r)
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
@ -151,6 +232,7 @@ static MACHINE_CONFIG_START( k28, k28_state )
|
|||||||
MCFG_CPU_ADD("maincpu", I8021, XTAL_3_579545MHz)
|
MCFG_CPU_ADD("maincpu", I8021, XTAL_3_579545MHz)
|
||||||
MCFG_CPU_IO_MAP(k28_mcu_map)
|
MCFG_CPU_IO_MAP(k28_mcu_map)
|
||||||
|
|
||||||
|
MCFG_DEVICE_ADD("tms6100", TMS6100, XTAL_3_579545MHz)
|
||||||
MCFG_DEFAULT_LAYOUT(layout_k28)
|
MCFG_DEFAULT_LAYOUT(layout_k28)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
|
Loading…
Reference in New Issue
Block a user