mirror of
https://github.com/holub/mame
synced 2025-06-26 22:29:10 +03:00
Move Zaccaria 1B11107 board into audio/zaccaria.cpp so it can share common stuff with 1B11142.
Yes, I realise catnmous sounds different, the intermediate mixer seems to have that effect. It will all change again when we get netlist filtering anyway.
This commit is contained in:
parent
b946788c2b
commit
babb30af6b
@ -230,7 +230,9 @@ WRITE8_MEMBER(laserbat_state::csound2_w)
|
|||||||
The Cat and Mouse sound board has a 6802 processor with three ROMs,
|
The Cat and Mouse sound board has a 6802 processor with three ROMs,
|
||||||
a 6821 PIA, two AY-3-8910 PSGs, and some other logic and analog
|
a 6821 PIA, two AY-3-8910 PSGs, and some other logic and analog
|
||||||
circuitry. Unfortunately we lack a schematic, so all knowledge of
|
circuitry. Unfortunately we lack a schematic, so all knowledge of
|
||||||
this board is based on tracing the sound program.
|
this board is based on tracing the sound program, examining PCB
|
||||||
|
photos and cross-referencing with the schematic for the 1B11142
|
||||||
|
schematic.
|
||||||
|
|
||||||
The 6821 PIA is mapped at addresses $005C..$005F. The known PIA
|
The 6821 PIA is mapped at addresses $005C..$005F. The known PIA
|
||||||
signal assignments are as follows:
|
signal assignments are as follows:
|
||||||
@ -306,7 +308,8 @@ WRITE8_MEMBER(laserbat_state::csound2_w)
|
|||||||
|
|
||||||
WRITE8_MEMBER(catnmous_state::csound1_w)
|
WRITE8_MEMBER(catnmous_state::csound1_w)
|
||||||
{
|
{
|
||||||
m_pia->ca1_w((data & 0x20) ? 1 : 0);
|
m_audiopcb->sound_w(space, offset, data);
|
||||||
|
|
||||||
m_csound1 = data;
|
m_csound1 = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,66 +318,8 @@ WRITE8_MEMBER(catnmous_state::csound2_w)
|
|||||||
// the bottom bit is used for sprite banking, of all things
|
// the bottom bit is used for sprite banking, of all things
|
||||||
m_gfx2 = memregion("gfx2")->base() + ((data & 0x01) ? 0x0800 : 0x0000);
|
m_gfx2 = memregion("gfx2")->base() + ((data & 0x01) ? 0x0800 : 0x0000);
|
||||||
|
|
||||||
// the top bit is called RESET on the wiring diagram - assume it resets the sound CPU
|
// the top bit is called RESET on the wiring diagram
|
||||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, (data & 0x80) ? ASSERT_LINE : CLEAR_LINE);
|
m_audiopcb->reset_w((data & 0x80) ? 1 : 0);
|
||||||
|
|
||||||
m_csound2 = data;
|
m_csound2 = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(catnmous_state::pia_porta_r)
|
|
||||||
{
|
|
||||||
UINT8 const control = m_pia->b_output();
|
|
||||||
UINT8 data = 0xff;
|
|
||||||
|
|
||||||
if (0x01 == (control & 0x03))
|
|
||||||
data &= m_psg1->data_r(space, 0);
|
|
||||||
|
|
||||||
if (0x04 == (control & 0x0c))
|
|
||||||
data &= m_psg2->data_r(space, 0);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(catnmous_state::pia_porta_w)
|
|
||||||
{
|
|
||||||
UINT8 const control = m_pia->b_output();
|
|
||||||
|
|
||||||
if (control & 0x02)
|
|
||||||
m_psg1->data_address_w(space, (control >> 0) & 0x01, data);
|
|
||||||
|
|
||||||
if (control & 0x08)
|
|
||||||
m_psg2->data_address_w(space, (control >> 2) & 0x01, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(catnmous_state::pia_portb_w)
|
|
||||||
{
|
|
||||||
if (data & 0x02)
|
|
||||||
m_psg1->data_address_w(space, (data >> 0) & 0x01, m_pia->a_output());
|
|
||||||
|
|
||||||
if (data & 0x08)
|
|
||||||
m_psg2->data_address_w(space, (data >> 2) & 0x01, m_pia->a_output());
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(catnmous_state::psg1_porta_w)
|
|
||||||
{
|
|
||||||
// similar to zaccaria.c since we have no clue how this board really works
|
|
||||||
// this code could be completely wrong/inappropriate for this game for all we know
|
|
||||||
static double const table[8] = {
|
|
||||||
RES_K(8.2),
|
|
||||||
RES_R(820),
|
|
||||||
RES_K(3.3),
|
|
||||||
RES_R(150),
|
|
||||||
RES_K(5.6),
|
|
||||||
RES_R(390),
|
|
||||||
RES_K(1.5),
|
|
||||||
RES_R(47) };
|
|
||||||
RES_VOLTAGE_DIVIDER(RES_K(4.7), table[data & 0x07]);
|
|
||||||
m_psg2->set_volume(1, 150 * RES_VOLTAGE_DIVIDER(RES_K(4.7), table[data & 0x07]));
|
|
||||||
}
|
|
||||||
|
|
||||||
READ8_MEMBER(catnmous_state::psg1_portb_r)
|
|
||||||
{
|
|
||||||
// the sound program masks out the three most significant bits
|
|
||||||
// assume they're not connected and read high from the internal pull-ups
|
|
||||||
return m_csound1 | 0xe0;
|
|
||||||
}
|
|
||||||
|
@ -5,73 +5,125 @@
|
|||||||
|
|
||||||
#include "cpu/m6800/m6800.h"
|
#include "cpu/m6800/m6800.h"
|
||||||
#include "machine/clock.h"
|
#include "machine/clock.h"
|
||||||
|
#include "machine/rescap.h"
|
||||||
#include "sound/dac.h"
|
#include "sound/dac.h"
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// GLOBAL VARIABLES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
device_type const ZACCARIA_1B11107 = &device_creator<zac1b11107_audio_device>;
|
||||||
device_type const ZACCARIA_1B11142 = &device_creator<zac1b11142_audio_device>;
|
device_type const ZACCARIA_1B11142 = &device_creator<zac1b11142_audio_device>;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// MEMORY MAPS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* slave sound cpu, produces music and sound effects
|
base melody/SFX generator CPU map
|
||||||
* mapping:
|
1B11107 and 1B11142 both have a 6802 with internal RAM and a PIA accessed at 0x500c
|
||||||
* A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
|
*/
|
||||||
* 0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
|
static ADDRESS_MAP_START(zac1b111xx_melody_base_map, AS_PROGRAM, 8, zac1b111xx_melody_base)
|
||||||
* 0 0 0 x x x x x x x x x x x x x Open bus (for area that doesn't overlap ram)
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
* 0 0 1 x x x x x x x x x x x x x Open bus
|
AM_RANGE(0x0000, 0x007f) AM_RAM // 6802 internal RAM
|
||||||
* 0 1 0 x x x x x x x x x 0 0 x x Open bus
|
AM_RANGE(0x400c, 0x400f) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("melodypia", pia6821_device, read, write)
|
||||||
* 0 1 0 x x x x x x x x x 0 1 x x Open bus
|
ADDRESS_MAP_END
|
||||||
* 0 1 0 x x x x x x x x x 1 0 x x Open bus
|
|
||||||
* 0 1 0 x x x x x x x x x 1 1 * * RW 6821 PIA @ 4I
|
|
||||||
* 0 1 1 x x x x x x x x x x x x x Open bus
|
/*
|
||||||
* 1 0 % % * * * * * * * * * * * * R /CS4A: Enable ROM 13
|
1B11107 sound CPU, produces music and sound effects
|
||||||
* 1 1 % % * * * * * * * * * * * * R /CS5A: Enable ROM 9
|
mapping (from tracing sound program and cross-referencing 1B1142 schematic):
|
||||||
* note that the % bits go to pins 2 (6802 A12) and 26 (6802 A13) of the roms
|
A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
|
||||||
* monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
|
0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
|
||||||
* hence for actual chips used, the mem map is:
|
0 0 0 x x x x x x x x x x x x x Open bus (for area that doesn't overlap RAM)
|
||||||
* 1 0 x * * * * * * * * * * * * * R /CS4A: Enable ROM 13
|
0 0 1 x x x x x x x x x x x x x Open bus
|
||||||
* 1 1 x * * * * * * * * * * * * * R /CS5A: Enable ROM 9
|
0 1 0 x x x x x x x x x 0 0 x x Open bus
|
||||||
*
|
0 1 0 x x x x x x x x x 0 1 x x Open bus
|
||||||
* 6821 PIA:
|
0 1 0 x x x x x x x x x 1 0 x x Open bus
|
||||||
|
0 1 0 x x x x x x x x x 1 1 * * RW 6821 PIA @ 1G
|
||||||
|
0 1 1 x x x x x x x x x x x x x Open bus
|
||||||
|
1 0 x x x x x x x x x x x x x x Open bus
|
||||||
|
1 1 0 0 * * * * * * * * * * * * R Enable ROM @ 1F
|
||||||
|
1 1 0 1 * * * * * * * * * * * * Open bus
|
||||||
|
1 1 1 0 * * * * * * * * * * * * R Enable ROM @ 1D
|
||||||
|
1 1 1 1 * * * * * * * * * * * * R Enable ROM @ 1E
|
||||||
|
|
||||||
|
6821 PIA:
|
||||||
|
* CA1 comes from the SOUND 5 line on the input (which may also be connected to an input on the AY chip at 1H)
|
||||||
|
* CB1 comes from the 6802's clock divided by 4096*2 (about 437Hz)
|
||||||
|
* PA0-7 connect to the data busses of the AY-3-8910 chips
|
||||||
|
* PB0 and PB1 connect to the BC1 and BDIR pins of the AY chip at 1H
|
||||||
|
* PB2 and PB3 connect to the BC1 and BDIR pins of the AY chip at 1I
|
||||||
|
*/
|
||||||
|
static ADDRESS_MAP_START(zac1b11107_melody_map, AS_PROGRAM, 8, zac1b11107_audio_device)
|
||||||
|
AM_IMPORT_FROM(zac1b111xx_melody_base_map)
|
||||||
|
AM_RANGE(0xc000, 0xcfff) AM_ROM // ROM @ 1F
|
||||||
|
AM_RANGE(0xe000, 0xffff) AM_ROM // ROM @ 1D, 1E
|
||||||
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
1B11142 slave sound CPU, produces music and sound effects
|
||||||
|
mapping:
|
||||||
|
A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
|
||||||
|
0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
|
||||||
|
0 0 0 x x x x x x x x x x x x x Open bus (for area that doesn't overlap RAM)
|
||||||
|
0 0 1 x x x x x x x x x x x x x Open bus
|
||||||
|
0 1 0 x x x x x x x x x 0 0 x x Open bus
|
||||||
|
0 1 0 x x x x x x x x x 0 1 x x Open bus
|
||||||
|
0 1 0 x x x x x x x x x 1 0 x x Open bus
|
||||||
|
0 1 0 x x x x x x x x x 1 1 * * RW 6821 PIA @ 4I
|
||||||
|
0 1 1 x x x x x x x x x x x x x Open bus
|
||||||
|
1 0 % % * * * * * * * * * * * * R /CS4A: Enable ROM 13
|
||||||
|
1 1 % % * * * * * * * * * * * * R /CS5A: Enable ROM 9
|
||||||
|
note that the % bits go to pins 2 (6802 A12) and 26 (6802 A13) of the roms
|
||||||
|
monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
|
||||||
|
hence for actual chips used, the mem map is:
|
||||||
|
1 0 x * * * * * * * * * * * * * R /CS4A: Enable ROM 13
|
||||||
|
1 1 x * * * * * * * * * * * * * R /CS5A: Enable ROM 9
|
||||||
|
|
||||||
|
6821 PIA:
|
||||||
* CA1 comes from the master sound cpu's latch bit 7 (which is also connected to the AY chip at 4G's IOB1)
|
* CA1 comes from the master sound cpu's latch bit 7 (which is also connected to the AY chip at 4G's IOB1)
|
||||||
* CB1 comes from the 6802's clock divided by 4096*2 (about 437Hz)
|
* CB1 comes from the 6802's clock divided by 4096*2 (about 437Hz)
|
||||||
* CA2 and CB2 are not connected
|
* CA2 and CB2 are not connected
|
||||||
* PA0-7 connect to the data busses of the AY-3-8910 chips
|
* PA0-7 connect to the data busses of the AY-3-8910 chips
|
||||||
* PB0 and PB1 connect to the BC1 and BDIR pins of the AY chip at 4G
|
* PB0 and PB1 connect to the BC1 and BDIR pins of the AY chip at 4G
|
||||||
* PB2 and PB3 connect to the BC1 and BDIR pins of the AY chip at 4H.
|
* PB2 and PB3 connect to the BC1 and BDIR pins of the AY chip at 4H
|
||||||
*/
|
*/
|
||||||
static ADDRESS_MAP_START(zac1b11142_melody_map, AS_PROGRAM, 8, zac1b11142_audio_device)
|
static ADDRESS_MAP_START(zac1b11142_melody_map, AS_PROGRAM, 8, zac1b11142_audio_device)
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
AM_IMPORT_FROM(zac1b111xx_melody_base_map)
|
||||||
AM_RANGE(0x0000, 0x007f) AM_RAM // 6802 internal RAM
|
AM_RANGE(0x8000, 0x9fff) AM_MIRROR(0x2000) AM_ROM // ROM 13
|
||||||
AM_RANGE(0x400c, 0x400f) AM_MIRROR(0x1ff0) AM_DEVREADWRITE("pia_4i", pia6821_device, read, write)
|
AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM // ROM 9
|
||||||
AM_RANGE(0x8000, 0x9fff) AM_MIRROR(0x2000) AM_ROM // rom 13
|
|
||||||
AM_RANGE(0xc000, 0xdfff) AM_MIRROR(0x2000) AM_ROM // rom 9
|
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* master sound cpu, controls speech directly
|
1B11142 master sound CPU, controls DAC and speech directly
|
||||||
* mapping:
|
mapping:
|
||||||
* A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
|
A15 A14 A13 A12 A11 A10 A09 A08 A07 A06 A05 A04 A03 A02 A01 A00
|
||||||
* 0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
|
0 0 0 0 0 0 0 0 0 * * * * * * * RW 6802 internal ram
|
||||||
* x 0 0 0 x x x x 1 x x 0 x x * * Open bus (test mode writes as if there was another PIA here)
|
x 0 0 0 x x x x 1 x x 0 x x * * Open bus (test mode writes as if there was another PIA here)
|
||||||
* x 0 0 0 x x x x 1 x x 1 x x * * RW 6821 PIA @ 1I
|
x 0 0 0 x x x x 1 x x 1 x x * * RW 6821 PIA @ 1I
|
||||||
* x 0 0 1 0 0 x x x x x x x x x x W MC1408 DAC
|
x 0 0 1 0 0 x x x x x x x x x x W MC1408 DAC
|
||||||
* x x 0 1 0 1 x x x x x x x x x x W Command to slave melody cpu
|
x x 0 1 0 1 x x x x x x x x x x W Command to slave melody cpu
|
||||||
* x x 0 1 1 0 x x x x x x x x x x R Command read latch from z80
|
x x 0 1 1 0 x x x x x x x x x x R Command read latch from z80
|
||||||
* x x 0 1 1 1 x x x x x x x x x x Open bus
|
x x 0 1 1 1 x x x x x x x x x x Open bus
|
||||||
* % % 1 0 * * * * * * * * * * * * R /CS1A: Enable ROM 8
|
% % 1 0 * * * * * * * * * * * * R /CS1A: Enable ROM 8
|
||||||
* % % 1 1 * * * * * * * * * * * * R /CS0A: Enable ROM 7
|
% % 1 1 * * * * * * * * * * * * R /CS0A: Enable ROM 7
|
||||||
* note that the % bits go to pins 2 (6802 A14) and 26 (6802 A15) of the roms
|
note that the % bits go to pins 2 (6802 A14) and 26 (6802 A15) of the roms
|
||||||
* monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
|
monymony and jackrabt both use 2764 roms, which use pin 2 as A12 and pin 26 as N/C don't care
|
||||||
* hence for actual chips used, the mem map is:
|
hence for actual chips used, the mem map is:
|
||||||
* x * 1 0 * * * * * * * * * * * * R /CS1A: Enable ROM 8
|
x * 1 0 * * * * * * * * * * * * R /CS1A: Enable ROM 8
|
||||||
* x * 1 1 * * * * * * * * * * * * R /CS0A: Enable ROM 7
|
x * 1 1 * * * * * * * * * * * * R /CS0A: Enable ROM 7
|
||||||
*
|
|
||||||
* 6821 PIA:
|
6821 PIA:
|
||||||
* PA0-7, PB0-1, CA2 and CB1 connect to the TMS5200
|
PA0-7, PB0-1, CA2 and CB1 connect to the TMS5200
|
||||||
* CA1 and CB2 are not connected, though the test mode assumes there's something connected to CB2 (possibly another LED like the one connected to PB4)
|
CA1 and CB2 are not connected, though the test mode assumes there's something connected to CB2 (possibly another LED like the one connected to PB4)
|
||||||
* PB3 connects to 'ACS' which goes to the Z80
|
PB3 connects to 'ACS' which goes to the Z80
|
||||||
*/
|
*/
|
||||||
static ADDRESS_MAP_START(zac1b11142_audio_map, AS_PROGRAM, 8, zac1b11142_audio_device)
|
static ADDRESS_MAP_START(zac1b11142_audio_map, AS_PROGRAM, 8, zac1b11142_audio_device)
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
ADDRESS_MAP_UNMAP_HIGH
|
||||||
AM_RANGE(0x0000, 0x007f) AM_RAM // 6802 internal RAM
|
AM_RANGE(0x0000, 0x007f) AM_RAM // 6802 internal RAM
|
||||||
@ -86,29 +138,58 @@ static ADDRESS_MAP_START(zac1b11142_audio_map, AS_PROGRAM, 8, zac1b11142_audio_d
|
|||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
MACHINE_CONFIG_FRAGMENT(zac1b11142_config)
|
|
||||||
|
//**************************************************************************
|
||||||
|
// MACHINE FRAGMENTS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
MACHINE_CONFIG_FRAGMENT(zac1b111xx_base_config)
|
||||||
MCFG_CPU_ADD("melodycpu", M6802, XTAL_3_579545MHz) // verified on pcb
|
MCFG_CPU_ADD("melodycpu", M6802, XTAL_3_579545MHz) // verified on pcb
|
||||||
MCFG_CPU_PROGRAM_MAP(zac1b11142_melody_map)
|
MCFG_CPU_PROGRAM_MAP(zac1b111xx_melody_base_map)
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("timebase", CLOCK, XTAL_3_579545MHz/4096/2) // CPU clock divided using 4040 and half of 74LS74
|
MCFG_DEVICE_ADD("timebase", CLOCK, XTAL_3_579545MHz/4096/2) // CPU clock divided using 4040 and half of 74LS74
|
||||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("pia_4i", pia6821_device, cb1_w))
|
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("melodypia", pia6821_device, cb1_w))
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("pia_4i", PIA6821, 0)
|
MCFG_DEVICE_ADD("melodypia", PIA6821, 0)
|
||||||
MCFG_PIA_READPA_HANDLER(READ8(zac1b11142_audio_device, pia_4i_porta_r))
|
MCFG_PIA_READPA_HANDLER(READ8(zac1b111xx_melody_base, melodypia_porta_r))
|
||||||
MCFG_PIA_WRITEPA_HANDLER(WRITE8(zac1b11142_audio_device, pia_4i_porta_w))
|
MCFG_PIA_WRITEPA_HANDLER(WRITE8(zac1b111xx_melody_base, melodypia_porta_w))
|
||||||
MCFG_PIA_WRITEPB_HANDLER(WRITE8(zac1b11142_audio_device, pia_4i_portb_w))
|
MCFG_PIA_WRITEPB_HANDLER(WRITE8(zac1b111xx_melody_base, melodypia_portb_w))
|
||||||
MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("melodycpu", m6802_cpu_device, nmi_line))
|
MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("melodycpu", m6802_cpu_device, nmi_line))
|
||||||
MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("melodycpu", m6802_cpu_device, irq_line))
|
MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("melodycpu", m6802_cpu_device, irq_line))
|
||||||
|
|
||||||
MCFG_SOUND_ADD("ay_4g", AY8910, XTAL_3_579545MHz/2) // CPU clock divided using 4040
|
MCFG_SOUND_ADD("melodypsg1", AY8910, XTAL_3_579545MHz/2) // CPU clock divided using 4040
|
||||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4g_porta_w))
|
MCFG_AY8910_PORT_B_READ_CB(READ8(zac1b111xx_melody_base, melodypsg1_portb_r))
|
||||||
MCFG_AY8910_PORT_B_READ_CB(READ8(zac1b11142_audio_device, ay_4g_portb_r))
|
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.15)
|
|
||||||
|
|
||||||
MCFG_SOUND_ADD("ay_4h", AY8910, XTAL_3_579545MHz/2) // CPU clock divided using 4040
|
MCFG_SOUND_ADD("melodypsg2", AY8910, XTAL_3_579545MHz/2) // CPU clock divided using 4040
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
MACHINE_CONFIG_DERIVED(zac1b11107_config, zac1b111xx_base_config)
|
||||||
|
MCFG_CPU_MODIFY("melodycpu")
|
||||||
|
MCFG_CPU_PROGRAM_MAP(zac1b11107_melody_map)
|
||||||
|
|
||||||
|
MCFG_DEVICE_MODIFY("melodypsg1")
|
||||||
|
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11107_audio_device, melodypsg1_porta_w))
|
||||||
|
MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.5, 0)
|
||||||
|
|
||||||
|
MCFG_DEVICE_MODIFY("melodypsg2")
|
||||||
|
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11107_audio_device, melodypsg2_porta_w))
|
||||||
|
MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.5, 0)
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
MACHINE_CONFIG_DERIVED(zac1b11142_config, zac1b111xx_base_config)
|
||||||
|
MCFG_CPU_MODIFY("melodycpu")
|
||||||
|
MCFG_CPU_PROGRAM_MAP(zac1b11142_melody_map)
|
||||||
|
|
||||||
|
MCFG_DEVICE_MODIFY("melodypsg1")
|
||||||
|
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4g_porta_w))
|
||||||
|
MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.15, 0)
|
||||||
|
|
||||||
|
MCFG_DEVICE_MODIFY("melodypsg2")
|
||||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4h_porta_w))
|
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4h_porta_w))
|
||||||
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4h_portb_w))
|
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(zac1b11142_audio_device, ay_4h_portb_w))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.15)
|
MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.15, 0)
|
||||||
|
|
||||||
MCFG_CPU_ADD("audiocpu", M6802, XTAL_3_579545MHz) // verified on pcb
|
MCFG_CPU_ADD("audiocpu", M6802, XTAL_3_579545MHz) // verified on pcb
|
||||||
MCFG_CPU_PROGRAM_MAP(zac1b11142_audio_map)
|
MCFG_CPU_PROGRAM_MAP(zac1b11142_audio_map)
|
||||||
@ -120,17 +201,22 @@ MACHINE_CONFIG_FRAGMENT(zac1b11142_config)
|
|||||||
MCFG_PIA_WRITEPB_HANDLER(WRITE8(zac1b11142_audio_device, pia_1i_portb_w))
|
MCFG_PIA_WRITEPB_HANDLER(WRITE8(zac1b11142_audio_device, pia_1i_portb_w))
|
||||||
|
|
||||||
MCFG_DAC_ADD("dac_1f")
|
MCFG_DAC_ADD("dac_1f")
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.80)
|
MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.80, 0)
|
||||||
|
|
||||||
// There is no xtal, the clock is obtained from a RC oscillator as shown in the TMS5220 datasheet (R=100kOhm C=22pF)
|
// There is no xtal, the clock is obtained from a RC oscillator as shown in the TMS5220 datasheet (R=100kOhm C=22pF)
|
||||||
// 162kHz measured on pin 3 20 minutes after power on, clock would then be 162.3*4=649.2kHz
|
// 162kHz measured on pin 3 20 minutes after power on, clock would then be 162.3*4=649.2kHz
|
||||||
MCFG_SOUND_ADD("speech", TMS5200, 649200) // ROMCLK pin measured at 162.3Khz, OSC is exactly *4 of that)
|
MCFG_SOUND_ADD("speech", TMS5200, 649200) // ROMCLK pin measured at 162.3Khz, OSC is exactly *4 of that)
|
||||||
MCFG_TMS52XX_IRQ_HANDLER(DEVWRITELINE("pia_1i", pia6821_device, cb1_w))
|
MCFG_TMS52XX_IRQ_HANDLER(DEVWRITELINE("pia_1i", pia6821_device, cb1_w))
|
||||||
MCFG_TMS52XX_READYQ_HANDLER(DEVWRITELINE("pia_1i", pia6821_device, ca2_w))
|
MCFG_TMS52XX_READYQ_HANDLER(DEVWRITELINE("pia_1i", pia6821_device, ca2_w))
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.80)
|
MCFG_MIXER_ROUTE(ALL_OUTPUTS, DEVICE_SELF_OWNER, 0.80, 0)
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// I/O PORT DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
INPUT_PORTS_START(zac1b11142_ioports)
|
INPUT_PORTS_START(zac1b11142_ioports)
|
||||||
PORT_START("1B11142")
|
PORT_START("1B11142")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
@ -140,24 +226,151 @@ INPUT_PORTS_START(zac1b11142_ioports)
|
|||||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("P1")
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("P1") // test button? generates NMI on master CPU
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
zac1b11142_audio_device::zac1b11142_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock)
|
|
||||||
: device_t(mconfig, ZACCARIA_1B11142, "Zaccaria 1B11142 Sound Board", tag, owner, clock, "zac1b11142", __FILE__)
|
//**************************************************************************
|
||||||
|
// BASE MELODY GENERATOR DEVICE CLASS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
zac1b111xx_melody_base::zac1b111xx_melody_base(
|
||||||
|
machine_config const &mconfig,
|
||||||
|
device_type devtype,
|
||||||
|
char const *name,
|
||||||
|
char const *tag,
|
||||||
|
device_t *owner,
|
||||||
|
UINT32 clock,
|
||||||
|
char const *shortname,
|
||||||
|
char const *source)
|
||||||
|
: device_t(mconfig, devtype, name, tag, owner, clock, shortname, source)
|
||||||
, device_mixer_interface(mconfig, *this, 1)
|
, device_mixer_interface(mconfig, *this, 1)
|
||||||
, m_acs_cb(*this)
|
|
||||||
, m_melodycpu(*this, "melodycpu")
|
, m_melodycpu(*this, "melodycpu")
|
||||||
, m_pia_4i(*this, "pia_4i")
|
, m_melodypia(*this, "melodypia")
|
||||||
, m_ay_4g(*this, "ay_4g")
|
, m_melodypsg1(*this, "melodypsg1")
|
||||||
, m_ay_4h(*this, "ay_4h")
|
, m_melodypsg2(*this, "melodypsg2")
|
||||||
|
, m_melody_command(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(zac1b111xx_melody_base::melodypia_porta_r)
|
||||||
|
{
|
||||||
|
UINT8 const control = m_melodypia->b_output();
|
||||||
|
UINT8 data = 0xff;
|
||||||
|
|
||||||
|
if (0x01 == (control & 0x03))
|
||||||
|
data &= m_melodypsg1->data_r(space, 0);
|
||||||
|
|
||||||
|
if (0x04 == (control & 0x0c))
|
||||||
|
data &= m_melodypsg2->data_r(space, 0);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(zac1b111xx_melody_base::melodypia_porta_w)
|
||||||
|
{
|
||||||
|
UINT8 const control = m_melodypia->b_output();
|
||||||
|
|
||||||
|
if (control & 0x02)
|
||||||
|
m_melodypsg1->data_address_w(space, (control >> 0) & 0x01, data);
|
||||||
|
|
||||||
|
if (control & 0x08)
|
||||||
|
m_melodypsg2->data_address_w(space, (control >> 2) & 0x01, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(zac1b111xx_melody_base::melodypia_portb_w)
|
||||||
|
{
|
||||||
|
if (data & 0x02)
|
||||||
|
m_melodypsg1->data_address_w(space, (data >> 0) & 0x01, m_melodypia->a_output());
|
||||||
|
|
||||||
|
if (data & 0x08)
|
||||||
|
m_melodypsg2->data_address_w(space, (data >> 2) & 0x01, m_melodypia->a_output());
|
||||||
|
}
|
||||||
|
|
||||||
|
READ8_MEMBER(zac1b111xx_melody_base::melodypsg1_portb_r)
|
||||||
|
{
|
||||||
|
return m_melody_command;
|
||||||
|
}
|
||||||
|
|
||||||
|
void zac1b111xx_melody_base::device_start()
|
||||||
|
{
|
||||||
|
save_item(NAME(m_melody_command));
|
||||||
|
}
|
||||||
|
|
||||||
|
void zac1b111xx_melody_base::device_reset()
|
||||||
|
{
|
||||||
|
m_melody_command = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// 1B11107-SPECIFIC IMPLEMENTATION
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
zac1b11107_audio_device::zac1b11107_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock)
|
||||||
|
: zac1b111xx_melody_base(mconfig, ZACCARIA_1B11107, "Zaccaria 1B11107 Sound Board", tag, owner, clock, "zac1b11107", __FILE__)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(zac1b11107_audio_device::sound_w)
|
||||||
|
{
|
||||||
|
// the sound program masks out the three most significant bits
|
||||||
|
// assume the top two bits are not connected and read high from the internal pull-ups
|
||||||
|
m_melodypia->ca1_w((data >> 5) & 0x01);
|
||||||
|
m_melody_command = data | 0xc0;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(zac1b11107_audio_device::reset_w)
|
||||||
|
{
|
||||||
|
// TODO: there is a pulse-stretching network attached that should be simulated
|
||||||
|
m_melodycpu->set_input_line(INPUT_LINE_RESET, state);
|
||||||
|
// TODO: holds the reset line of m_melodypia - can't implement this in MAME at this time
|
||||||
|
// TODO: holds the reset line of m_melodypsg1 - can't implement this in MAME at this time
|
||||||
|
// TODO: holds the reset line of m_melodypsg2 - can't implement this in MAME at this time
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(zac1b11107_audio_device::melodypsg1_porta_w)
|
||||||
|
{
|
||||||
|
// similar to 1B11142
|
||||||
|
// TODO: move this to netlist audio where it belongs, along with the rest of the filtering
|
||||||
|
static double const table[8] = {
|
||||||
|
RES_K(8.2),
|
||||||
|
RES_R(820),
|
||||||
|
RES_K(3.3),
|
||||||
|
RES_R(150),
|
||||||
|
RES_K(5.6),
|
||||||
|
RES_R(390),
|
||||||
|
RES_K(1.5),
|
||||||
|
RES_R(47) };
|
||||||
|
m_melodypsg2->set_volume(1, 150 * RES_VOLTAGE_DIVIDER(RES_K(4.7), table[data & 0x07]));
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(zac1b11107_audio_device::melodypsg2_porta_w)
|
||||||
|
{
|
||||||
|
// TODO: assume LEVELT is controlled here as is the case for 1B11142?
|
||||||
|
}
|
||||||
|
|
||||||
|
machine_config_constructor zac1b11107_audio_device::device_mconfig_additions() const
|
||||||
|
{
|
||||||
|
return MACHINE_CONFIG_NAME(zac1b11107_config);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// 1B11142-SPECIFIC IMPLEMENTATION
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
zac1b11142_audio_device::zac1b11142_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock)
|
||||||
|
: zac1b111xx_melody_base(mconfig, ZACCARIA_1B11142, "Zaccaria 1B11142 Sound Board", tag, owner, clock, "zac1b11142", __FILE__)
|
||||||
|
, m_acs_cb(*this)
|
||||||
, m_audiocpu(*this, "audiocpu")
|
, m_audiocpu(*this, "audiocpu")
|
||||||
, m_pia_1i(*this, "pia_1i")
|
, m_pia_1i(*this, "pia_1i")
|
||||||
, m_speech(*this, "speech")
|
, m_speech(*this, "speech")
|
||||||
, m_inputs(*this, "1B11142")
|
, m_inputs(*this, "1B11142")
|
||||||
, m_host_command(0)
|
, m_host_command(0)
|
||||||
, m_melody_command(0)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,48 +389,14 @@ WRITE_LINE_MEMBER(zac1b11142_audio_device::ressound_w)
|
|||||||
{
|
{
|
||||||
// TODO: there is a pulse-stretching network attached that should be simulated
|
// TODO: there is a pulse-stretching network attached that should be simulated
|
||||||
m_melodycpu->set_input_line(INPUT_LINE_RESET, state);
|
m_melodycpu->set_input_line(INPUT_LINE_RESET, state);
|
||||||
// TODO: holds the reset line of m_pia_4i - can't implement this in MAME at this time
|
// TODO: holds the reset line of m_melodypia - can't implement this in MAME at this time
|
||||||
// TODO: holds the reset line of m_ay_4g - can't implement this in MAME at this time
|
// TODO: holds the reset line of m_melodypsg1 - can't implement this in MAME at this time
|
||||||
// TODO: holds the reset line of m_ay_4h - can't implement this in MAME at this time
|
// TODO: holds the reset line of m_melodypsg2 - can't implement this in MAME at this time
|
||||||
m_audiocpu->set_input_line(INPUT_LINE_RESET, state);
|
m_audiocpu->set_input_line(INPUT_LINE_RESET, state);
|
||||||
// TODO: holds the reset line of m_pia_1i - can't implement this in MAME at this time
|
// TODO: holds the reset line of m_pia_1i - can't implement this in MAME at this time
|
||||||
// TODO: does some funky stuff with the VDD and VSS lines on the speech chip
|
// TODO: does some funky stuff with the VDD and VSS lines on the speech chip
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(zac1b11142_audio_device::pia_4i_porta_r)
|
|
||||||
{
|
|
||||||
UINT8 const control = m_pia_4i->b_output();
|
|
||||||
UINT8 data = 0xff;
|
|
||||||
|
|
||||||
if (0x01 == (control & 0x03))
|
|
||||||
data &= m_ay_4g->data_r(space, 0);
|
|
||||||
|
|
||||||
if (0x04 == (control & 0x0c))
|
|
||||||
data &= m_ay_4h->data_r(space, 0);
|
|
||||||
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(zac1b11142_audio_device::pia_4i_porta_w)
|
|
||||||
{
|
|
||||||
UINT8 const control = m_pia_4i->b_output();
|
|
||||||
|
|
||||||
if (control & 0x02)
|
|
||||||
m_ay_4g->data_address_w(space, (control >> 0) & 0x01, data);
|
|
||||||
|
|
||||||
if (control & 0x08)
|
|
||||||
m_ay_4h->data_address_w(space, (control >> 2) & 0x01, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(zac1b11142_audio_device::pia_4i_portb_w)
|
|
||||||
{
|
|
||||||
if (data & 0x02)
|
|
||||||
m_ay_4g->data_address_w(space, (data >> 0) & 0x01, m_pia_4i->a_output());
|
|
||||||
|
|
||||||
if (data & 0x08)
|
|
||||||
m_ay_4h->data_address_w(space, (data >> 2) & 0x01, m_pia_4i->a_output());
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(zac1b11142_audio_device::ay_4g_porta_w)
|
WRITE8_MEMBER(zac1b11142_audio_device::ay_4g_porta_w)
|
||||||
{
|
{
|
||||||
// TODO: (data & 0x07) controls tromba mix volume
|
// TODO: (data & 0x07) controls tromba mix volume
|
||||||
@ -225,11 +404,6 @@ WRITE8_MEMBER(zac1b11142_audio_device::ay_4g_porta_w)
|
|||||||
// TODO: (data & 0x10) controls rullante gate
|
// TODO: (data & 0x10) controls rullante gate
|
||||||
}
|
}
|
||||||
|
|
||||||
READ8_MEMBER(zac1b11142_audio_device::ay_4g_portb_r)
|
|
||||||
{
|
|
||||||
return m_melody_command;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(zac1b11142_audio_device::ay_4h_porta_w)
|
WRITE8_MEMBER(zac1b11142_audio_device::ay_4h_porta_w)
|
||||||
{
|
{
|
||||||
// TODO: data & 0x01 controls LEVEL
|
// TODO: data & 0x01 controls LEVEL
|
||||||
@ -248,8 +422,8 @@ READ8_MEMBER(zac1b11142_audio_device::host_command_r)
|
|||||||
|
|
||||||
WRITE8_MEMBER(zac1b11142_audio_device::melody_command_w)
|
WRITE8_MEMBER(zac1b11142_audio_device::melody_command_w)
|
||||||
{
|
{
|
||||||
|
m_melodypia->ca1_w((data >> 7) & 0x01);
|
||||||
m_melody_command = data;
|
m_melody_command = data;
|
||||||
m_pia_4i->ca1_w((data >> 7) & 0x01);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(zac1b11142_audio_device::pia_1i_portb_w)
|
WRITE8_MEMBER(zac1b11142_audio_device::pia_1i_portb_w)
|
||||||
@ -275,20 +449,18 @@ ioport_constructor zac1b11142_audio_device::device_input_ports() const
|
|||||||
return INPUT_PORTS_NAME(zac1b11142_ioports);
|
return INPUT_PORTS_NAME(zac1b11142_ioports);
|
||||||
}
|
}
|
||||||
|
|
||||||
void zac1b11142_audio_device::device_config_complete()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void zac1b11142_audio_device::device_start()
|
void zac1b11142_audio_device::device_start()
|
||||||
{
|
{
|
||||||
|
zac1b111xx_melody_base::device_start();
|
||||||
|
|
||||||
m_acs_cb.resolve_safe();
|
m_acs_cb.resolve_safe();
|
||||||
|
|
||||||
save_item(NAME(m_host_command));
|
save_item(NAME(m_host_command));
|
||||||
save_item(NAME(m_melody_command));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void zac1b11142_audio_device::device_reset()
|
void zac1b11142_audio_device::device_reset()
|
||||||
{
|
{
|
||||||
|
zac1b111xx_melody_base::device_reset();
|
||||||
|
|
||||||
m_host_command = 0;
|
m_host_command = 0;
|
||||||
m_melody_command = 0;
|
|
||||||
}
|
}
|
||||||
|
@ -12,9 +12,22 @@
|
|||||||
#include "sound/tms5220.h"
|
#include "sound/tms5220.h"
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// GLOBAL VARIABLES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
extern device_type const ZACCARIA_1B11107;
|
||||||
extern device_type const ZACCARIA_1B11142;
|
extern device_type const ZACCARIA_1B11142;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// DEVICE CONFIGURATION MACROS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
#define MCFG_ZACCARIA_1B11107(_tag) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, ZACCARIA_1B11107, 0)
|
||||||
|
|
||||||
#define MCFG_ZACCARIA_1B11142(_tag) \
|
#define MCFG_ZACCARIA_1B11142(_tag) \
|
||||||
MCFG_DEVICE_ADD(_tag, ZACCARIA_1B11142, 0)
|
MCFG_DEVICE_ADD(_tag, ZACCARIA_1B11142, 0)
|
||||||
|
|
||||||
@ -22,14 +35,67 @@ extern device_type const ZACCARIA_1B11142;
|
|||||||
devcb = &zac1b11142_audio_device::static_set_acs_cb(*device, DEVCB_##_devcb);
|
devcb = &zac1b11142_audio_device::static_set_acs_cb(*device, DEVCB_##_devcb);
|
||||||
|
|
||||||
|
|
||||||
class zac1b11142_audio_device : public device_t, public device_mixer_interface
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
class zac1b111xx_melody_base : public device_t, public device_mixer_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
zac1b111xx_melody_base(
|
||||||
|
machine_config const &mconfig,
|
||||||
|
device_type devtype,
|
||||||
|
char const *name,
|
||||||
|
char const *tag,
|
||||||
|
device_t *owner,
|
||||||
|
UINT32 clock,
|
||||||
|
char const *shortname,
|
||||||
|
char const *source);
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER(melodypia_porta_r);
|
||||||
|
DECLARE_WRITE8_MEMBER(melodypia_porta_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(melodypia_portb_w);
|
||||||
|
DECLARE_READ8_MEMBER(melodypsg1_portb_r);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
required_device<cpu_device> m_melodycpu;
|
||||||
|
required_device<pia6821_device> m_melodypia;
|
||||||
|
required_device<ay8910_device> m_melodypsg1;
|
||||||
|
required_device<ay8910_device> m_melodypsg2;
|
||||||
|
|
||||||
|
UINT8 m_melody_command;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class zac1b11107_audio_device : public zac1b111xx_melody_base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
zac1b11107_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
// host interface
|
||||||
|
DECLARE_WRITE8_MEMBER(sound_w);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(reset_w);
|
||||||
|
|
||||||
|
// PSG output handlers
|
||||||
|
DECLARE_WRITE8_MEMBER(melodypsg1_porta_w);
|
||||||
|
DECLARE_WRITE8_MEMBER(melodypsg2_porta_w);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class zac1b11142_audio_device : public zac1b111xx_melody_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
template<class _Object> static devcb_base &static_set_acs_cb(device_t &device, _Object object)
|
template<class _Object> static devcb_base &static_set_acs_cb(device_t &device, _Object object)
|
||||||
{ return downcast<zac1b11142_audio_device &>(device).m_acs_cb.set_callback(object); }
|
{ return downcast<zac1b11142_audio_device &>(device).m_acs_cb.set_callback(object); }
|
||||||
|
|
||||||
zac1b11142_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
|
zac1b11142_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
|
||||||
~zac1b11142_audio_device() { }
|
|
||||||
|
|
||||||
// host interface
|
// host interface
|
||||||
DECLARE_WRITE8_MEMBER(hs_w);
|
DECLARE_WRITE8_MEMBER(hs_w);
|
||||||
@ -37,11 +103,7 @@ public:
|
|||||||
DECLARE_WRITE_LINE_MEMBER(ressound_w);
|
DECLARE_WRITE_LINE_MEMBER(ressound_w);
|
||||||
|
|
||||||
// melody section handlers
|
// melody section handlers
|
||||||
DECLARE_READ8_MEMBER(pia_4i_porta_r);
|
|
||||||
DECLARE_WRITE8_MEMBER(pia_4i_porta_w);
|
|
||||||
DECLARE_WRITE8_MEMBER(pia_4i_portb_w);
|
|
||||||
DECLARE_WRITE8_MEMBER(ay_4g_porta_w);
|
DECLARE_WRITE8_MEMBER(ay_4g_porta_w);
|
||||||
DECLARE_READ8_MEMBER(ay_4g_portb_r);
|
|
||||||
DECLARE_WRITE8_MEMBER(ay_4h_porta_w);
|
DECLARE_WRITE8_MEMBER(ay_4h_porta_w);
|
||||||
DECLARE_WRITE8_MEMBER(ay_4h_portb_w);
|
DECLARE_WRITE8_MEMBER(ay_4h_portb_w);
|
||||||
|
|
||||||
@ -56,17 +118,11 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||||
virtual ioport_constructor device_input_ports() const override;
|
virtual ioport_constructor device_input_ports() const override;
|
||||||
virtual void device_config_complete() override;
|
|
||||||
virtual void device_start() override;
|
virtual void device_start() override;
|
||||||
virtual void device_reset() override;
|
virtual void device_reset() override;
|
||||||
|
|
||||||
devcb_write_line m_acs_cb;
|
devcb_write_line m_acs_cb;
|
||||||
|
|
||||||
required_device<cpu_device> m_melodycpu;
|
|
||||||
required_device<pia6821_device> m_pia_4i;
|
|
||||||
required_device<ay8910_device> m_ay_4g;
|
|
||||||
required_device<ay8910_device> m_ay_4h;
|
|
||||||
|
|
||||||
required_device<cpu_device> m_audiocpu;
|
required_device<cpu_device> m_audiocpu;
|
||||||
required_device<pia6821_device> m_pia_1i;
|
required_device<pia6821_device> m_pia_1i;
|
||||||
required_device<tms5220_device> m_speech;
|
required_device<tms5220_device> m_speech;
|
||||||
@ -74,7 +130,6 @@ protected:
|
|||||||
required_ioport m_inputs;
|
required_ioport m_inputs;
|
||||||
|
|
||||||
UINT8 m_host_command;
|
UINT8 m_host_command;
|
||||||
UINT8 m_melody_command;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __AUDIO_ZACCARIA_H__
|
#endif // __AUDIO_ZACCARIA_H__
|
@ -197,14 +197,6 @@ static ADDRESS_MAP_START( laserbat_io_map, AS_IO, 8, laserbat_state_base )
|
|||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
static ADDRESS_MAP_START( catnmous_sound_map, AS_PROGRAM, 8, catnmous_state )
|
|
||||||
AM_RANGE(0x0000, 0x007f) AM_RAM
|
|
||||||
AM_RANGE(0x500c, 0x500f) AM_DEVREADWRITE("pia", pia6821_device, read, write)
|
|
||||||
AM_RANGE(0xc000, 0xcfff) AM_ROM
|
|
||||||
AM_RANGE(0xe000, 0xffff) AM_ROM
|
|
||||||
ADDRESS_MAP_END
|
|
||||||
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( laserbat_base )
|
static INPUT_PORTS_START( laserbat_base )
|
||||||
PORT_START("ROW0")
|
PORT_START("ROW0")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
|
||||||
@ -545,27 +537,9 @@ static MACHINE_CONFIG_DERIVED_CLASS( catnmous, laserbat_base, catnmous_state )
|
|||||||
MCFG_PALETTE_INIT_OWNER(catnmous_state, catnmous)
|
MCFG_PALETTE_INIT_OWNER(catnmous_state, catnmous)
|
||||||
|
|
||||||
// sound board devices
|
// sound board devices
|
||||||
MCFG_CPU_ADD("audiocpu", M6802, XTAL_3_579545MHz)
|
|
||||||
MCFG_CPU_PROGRAM_MAP(catnmous_sound_map)
|
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("timebase", CLOCK, XTAL_3_579545MHz/4096/2) // CPU clock divided with 4040 and half of 7474
|
|
||||||
MCFG_CLOCK_SIGNAL_HANDLER(DEVWRITELINE("pia", pia6821_device, cb1_w))
|
|
||||||
|
|
||||||
MCFG_DEVICE_ADD("pia", PIA6821, 0)
|
|
||||||
MCFG_PIA_READPA_HANDLER(READ8(catnmous_state, pia_porta_r))
|
|
||||||
MCFG_PIA_WRITEPA_HANDLER(WRITE8(catnmous_state, pia_porta_w))
|
|
||||||
MCFG_PIA_WRITEPB_HANDLER(WRITE8(catnmous_state, pia_portb_w))
|
|
||||||
MCFG_PIA_IRQA_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, nmi_line))
|
|
||||||
MCFG_PIA_IRQB_HANDLER(DEVWRITELINE("audiocpu", m6802_cpu_device, irq_line))
|
|
||||||
|
|
||||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||||
|
MCFG_ZACCARIA_1B11107("audiopcb")
|
||||||
MCFG_SOUND_ADD("psg1", AY8910, XTAL_3_579545MHz/2) // CPU clock divided with 4040
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00)
|
||||||
MCFG_AY8910_PORT_B_READ_CB(READ8(catnmous_state, psg1_portb_r))
|
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
|
||||||
|
|
||||||
MCFG_SOUND_ADD("psg2", AY8910, XTAL_3_579545MHz/2) // CPU clock divided with 4040
|
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
|
||||||
|
|
||||||
MACHINE_CONFIG_END
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
@ -705,7 +679,7 @@ ROM_START( catnmous )
|
|||||||
ROM_REGION( 0x0100, "gfxmix", 0 )
|
ROM_REGION( 0x0100, "gfxmix", 0 )
|
||||||
ROM_LOAD( "82s100.13m", 0x0000, 0x00f5, CRC(6b724cdb) SHA1(8a0ca3b171b103661a3b2fffbca3d7162089e243) )
|
ROM_LOAD( "82s100.13m", 0x0000, 0x00f5, CRC(6b724cdb) SHA1(8a0ca3b171b103661a3b2fffbca3d7162089e243) )
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 )
|
||||||
ROM_LOAD( "sound01.1f", 0xc000, 0x1000, CRC(473c44de) SHA1(ff08b02d45a2c23cabb5db716aa203225a931424) )
|
ROM_LOAD( "sound01.1f", 0xc000, 0x1000, CRC(473c44de) SHA1(ff08b02d45a2c23cabb5db716aa203225a931424) )
|
||||||
ROM_LOAD( "sound01.1d", 0xe000, 0x1000, CRC(f65cb9d0) SHA1(a2fe7563c6da055bf6aa20797b2d9fa184f0133c) )
|
ROM_LOAD( "sound01.1d", 0xe000, 0x1000, CRC(f65cb9d0) SHA1(a2fe7563c6da055bf6aa20797b2d9fa184f0133c) )
|
||||||
ROM_LOAD( "sound01.1e", 0xf000, 0x1000, CRC(1bd90c93) SHA1(20fd2b765a42e25cf7f716e6631b8c567785a866) )
|
ROM_LOAD( "sound01.1e", 0xf000, 0x1000, CRC(1bd90c93) SHA1(20fd2b765a42e25cf7f716e6631b8c567785a866) )
|
||||||
@ -747,7 +721,7 @@ ROM_START( catnmousa )
|
|||||||
// copied from parent set to give working graphics, need dump to confirm
|
// copied from parent set to give working graphics, need dump to confirm
|
||||||
ROM_LOAD( "catnmousa_82s100.13m", 0x0000, 0x00f5, CRC(6b724cdb) SHA1(8a0ca3b171b103661a3b2fffbca3d7162089e243) BAD_DUMP )
|
ROM_LOAD( "catnmousa_82s100.13m", 0x0000, 0x00f5, CRC(6b724cdb) SHA1(8a0ca3b171b103661a3b2fffbca3d7162089e243) BAD_DUMP )
|
||||||
|
|
||||||
ROM_REGION( 0x10000, "audiocpu", 0 )
|
ROM_REGION( 0x10000, "audiopcb:melodycpu", 0 )
|
||||||
ROM_LOAD( "snd.1f", 0xc000, 0x1000, CRC(473c44de) SHA1(ff08b02d45a2c23cabb5db716aa203225a931424) )
|
ROM_LOAD( "snd.1f", 0xc000, 0x1000, CRC(473c44de) SHA1(ff08b02d45a2c23cabb5db716aa203225a931424) )
|
||||||
ROM_LOAD( "snd.1d", 0xe000, 0x1000, CRC(f65cb9d0) SHA1(a2fe7563c6da055bf6aa20797b2d9fa184f0133c) )
|
ROM_LOAD( "snd.1d", 0xe000, 0x1000, CRC(f65cb9d0) SHA1(a2fe7563c6da055bf6aa20797b2d9fa184f0133c) )
|
||||||
ROM_LOAD( "snd.1e", 0xf000, 0x1000, CRC(1bd90c93) SHA1(20fd2b765a42e25cf7f716e6631b8c567785a866) )
|
ROM_LOAD( "snd.1e", 0xf000, 0x1000, CRC(1bd90c93) SHA1(20fd2b765a42e25cf7f716e6631b8c567785a866) )
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
|
#include "audio/zaccaria.h"
|
||||||
|
|
||||||
#include "machine/6821pia.h"
|
#include "machine/6821pia.h"
|
||||||
#include "machine/pla.h"
|
#include "machine/pla.h"
|
||||||
#include "machine/s2636.h"
|
#include "machine/s2636.h"
|
||||||
@ -185,10 +187,7 @@ class catnmous_state : public laserbat_state_base
|
|||||||
public:
|
public:
|
||||||
catnmous_state(const machine_config &mconfig, device_type type, const char *tag)
|
catnmous_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: laserbat_state_base(mconfig, type, tag)
|
: laserbat_state_base(mconfig, type, tag)
|
||||||
, m_audiocpu(*this, "audiocpu")
|
, m_audiopcb(*this, "audiopcb")
|
||||||
, m_pia(*this, "pia")
|
|
||||||
, m_psg1(*this, "psg1")
|
|
||||||
, m_psg2(*this, "psg2")
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,20 +198,6 @@ public:
|
|||||||
virtual DECLARE_WRITE8_MEMBER(csound1_w) override;
|
virtual DECLARE_WRITE8_MEMBER(csound1_w) override;
|
||||||
virtual DECLARE_WRITE8_MEMBER(csound2_w) override;
|
virtual DECLARE_WRITE8_MEMBER(csound2_w) override;
|
||||||
|
|
||||||
// PIA handlers
|
|
||||||
DECLARE_READ8_MEMBER(pia_porta_r);
|
|
||||||
DECLARE_WRITE8_MEMBER(pia_porta_w);
|
|
||||||
DECLARE_WRITE8_MEMBER(pia_portb_w);
|
|
||||||
|
|
||||||
// PSG handlers
|
|
||||||
DECLARE_WRITE8_MEMBER(psg1_porta_w);
|
|
||||||
DECLARE_READ8_MEMBER(psg1_portb_r);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
required_device<zac1b11107_audio_device> m_audiopcb;
|
||||||
// sound board devices
|
|
||||||
required_device<cpu_device> m_audiocpu;
|
|
||||||
required_device<pia6821_device> m_pia;
|
|
||||||
required_device<ay8910_device> m_psg1;
|
|
||||||
required_device<ay8910_device> m_psg2;
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user