diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua index b6c8217c2a7..f7c4d256018 100644 --- a/scripts/target/mame/mess.lua +++ b/scripts/target/mame/mess.lua @@ -3323,6 +3323,8 @@ files { MAME_DIR .. "src/mame/drivers/roland_tr606.cpp", MAME_DIR .. "src/mame/drivers/roland_tr707.cpp", MAME_DIR .. "src/mame/drivers/roland_u20.cpp", + MAME_DIR .. "src/mame/audio/bu3905.cpp", + MAME_DIR .. "src/mame/audio/bu3905.h", MAME_DIR .. "src/mame/audio/jx8p_synth.cpp", MAME_DIR .. "src/mame/audio/jx8p_synth.h", MAME_DIR .. "src/mame/machine/mb62h195.cpp", diff --git a/src/mame/audio/bu3905.cpp b/src/mame/audio/bu3905.cpp new file mode 100644 index 00000000000..734eb8fc287 --- /dev/null +++ b/src/mame/audio/bu3905.cpp @@ -0,0 +1,31 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + + Skeleton device for Roland BU3905 output assigner gate array. + + This 42-pin IC has Roland part number 15229873. Most of its outputs + are used to control analog switches. The CE0 and XRST inputs are + normally tied to Vcc. + +****************************************************************************/ + +#include "emu.h" +#include "bu3905.h" + +// device type definition +DEFINE_DEVICE_TYPE(BU3905, bu3905_device, "bu3905", "Roland BU3905S R11-0006 Output Assigner") + +bu3905_device::bu3905_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, BU3905, tag, owner, clock) +{ +} + +void bu3905_device::device_start() +{ +} + +void bu3905_device::write(offs_t offset, u8 data) +{ + logerror("%s: Writing %02X to offset %X\n", machine().describe_context(), data, offset & 0xf); +} diff --git a/src/mame/audio/bu3905.h b/src/mame/audio/bu3905.h new file mode 100644 index 00000000000..7446aceff87 --- /dev/null +++ b/src/mame/audio/bu3905.h @@ -0,0 +1,56 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/**************************************************************************** + _____ _____ + XCE2 1 |* \_/ | 42 VDD + XCE1 2 | | 41 Q7 + CE0 3 | | 40 Q6 + D7 4 | | 39 Q5 + D6 5 | | 38 Q4 + D5 6 | | 37 Q3 + D4 7 | | 36 Q2 + D3 8 | | 35 Q1 + D2 9 | | 34 Q0 + D1 10 | | 33 XQ7 + NC 11 | BU3905S | 32 NC + D0 12 | | 31 XQ6 + A3 13 | | 30 XQ5 + A2 14 | | 29 XQ4 + A1 15 | | 28 XQ3 + A0 16 | | 27 XQ2 + CH0 17 | | 26 XQ1 + CH1 18 | | 25 XQ0 + CH2 19 | | 24 AXO + XEN 20 | | 23 AXI + GND 21 |_____________| 22 XRST + +****************************************************************************/ + +#ifndef MAME_AUDIO_BU3905_H +#define MAME_AUDIO_BU3905_H + +#pragma once + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> bu3905_device + +class bu3905_device : public device_t +{ +public: // construction/destruction + bu3905_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); + + void write(offs_t offset, u8 data); + +protected: + // device-level overrides + virtual void device_start() override; +}; + +// device type declaration +DECLARE_DEVICE_TYPE(BU3905, bu3905_device) + +#endif // MAME_AUDIO_BU3905_H diff --git a/src/mame/drivers/roland_s10.cpp b/src/mame/drivers/roland_s10.cpp index fae40341c26..7b063794a06 100644 --- a/src/mame/drivers/roland_s10.cpp +++ b/src/mame/drivers/roland_s10.cpp @@ -11,6 +11,7 @@ ****************************************************************************/ #include "emu.h" +#include "audio/bu3905.h" //#include "bus/midi/midi.h" #include "cpu/mcs51/mcs51.h" #include "machine/i8251.h" @@ -66,6 +67,7 @@ class roland_s220_state : public roland_s10_state public: roland_s220_state(const machine_config &mconfig, device_type type, const char *tag) : roland_s10_state(mconfig, type, tag) + , m_outctrl(*this, "outctrl") { } @@ -80,6 +82,8 @@ private: void led_latch2_w(u8 data); void s220_ext_map(address_map &map); + + required_device m_outctrl; }; @@ -136,6 +140,7 @@ void roland_s10_state::led_latch_w(u8 data) void roland_s220_state::output_control_w(offs_t offset, u8 data) { + m_outctrl->write(offset, data & 0x0f); } void roland_s220_state::vca_cv_w(offs_t offset, u8 data) @@ -276,6 +281,8 @@ void roland_s220_state::s220(machine_config &config) subdevice("screen")->set_size(6*16, 8*2); subdevice("screen")->set_visarea_full(); m_lcdc->set_pixel_update_cb(FUNC(roland_s220_state::lcd_pixel_update)); + + BU3905(config, m_outctrl); } diff --git a/src/mame/drivers/roland_s50.cpp b/src/mame/drivers/roland_s50.cpp index 50d7440c6b0..25310f10fca 100644 --- a/src/mame/drivers/roland_s50.cpp +++ b/src/mame/drivers/roland_s50.cpp @@ -7,6 +7,7 @@ ****************************************************************************/ #include "emu.h" +#include "audio/bu3905.h" //#include "bus/midi/midi.h" #include "cpu/mcs96/i8x9x.h" #include "imagedev/floppy.h" @@ -199,6 +200,9 @@ void roland_s50_state::s550_io_map(address_map &map) map(0x1000, 0x1000).r(m_vdp, FUNC(tms3556_device::vram_r)); map(0x1002, 0x1002).rw(m_vdp, FUNC(tms3556_device::initptr_r), FUNC(tms3556_device::vram_w)); map(0x1004, 0x1004).rw(m_vdp, FUNC(tms3556_device::reg_r), FUNC(tms3556_device::reg_w)); + //map(0x1800, 0x181f).rw(m_tvf, FUNC(mb654419u_device::read), FUNC(mb654419u_device::write)).umask16(0x00ff); + map(0x2800, 0x281f).w("outas", FUNC(bu3905_device::write)).umask16(0x00ff); + //map(0x3800, 0x381f).rw(m_scsic, FUNC(mb89352_device::read), FUNC(mb89352_device::write)).umask16(0x00ff); //map(0x0000, 0x3fff).rw(m_wave, FUNC(rf5c16_device::read), FUNC(rf5c16_device::write)).umask16(0xff00); } @@ -212,7 +216,7 @@ void roland_w30_state::w30_mem_map(address_map &map) map(0xc600, 0xc600).rw(FUNC(roland_w30_state::psram_bank_r), FUNC(roland_w30_state::psram_bank_w)); map(0xc800, 0xc807).rw(m_fdc, FUNC(wd1772_device::read), FUNC(wd1772_device::write)).umask16(0x00ff); map(0xd806, 0xd806).r(FUNC(roland_w30_state::unknown_status_r)); - //map(0xe000, 0xe01f).rw("scsic", FUNC(mb89352_device::read), FUNC(mb89352_device::write)).umask16(0x00ff); + //map(0xe000, 0xe01f).rw(m_scsic, FUNC(mb89352_device::read), FUNC(mb89352_device::write)).umask16(0x00ff); map(0xe400, 0xe403).rw("lcd", FUNC(lm24014h_device::read), FUNC(lm24014h_device::write)).umask16(0x00ff); //map(0xe800, 0xe83f).w("output", FUNC(upd65006gf_376_3b8_device::write)).umask16(0x00ff); //map(0xf000, 0xf01f).rw(m_tvf, FUNC(mb654419u_device::read), FUNC(mb654419u_device::write)).umask16(0x00ff); @@ -336,6 +340,13 @@ void roland_s50_state::s550(machine_config &config) //UPD7537(config.device_replace(), "fipcpu", 400_kHz_XTAL); config.device_remove("keyscan"); + + //MB89352(config, m_scsic, 8_MHz_XTAL); // on Option Board + //m_scsic->intr_callback().set_inputline(m_maincpu, i8x9x_device::EXTINT_LINE); + + BU3905(config, "outas"); + + //MB654419U(config, m_tvf, 20_MHz_XTAL); } void roland_w30_state::w30(machine_config &config) @@ -365,7 +376,7 @@ void roland_w30_state::w30(machine_config &config) // Floppy unit: FX-354 (307F1JC) FLOPPY_CONNECTOR(config, m_floppy, s50_floppies, "35dd", floppy_image_device::default_floppy_formats).enable_sound(true); - //MB89352(config, "scsic", 8_MHz_XTAL); // by option + //MB89352(config, m_scsic, 8_MHz_XTAL); // by option LM24014H(config, "lcd"); // LCD unit: LM240142 @@ -423,7 +434,7 @@ void roland_w30_state::s330(machine_config &config) //R15229874(config, m_wave, 26.88_MHz_XTAL); //m_wave->int_callback().set_inputline(m_maincpu, i8x9x_device::HSI0_LINE); - //BU3905S(config, "output"); + BU3905(config, "outas"); //MB654419U(config, m_tvf, 20_MHz_XTAL); }