diff --git a/scripts/src/sound.lua b/scripts/src/sound.lua index 08f421cf056..c1bf4f51af8 100644 --- a/scripts/src/sound.lua +++ b/scripts/src/sound.lua @@ -969,7 +969,6 @@ if (SOUNDS["SP0250"]~=null) then end - --------------------------------------------------- -- S14001A speech synthesizer --@src/devices/sound/s14001a.h,SOUNDS["S14001A"] = true @@ -1122,11 +1121,12 @@ if (SOUNDS["VLM5030"]~=null) then end --------------------------------------------------- --- Votrax speech synthesizer ---@src/devices/sound/votrax.h,SOUNDS["VOTRAX"] = true +-- Votrax SC-01[-A] speech synthesizer +--@src/devices/sound/votrax.h,SOUNDS["VOTRAX_SC01"] = true +--@src/devices/sound/votrax.h,SOUNDS["VOTRAX_SC01A"] = true --------------------------------------------------- -if (SOUNDS["VOTRAX"]~=null) then +if (SOUNDS["VOTRAX_SC01"]~=null or SOUNDS["VOTRAX_SC01A"]~=null) then files { MAME_DIR .. "src/devices/sound/votrax.cpp", MAME_DIR .. "src/devices/sound/votrax.h", diff --git a/scripts/target/mame/tiny.lua b/scripts/target/mame/tiny.lua index 50586d03c63..0dc81ccf679 100644 --- a/scripts/target/mame/tiny.lua +++ b/scripts/target/mame/tiny.lua @@ -41,7 +41,7 @@ SOUNDS["HC55516"] = true SOUNDS["OKIM6295"] = true SOUNDS["SAMPLES"] = true SOUNDS["TMS5220"] = true -SOUNDS["VOTRAX"] = true +SOUNDS["VOTRAX_SC01"] = true SOUNDS["YM2151"] = true SOUNDS["YM3812"] = true diff --git a/src/devices/bus/a2bus/a2mockingboard.cpp b/src/devices/bus/a2bus/a2mockingboard.cpp index 0968d55c9a0..ada03ac9d69 100644 --- a/src/devices/bus/a2bus/a2mockingboard.cpp +++ b/src/devices/bus/a2bus/a2mockingboard.cpp @@ -182,6 +182,7 @@ void a2bus_mockingboard_device::device_add_mconfig(machine_config &config) m_ay2->add_route(ALL_OUTPUTS, "rspeaker", 0.5); VOTRAX_SC01(config, m_sc01, 1022727); + VOTRAX_SC01A(config, m_sc01, 1022727); m_sc01->ar_callback().set(m_via1, FUNC(via6522_device::write_cb1)); m_sc01->add_route(ALL_OUTPUTS, "lspeaker", 1.0); m_sc01->add_route(ALL_OUTPUTS, "rspeaker", 1.0); diff --git a/src/devices/bus/c64/speakeasy.cpp b/src/devices/bus/c64/speakeasy.cpp index 23caee3488f..b3e8a060d3d 100644 --- a/src/devices/bus/c64/speakeasy.cpp +++ b/src/devices/bus/c64/speakeasy.cpp @@ -35,7 +35,7 @@ void c64_speakeasy_cartridge_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); - VOTRAX_SC01(config, m_votrax, 720000).add_route(ALL_OUTPUTS, "mono", 0.85); + VOTRAX_SC01A(config, m_votrax, 720000).add_route(ALL_OUTPUTS, "mono", 0.85); } diff --git a/src/devices/bus/vic20/speakeasy.cpp b/src/devices/bus/vic20/speakeasy.cpp index 6128852d540..33f10916bbc 100644 --- a/src/devices/bus/vic20/speakeasy.cpp +++ b/src/devices/bus/vic20/speakeasy.cpp @@ -37,7 +37,7 @@ void vic20_speakeasy_device::device_add_mconfig(machine_config &config) { SPEAKER(config, "mono").front_center(); - VOTRAX_SC01(config, m_votrax, 720000).add_route(ALL_OUTPUTS, "mono", 0.85); + VOTRAX_SC01A(config, m_votrax, 720000).add_route(ALL_OUTPUTS, "mono", 0.85); } diff --git a/src/devices/sound/votrax.cpp b/src/devices/sound/votrax.cpp index 1ec2343f72f..ac737dd3fc7 100644 --- a/src/devices/sound/votrax.cpp +++ b/src/devices/sound/votrax.cpp @@ -26,10 +26,16 @@ tp1 = phi clock (tied to f2q rom access) #include "votrax.h" -DEFINE_DEVICE_TYPE(VOTRAX_SC01, votrax_sc01_device, "votrax", "Votrax SC-01") +DEFINE_DEVICE_TYPE(VOTRAX_SC01, votrax_sc01_device, "votrsc01", "Votrax SC-01") +DEFINE_DEVICE_TYPE(VOTRAX_SC01A, votrax_sc01a_device, "votrsc01a", "Votrax SC-01-A") // ROM definition for the Votrax phone ROM ROM_START( votrax_sc01 ) + ROM_REGION64_LE( 0x200, "internal", 0 ) + ROM_LOAD( "sc01.bin", 0x000, 0x200, CRC(528d1c57) SHA1(268b5884dce04e49e2376df3e2dc82e852b708c1) ) +ROM_END + +ROM_START( votrax_sc01a ) ROM_REGION64_LE( 0x200, "internal", 0 ) ROM_LOAD( "sc01a.bin", 0x000, 0x200, CRC(fc416227) SHA1(1d6da90b1807a01b5e186ef08476119a862b5e6d) ) ROM_END @@ -74,9 +80,14 @@ const double votrax_sc01_device::s_glottal_wave[9] = 1/7.0 }; - votrax_sc01_device::votrax_sc01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) - : device_t(mconfig, VOTRAX_SC01, tag, owner, clock), + : votrax_sc01_device(mconfig, VOTRAX_SC01, tag, owner, clock) +{ +} + +// overridable type for subclass +votrax_sc01_device::votrax_sc01_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_sound_interface(mconfig, *this), m_stream(nullptr), m_rom(*this, "internal"), @@ -84,6 +95,11 @@ votrax_sc01_device::votrax_sc01_device(const machine_config &mconfig, const char { } +votrax_sc01a_device::votrax_sc01a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : votrax_sc01_device(mconfig, VOTRAX_SC01A, tag, owner, clock) +{ +} + void votrax_sc01_device::write(uint8_t data) { // flush out anything currently processing @@ -158,6 +174,11 @@ const tiny_rom_entry *votrax_sc01_device::device_rom_region() const return ROM_NAME( votrax_sc01 ); } +const tiny_rom_entry *votrax_sc01a_device::device_rom_region() const +{ + return ROM_NAME( votrax_sc01a ); +} + //------------------------------------------------- // device_start - handle device startup diff --git a/src/devices/sound/votrax.h b/src/devices/sound/votrax.h index 2dcc7d087da..0ae30f3baed 100644 --- a/src/devices/sound/votrax.h +++ b/src/devices/sound/votrax.h @@ -29,6 +29,8 @@ public: DECLARE_READ_LINE_MEMBER(request) { m_stream->update(); return m_ar_state; } protected: + // overridable type for subclass + votrax_sc01_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual const tiny_rom_entry *device_rom_region() const override; virtual void device_start() override; @@ -181,6 +183,14 @@ private: stream_buffer::sample_t analog_calc(); // Compute one more sample }; +class votrax_sc01a_device : public votrax_sc01_device +{ +public: + votrax_sc01a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +protected: + // device-level overrides + virtual const tiny_rom_entry *device_rom_region() const override; +}; //************************************************************************** // GLOBAL VARIABLES @@ -188,5 +198,6 @@ private: // device type definition DECLARE_DEVICE_TYPE(VOTRAX_SC01, votrax_sc01_device) +DECLARE_DEVICE_TYPE(VOTRAX_SC01A, votrax_sc01a_device) #endif // MAME_SOUND_VOTRAX_H diff --git a/src/mame/ausnz/aussiebyte.cpp b/src/mame/ausnz/aussiebyte.cpp index 31611606dad..0079e318160 100644 --- a/src/mame/ausnz/aussiebyte.cpp +++ b/src/mame/ausnz/aussiebyte.cpp @@ -517,7 +517,7 @@ void aussiebyte_state::aussiebyte(machine_config &config) /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 0.50); - VOTRAX_SC01(config, m_votrax, 720000); // 720kHz? needs verify + VOTRAX_SC01A(config, m_votrax, 720000); // 720kHz? needs verify m_votrax->ar_callback().set([this] (bool state) { m_port28 = state ? 0 : 1; }); m_votrax->add_route(ALL_OUTPUTS, "mono", 1.00); diff --git a/src/mame/exidy/exidyttl.cpp b/src/mame/exidy/exidyttl.cpp index bdcf89154a9..289c5d3df13 100644 --- a/src/mame/exidy/exidyttl.cpp +++ b/src/mame/exidy/exidyttl.cpp @@ -257,7 +257,7 @@ ROM_START( deathrac ) ROM_LOAD( "6331-31.a11", 0x0000, 0x0020, CRC(f304a1fb) SHA1(0f029274bb99723ebcc271d761e1500ca50b2738) ) ROM_LOAD( "6331-32.c12", 0x0000, 0x0020, CRC(f8dbd779) SHA1(55bdaf9eb1ba6185e20512c4874ebb625861508e) ) ROM_LOAD( "6331-33.p14", 0x0000, 0x0020, CRC(2e83bf80) SHA1(02fcc1e879c06759a21ef4f004fe7aa790814112) ) - // Note: Image for 36 has all zeros in the second half, which is unused. + // Note: Image for 36 has all zeros in the second half, which is unused. This is verified correct from a real board. // Other roms in this series (34,35) all have duplicate content in the second half ROM_LOAD( "6331-36.e7", 0x0000, 0x0020, CRC(bb743b79) SHA1(8eb73782bcea7dbba7b75db32307e562248691bb) ) ROM_LOAD( "6331-35.g7", 0x0000, 0x0020, CRC(5ed8cdd2) SHA1(d193d819ad634c43d648ce49073799b4df6dfd2f) ) diff --git a/src/mame/pinball/taito.cpp b/src/mame/pinball/taito.cpp index 1229ac570df..52db046497c 100644 --- a/src/mame/pinball/taito.cpp +++ b/src/mame/pinball/taito.cpp @@ -564,7 +564,7 @@ void taito_8080::taito4(machine_config &config) taito(config); SPEAKER(config, "voxsnd").front_center(); - VOTRAX_SC01(config, m_votrax, 720000); // guess + VOTRAX_SC01A(config, m_votrax, 720000); // guess m_votrax->ar_callback().set(FUNC(taito_8080::votrax_request)); m_votrax->add_route(ALL_OUTPUTS, "voxsnd", 2.0); diff --git a/src/mame/shared/exidysound.cpp b/src/mame/shared/exidysound.cpp index 5fa970a7292..be6da0fe504 100644 --- a/src/mame/shared/exidysound.cpp +++ b/src/mame/shared/exidysound.cpp @@ -880,7 +880,7 @@ void mtrap_sound_device::device_add_mconfig(machine_config &config) m_cvsd_filter2->add_route(ALL_OUTPUTS, "mono", 1.0); FILTER_BIQUAD(config, m_cvsd_filter).opamp_mfb_lowpass_setup(RES_K(10), RES_K(3.9), RES_K(18), CAP_N(20), CAP_N(2.2)); m_cvsd_filter->add_route(ALL_OUTPUTS, m_cvsd_filter2, 1.0); - MC3417(config, m_cvsd, 0).add_route(ALL_OUTPUTS, m_cvsd_filter, 0.3086); // each filter has gain of 1.8 for total gain of 3.24, 0.3086 cancels this out. was 0.8 + MC3417(config, m_cvsd, 0).add_route(ALL_OUTPUTS, m_cvsd_filter, 0.3086); // each filter has gain of 1.8 for total gain of 3.24, 0.3086 cancels this out. } diff --git a/src/mame/shared/gottlieb_a.cpp b/src/mame/shared/gottlieb_a.cpp index 3a7a3f1385a..4b8503f8358 100644 --- a/src/mame/shared/gottlieb_a.cpp +++ b/src/mame/shared/gottlieb_a.cpp @@ -262,7 +262,7 @@ void gottlieb_sound_p3_device::device_start() //************************************************************************** -// REV 1 SOUND BOARD: 6502 + DAC +// REV 1 SOUND BOARD: 6502 + DAC part number MA-309 //************************************************************************** //------------------------------------------------- @@ -398,7 +398,7 @@ void gottlieb_sound_r1_device::device_start() //************************************************************************** -// REV 1 SOUND BOARD WITH VOTRAX +// REV 1 SOUND BOARD WITH VOTRAX, part number MA-216 (same pcb as MA-309 but with a Votrax SC-01(-A) and support components populated) //************************************************************************** //------------------------------------------------- @@ -426,7 +426,7 @@ void gottlieb_sound_r1_with_votrax_device::device_add_mconfig(machine_config &co m_dac->add_route(ALL_OUTPUTS, *this, 0.20); // add the VOTRAX - VOTRAX_SC01(config, m_votrax, 720000); + VOTRAX_SC01A(config, m_votrax, 720000); // Note: early boards use an SC-01 (reactor, q-bert test version, maybe some early pinball machines?) while later boards (qbert main release, most pinball machines) use an SC-01-A m_votrax->ar_callback().set("nmi", FUNC(input_merger_device::in_w<1>)); m_votrax->add_route(ALL_OUTPUTS, *this, 0.80); } diff --git a/src/mame/tiger/k28.cpp b/src/mame/tiger/k28.cpp index 34be91990fd..30082856a6e 100644 --- a/src/mame/tiger/k28.cpp +++ b/src/mame/tiger/k28.cpp @@ -319,7 +319,7 @@ void k28_state::k28(machine_config &config) // sound hardware SPEAKER(config, "mono").front_center(); - VOTRAX_SC01(config, "speech", 760000).add_route(ALL_OUTPUTS, "mono", 0.5); // measured 760kHz on its RC pin + VOTRAX_SC01A(config, "speech", 760000).add_route(ALL_OUTPUTS, "mono", 0.5); // measured 760kHz on its RC pin } diff --git a/src/mame/votrax/votrhv.cpp b/src/mame/votrax/votrhv.cpp index 5a52563e518..5e19b386555 100644 --- a/src/mame/votrax/votrhv.cpp +++ b/src/mame/votrax/votrhv.cpp @@ -680,7 +680,7 @@ void votrhv_state::votrhv(machine_config &config) /* sound hardware */ SPEAKER(config, "mono").front_center(); // TEMPORARY HACK until 1818c device is done - VOTRAX_SC01(config, m_votrax, 720000); + VOTRAX_SC01A(config, m_votrax, 720000); m_votrax->ar_callback().set(FUNC(votrhv_state::pho_done)); m_votrax->add_route(ALL_OUTPUTS, "mono", 1.00); } diff --git a/src/mame/votrax/votrpss.cpp b/src/mame/votrax/votrpss.cpp index ddbc77d101b..ee36434795b 100644 --- a/src/mame/votrax/votrpss.cpp +++ b/src/mame/votrax/votrpss.cpp @@ -570,7 +570,7 @@ void votrpss_state::votrpss(machine_config &config) ay.port_b_read_callback().set_ioport("DSW1"); ay.port_a_write_callback().set("votrax", FUNC(votrax_sc01_device::write)); ay.add_route(ALL_OUTPUTS, "mono", 0.25); - VOTRAX_SC01(config, "votrax", 720000).add_route(ALL_OUTPUTS, "mono", 1.00); /* the actual SC-01-A clock is generated by an R/C circuit PWMed by the timer1 output of the 8253 PIT to adjust the resistance, to allow for fine pitch control. 8253 Timer2 is used to PWM an analog switch on the output of the SC-01 to adjust the volume.*/ + VOTRAX_SC01A(config, "votrax", 720000).add_route(ALL_OUTPUTS, "mono", 1.00); /* the actual SC-01-A clock is generated by an R/C circuit PWMed by the timer1 output of the 8253 PIT to adjust the resistance, to allow for fine pitch control. 8253 Timer2 is used to PWM an analog switch on the output of the SC-01 to adjust the volume.*/ /* Devices */ GENERIC_TERMINAL(config, m_terminal, 0); diff --git a/src/mame/votrax/votrtnt.cpp b/src/mame/votrax/votrtnt.cpp index 463bbaef1fd..21a46bd8114 100644 --- a/src/mame/votrax/votrtnt.cpp +++ b/src/mame/votrax/votrtnt.cpp @@ -163,7 +163,7 @@ void votrtnt_state::votrtnt(machine_config &config) /* sound hardware */ SPEAKER(config, "mono").front_center(); - VOTRAX_SC01(config, m_votrax, 720000); // 720kHz? needs verify + VOTRAX_SC01A(config, m_votrax, 720000); // 720kHz? needs verify m_votrax->ar_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0); m_votrax->add_route(ALL_OUTPUTS, "mono", 1.00); }