diff --git a/src/emu/bus/msx_cart/msx_audio.c b/src/emu/bus/msx_cart/msx_audio.c index 258aeebb703..f515db3828e 100644 --- a/src/emu/bus/msx_cart/msx_audio.c +++ b/src/emu/bus/msx_cart/msx_audio.c @@ -32,7 +32,7 @@ The keyboards: TODO: -- Implement MIDI in/out/through +- Test MIDI in/out/through - Sample RAM - Implement NMS-1160 keyboard - HX-MU901: ENTER/SELECT keys and multi sensors @@ -112,6 +112,8 @@ msx_cart_msx_audio_nms1205::msx_cart_msx_audio_nms1205(const machine_config &mco , msx_cart_interface(mconfig, *this) , m_y8950(*this, "y8950") , m_acia6850(*this, "acia6850") + , m_mdout(*this, "mdout") + , m_mdthru(*this, "mdthru") { } @@ -128,6 +130,14 @@ static MACHINE_CONFIG_FRAGMENT( msx_audio_nms1205 ) // There is a 2 MHz crystal on the PCB, the 6850 TX and RX clocks are derived from it MCFG_DEVICE_ADD("acia6850", ACIA6850, 0) + MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("mdout", midi_port_device, write_txd)) + + MCFG_MIDI_PORT_ADD("mdin", midiin_slot, "midiin") + MCFG_MIDI_RX_HANDLER(WRITELINE(msx_cart_msx_audio_nms1205, midi_in)) + + MCFG_MIDI_PORT_ADD("mdthru", midiout_slot, "midiout") + + MCFG_MIDI_PORT_ADD("mdout", midiout_slot, "midiout") MACHINE_CONFIG_END @@ -148,12 +158,24 @@ const rom_entry *msx_cart_msx_audio_nms1205::device_rom_region() const } +WRITE_LINE_MEMBER(msx_cart_msx_audio_nms1205::midi_in) +{ + // MIDI in signals is sent to both the 6850 and the MIDI thru output port + m_acia6850->write_rxd(state); + m_mdthru->write_txd(state); +} + + void msx_cart_msx_audio_nms1205::device_start() { // Install IO read/write handlers address_space &space = machine().device("maincpu")->space(AS_IO); space.install_write_handler(0xc0, 0xc1, write8_delegate(FUNC(y8950_device::write), m_y8950.target())); space.install_read_handler(0xc0, 0xc1, read8_delegate(FUNC(y8950_device::read), m_y8950.target())); + space.install_write_handler(0x00, 0x00, write8_delegate(FUNC(acia6850_device::control_w), m_acia6850.target())); + space.install_write_handler(0x01, 0x01, write8_delegate(FUNC(acia6850_device::data_w), m_acia6850.target())); + space.install_read_handler(0x04,0x04, read8_delegate(FUNC(acia6850_device::status_r), m_acia6850.target())); + space.install_read_handler(0x05,0x05, read8_delegate(FUNC(acia6850_device::data_r), m_acia6850.target())); } diff --git a/src/emu/bus/msx_cart/msx_audio.h b/src/emu/bus/msx_cart/msx_audio.h index d7545af3938..8757c5871a5 100644 --- a/src/emu/bus/msx_cart/msx_audio.h +++ b/src/emu/bus/msx_cart/msx_audio.h @@ -4,6 +4,7 @@ #include "bus/msx_cart/cartridge.h" #include "sound/8950intf.h" #include "machine/6850acia.h" +#include "bus/midi/midi.h" extern const device_type MSX_CART_MSX_AUDIO_NMS1205; @@ -45,9 +46,13 @@ public: virtual DECLARE_READ8_MEMBER(read_cart); + DECLARE_WRITE_LINE_MEMBER(midi_in); + private: required_device m_y8950; required_device m_acia6850; + required_device m_mdout; + required_device m_mdthru; };