diff options
author | cam900 <dbtlrchl@naver.com> | 2022-04-23 11:34:28 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-23 12:34:28 +1000 |
commit | 05c700c3f001c8cafc088da614ddf834a25e9ae3 (patch) | |
tree | 3f413f16d6f1825b22f8dc821d4a195065d0c833 | |
parent | 2bbf6fb06fb518aad720754d777a700a1120659f (diff) |
cage.cpp: Add partially support of variable sound output channels (#9105)
-rw-r--r-- | src/mame/audio/cage.cpp | 100 | ||||
-rw-r--r-- | src/mame/audio/cage.h | 2 | ||||
-rw-r--r-- | src/mame/drivers/atarigt.cpp | 36 | ||||
-rw-r--r-- | src/mame/drivers/metalmx.cpp | 12 | ||||
-rw-r--r-- | src/mame/drivers/seattle.cpp | 26 | ||||
-rw-r--r-- | src/mame/includes/atarigt.h | 1 |
6 files changed, 160 insertions, 17 deletions
diff --git a/src/mame/audio/cage.cpp b/src/mame/audio/cage.cpp index d295b690b0f..9276b8b6dfc 100644 --- a/src/mame/audio/cage.cpp +++ b/src/mame/audio/cage.cpp @@ -4,12 +4,84 @@ Atari CAGE Audio Board + Atari CH31.2 sound board layout: + -------------------------------- + + ATARI GAMES (C) 93 MADE IN U.S.A. + |-----------------------------------------------------------| + | JXBUS|---------------------------------| | + | |---------------------------------| JPWR | + | |---------| | + |JROMBUS| 11A | | + | |--| |---------| | + | | ||-----------| | + | | || 11B | | + | | ||-----------| | + | | ||-----------| 3B | + | | || 11C | RAM RAM RAM RAM | + | | ||-----------| | + | | ||-----------| | + | | || 11D | | + | | ||-----------| 3D | + | | ||-----------| |-----------| | + | | || 11E | | | | + | | ||-----------| | DSP | | + | | | | | AMP | + | |--|OSC |-----------| JSPKR | + | | + |-----------------------------------------------------------| + + DSP: TMS320C31 33.8688MHz + OSC: 33.8688MHz + 11A: DIP32 EPROM for Boot + 11B, 11C, 11D, 11E: DIP42 Mask ROM for Data + RAM: 32Kx8 bit SRAM + 3B: AK4316-VS DAC, Not populated in primal rage (no quad channel sound support) + 3D: AK4316-VS DAC + AMP: TDA1554Q Audio amplifier for connect speaker directly + JROMBUS: ROM expansion connector + JXBUS: X-Bus host interface + JSPKR: Audio output connector, Connect to external speaker or motherboard/AMP board + JPWR: Power supply connector, Connect to external power distribution board or motherboard + + Pinouts: + + JSPKR: + --------------- + 01 Channel 1 + + 02 Channel 1 - + 03 Channel 2 + + 04 Channel 2 - + 05 Key + 06 Channel 3 + + 07 Channel 3 - + 08 Channel 4 + + 09 Channel 4 - + 10 Subwoofer + + 11 Subwoofer - + + JPWR: + ---------------- + 01 +5V + 02 +5V + 03 Key + 04 GND + 05 GND + 06 +12V + 07 +12V + 08 -5V + 09 GND + + TODO: + - Move DSP internal functions into tms32031.cpp + - Further support for variable sound output channel + - Support subwoofer output + ****************************************************************************/ #include "emu.h" #include "cage.h" -#include "speaker.h" #define LOG_COMM (0) @@ -23,7 +95,7 @@ * *************************************/ -#define DAC_BUFFER_CHANNELS 4 +#define DAC_BUFFER_CHANNELS 4 // 5; 4 channel + subwoofer? #define STACK_SOUND_BUFSIZE (1024) /************************************* @@ -105,6 +177,7 @@ static const char *const register_names[] = * *************************************/ +// uses Atari CH31(.2) external sound board DEFINE_DEVICE_TYPE(ATARI_CAGE, atari_cage_device, "atari_cage", "Atari CAGE") @@ -119,6 +192,7 @@ atari_cage_device::atari_cage_device(const machine_config &mconfig, const char * atari_cage_device::atari_cage_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, type, tag, owner, clock), + device_mixer_interface(mconfig, *this, 5), // 5 output routines in JSPKR m_cpu(*this, "cpu"), m_cageram(*this, "cageram"), m_soundlatch(*this, "soundlatch"), @@ -337,7 +411,7 @@ void atari_cage_device::update_serial() freq = m_serial_period_per_word.as_hz() / DAC_BUFFER_CHANNELS; if (freq > 0 && freq < 100000) { - for (int i = 0; i < 4; i++) + for (int i = 0; i < DAC_BUFFER_CHANNELS; i++) { m_dmadac[i]->set_frequency(freq); m_dmadac[i]->enable(1); @@ -617,7 +691,7 @@ void atari_cage_seattle_device::cage_map_seattle(address_map &map) void atari_cage_device::device_add_mconfig(machine_config &config) { /* basic machine hardware */ - TMS32031(config, m_cpu, 33868800); + TMS32031(config, m_cpu, XTAL(33'868'800)); m_cpu->set_addrmap(AS_PROGRAM, &atari_cage_device::cage_map); m_cpu->set_mcbl_mode(true); @@ -626,27 +700,25 @@ void atari_cage_device::device_add_mconfig(machine_config &config) TIMER(config, m_timer[1]).configure_generic(DEVICE_SELF, FUNC(atari_cage_device::cage_timer_callback)); /* sound hardware */ - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - GENERIC_LATCH_16(config, m_soundlatch); #if (DAC_BUFFER_CHANNELS == 4) - DMADAC(config, m_dmadac[0]).add_route(ALL_OUTPUTS, "rspeaker", 0.50); + DMADAC(config, m_dmadac[0]).add_route(ALL_OUTPUTS, *this, 0.50, AUTO_ALLOC_INPUT, 0); - DMADAC(config, m_dmadac[1]).add_route(ALL_OUTPUTS, "lspeaker", 0.50); + DMADAC(config, m_dmadac[1]).add_route(ALL_OUTPUTS, *this, 0.50, AUTO_ALLOC_INPUT, 1); - DMADAC(config, m_dmadac[2]).add_route(ALL_OUTPUTS, "lspeaker", 0.50); + DMADAC(config, m_dmadac[2]).add_route(ALL_OUTPUTS, *this, 0.50, AUTO_ALLOC_INPUT, 2); - DMADAC(config, m_dmadac[3]).add_route(ALL_OUTPUTS, "rspeaker", 0.50); + DMADAC(config, m_dmadac[3]).add_route(ALL_OUTPUTS, *this, 0.50, AUTO_ALLOC_INPUT, 3); #else - DMADAC(config, m_dmadac[0]).add_route(ALL_OUTPUTS, "lspeaker", 1.0); + DMADAC(config, m_dmadac[0]).add_route(ALL_OUTPUTS, *this, 1.0, AUTO_ALLOC_INPUT, 0); - DMADAC(config, m_dmadac[1]).add_route(ALL_OUTPUTS, "rspeaker", 1.0); + DMADAC(config, m_dmadac[1]).add_route(ALL_OUTPUTS, *this, 1.0, AUTO_ALLOC_INPUT, 1); #endif + //add_route(ALL_OUTPUTS, *this, 0.50, AUTO_ALLOC_INPUT, 4); Subwoofer output } - +// Embedded in San francisco Rush Motherboard, 4 channel output connected to Quad Amp PCB and expanded to 5 channel (4 channel + subwoofer) DEFINE_DEVICE_TYPE(ATARI_CAGE_SEATTLE, atari_cage_seattle_device, "atari_cage_seattle", "Atari CAGE Seattle") diff --git a/src/mame/audio/cage.h b/src/mame/audio/cage.h index 39f9ca54393..c93bc4419ea 100644 --- a/src/mame/audio/cage.h +++ b/src/mame/audio/cage.h @@ -17,7 +17,7 @@ #include "sound/dmadac.h" -class atari_cage_device : public device_t +class atari_cage_device : public device_t, public device_mixer_interface { public: enum diff --git a/src/mame/drivers/atarigt.cpp b/src/mame/drivers/atarigt.cpp index 38132e9b1ef..be775512aae 100644 --- a/src/mame/drivers/atarigt.cpp +++ b/src/mame/drivers/atarigt.cpp @@ -58,6 +58,7 @@ #include "cpu/m68000/m68000.h" #include "machine/eeprompar.h" +#include "speaker.h" #define LOG_PROTECTION (0) @@ -854,6 +855,26 @@ void atarigt_state::atarigt(machine_config &config) m_cage->irq_handler().set(FUNC(atarigt_state::cage_irq_callback)); } +// for stereo + subwoofer output configuration +void atarigt_state::atarigt_stereo(machine_config &config) +{ + atarigt(config); + + // 3 Channel output directly from CAGE or through motherboard JAMMA output + // based on dedicated cabinet configuration; + // 'universal' kit supports mono and stereo, with/without subwoofer. + SPEAKER(config, "lspeaker").front_left(); + SPEAKER(config, "rspeaker").front_right(); + SPEAKER(config, "subwoofer").front_floor(); // Next to the coin door at dedicated cabinet, just silence for now (not implemented) + + // TODO: correct? sound board has only 1 DAC populated. + m_cage->add_route(0, "rspeaker", 1.0); + m_cage->add_route(1, "lspeaker", 1.0); + m_cage->add_route(2, "lspeaker", 1.0); + m_cage->add_route(3, "rspeaker", 1.0); + m_cage->add_route(4, "subwoofer", 1.0); +} + void atarigt_state::tmek(machine_config &config) { atarigt(config); @@ -864,19 +885,30 @@ void atarigt_state::tmek(machine_config &config) m_adc->in_callback<6>().set_ioport("AN2"); m_adc->in_callback<7>().set_ioport("AN3"); + // 5 Channel output (4 Channel input connected to Quad Amp PCB) + SPEAKER(config, "flspeaker").front_left(); + SPEAKER(config, "frspeaker").front_right(); + SPEAKER(config, "rlspeaker").headrest_left(); + SPEAKER(config, "rrspeaker").headrest_right(); + //SPEAKER(config, "subwoofer").seat(); Not implemented, Quad Amp PCB output; + m_cage->set_speedup(0x4fad); + m_cage->add_route(0, "frspeaker", 1.0); // Foward Right + m_cage->add_route(1, "rlspeaker", 1.0); // Back Left + m_cage->add_route(2, "flspeaker", 1.0); // Foward Left + m_cage->add_route(3, "rrspeaker", 1.0); // Back Right } void atarigt_state::primrage(machine_config &config) { - atarigt(config); + atarigt_stereo(config); m_cage->set_speedup(0x42f2); } void atarigt_state::primrage20(machine_config &config) { - atarigt(config); + atarigt_stereo(config); m_cage->set_speedup(0x48a4); } diff --git a/src/mame/drivers/metalmx.cpp b/src/mame/drivers/metalmx.cpp index e1c5acfb595..266fed2f80b 100644 --- a/src/mame/drivers/metalmx.cpp +++ b/src/mame/drivers/metalmx.cpp @@ -690,9 +690,21 @@ void metalmx_state::metalmx(machine_config &config) PALETTE(config, "palette", palette_device::RGB_565); + // TODO: copied from atarigt.cpp; Same configurations as T-Mek? + // 5 Channel output (4 Channel input connected to Quad Amp PCB) + SPEAKER(config, "flspeaker").front_left(); + SPEAKER(config, "frspeaker").front_right(); + SPEAKER(config, "rlspeaker").headrest_left(); + SPEAKER(config, "rrspeaker").headrest_right(); + //SPEAKER(config, "subwoofer").seat(); Not implemented, Quad Amp PCB output; + ATARI_CAGE(config, m_cage, 0); m_cage->set_speedup(0); // TODO: speedup address m_cage->irq_handler().set(FUNC(metalmx_state::cage_irq_callback)); + m_cage->add_route(0, "frspeaker", 1.0); // Foward Right + m_cage->add_route(1, "rlspeaker", 1.0); // Back Left + m_cage->add_route(2, "flspeaker", 1.0); // Foward Left + m_cage->add_route(3, "rrspeaker", 1.0); // Back Right } diff --git a/src/mame/drivers/seattle.cpp b/src/mame/drivers/seattle.cpp index 06f2022cd01..ada85cdf584 100644 --- a/src/mame/drivers/seattle.cpp +++ b/src/mame/drivers/seattle.cpp @@ -201,6 +201,7 @@ #include "video/voodoo_pci.h" #include "screen.h" +#include "speaker.h" #include "calspeed.lh" #include "vaportrx.lh" @@ -2153,9 +2154,21 @@ void seattle_state::mace(machine_config &config) void seattle_state::sfrush(machine_config &config) { flagstaff(config); + // 5 Channel output (4 Channel input connected to Quad Amp PCB) + SPEAKER(config, "flspeaker").front_left(); + SPEAKER(config, "frspeaker").front_right(); + SPEAKER(config, "rlspeaker").headrest_left(); + SPEAKER(config, "rrspeaker").headrest_right(); + //SPEAKER(config, "subwoofer").seat(); Not implemented, Quad Amp PCB output; + atari_cage_seattle_device &cage(ATARI_CAGE_SEATTLE(config, "cage", 0)); cage.set_speedup(0x5236); cage.irq_handler().set(m_ioasic, FUNC(midway_ioasic_device::cage_irq_handler)); + // TODO: copied from atarigt.cpp; Same configurations as T-Mek? + cage.add_route(0, "frspeaker", 1.0); // Foward Right + cage.add_route(1, "rlspeaker", 1.0); // Back Left + cage.add_route(2, "flspeaker", 1.0); // Foward Left + cage.add_route(3, "rrspeaker", 1.0); // Back Right MIDWAY_IOASIC(config, m_ioasic, 0); m_ioasic->set_shuffle(MIDWAY_IOASIC_STANDARD); @@ -2168,9 +2181,22 @@ void seattle_state::sfrush(machine_config &config) void seattle_state::sfrushrk(machine_config &config) { flagstaff(config); + // 5 Channel output (4 Channel input connected to Quad Amp PCB) + SPEAKER(config, "flspeaker").front_left(); + SPEAKER(config, "frspeaker").front_right(); + SPEAKER(config, "rlspeaker").headrest_left(); + SPEAKER(config, "rrspeaker").headrest_right(); + //SPEAKER(config, "subwoofer").seat(); Not implemented, Quad Amp PCB output; + atari_cage_seattle_device &cage(ATARI_CAGE_SEATTLE(config, "cage", 0)); cage.set_speedup(0x5329); cage.irq_handler().set(m_ioasic, FUNC(midway_ioasic_device::cage_irq_handler)); + // TODO: copied from atarigt.cpp; Same configurations as T-Mek? + cage.add_route(0, "frspeaker", 1.0); // Foward Right + cage.add_route(1, "rlspeaker", 1.0); // Back Left + cage.add_route(2, "flspeaker", 1.0); // Foward Left + cage.add_route(3, "rrspeaker", 1.0); // Back Right + MIDWAY_IOASIC(config, m_ioasic, 0); m_ioasic->set_shuffle(MIDWAY_IOASIC_SFRUSHRK); diff --git a/src/mame/includes/atarigt.h b/src/mame/includes/atarigt.h index 9147f475ca5..73eb1015662 100644 --- a/src/mame/includes/atarigt.h +++ b/src/mame/includes/atarigt.h @@ -39,6 +39,7 @@ public: { } void atarigt(machine_config &config); + void atarigt_stereo(machine_config &config); void tmek(machine_config &config); void primrage20(machine_config &config); void primrage(machine_config &config); |