From fc3a4001e68402922f9329895227c468f88feb2b Mon Sep 17 00:00:00 2001 From: arbee Date: Wed, 28 Jan 2015 09:20:23 -0500 Subject: (MESS) nes: Working MIDI output for Miracle Piano [R. Belmont] --- src/emu/bus/nes_ctrl/miracle.c | 27 +++++++++++++++------------ src/emu/bus/nes_ctrl/miracle.h | 2 +- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/emu/bus/nes_ctrl/miracle.c b/src/emu/bus/nes_ctrl/miracle.c index 0a88e8a4cfc..00b70cd3e2d 100644 --- a/src/emu/bus/nes_ctrl/miracle.c +++ b/src/emu/bus/nes_ctrl/miracle.c @@ -2,8 +2,7 @@ Nintendo Entertainment System - Miracle Piano Keyboard - TODO: basically everything, this is just a skeleton with no - real MIDI handling at the moment. + TODO: MIDI input, output is now working. Copyright MESS Team. Visit http://mamedev.org for licensing and usage restrictions. @@ -13,8 +12,8 @@ #include "miracle.h" #define MIRACLE_MIDI_WAITING 0 -#define MIRACLE_MIDI_RECEIVE 1 // receive byte from piano -#define MIRACLE_MIDI_SEND 2 // send byte to piano +#define MIRACLE_MIDI_RECEIVE 1 // receive byte from piano +#define MIRACLE_MIDI_SEND 2 // send byte to piano //************************************************************************** // DEVICE DEFINITIONS @@ -44,6 +43,10 @@ void nes_miracle_device::device_timer(emu_timer &timer, device_timer_id id, int { m_strobe_clock++; } + else + { + device_serial_interface::device_timer(timer, id, param, ptr); + } } //************************************************************************** @@ -129,7 +132,7 @@ UINT8 nes_miracle_device::read_bit0() void nes_miracle_device::write(UINT8 data) { -// printf("write: %d (%d %02x %d)\n", data & 1, m_sent_bits, m_data_sent, m_midi_mode); +// printf("write: %d (%d %02x %d)\n", data & 1, m_sent_bits, m_data_sent, m_midi_mode); if (m_midi_mode == MIRACLE_MIDI_SEND) { @@ -142,7 +145,7 @@ void nes_miracle_device::write(UINT8 data) // then we go back to waiting if (m_sent_bits == 8) { -// printf("xmit MIDI byte %02x\n", m_data_sent); +// printf("xmit MIDI byte %02x\n", m_data_sent); xmit_char(m_data_sent); m_midi_mode = MIRACLE_MIDI_WAITING; m_sent_bits = 0; @@ -163,7 +166,7 @@ void nes_miracle_device::write(UINT8 data) // was timer running? if (m_strobe_clock > 0) { -// printf("got strobe at %d clocks\n", m_strobe_clock); +// printf("got strobe at %d clocks\n", m_strobe_clock); if (m_strobe_clock < 66 && data == 0) { @@ -199,12 +202,11 @@ void nes_miracle_device::write(UINT8 data) void nes_miracle_device::rcv_complete() // Rx completed receiving byte { receive_register_extract(); -// UINT8 rcv = get_received_char(); +// UINT8 rcv = get_received_char(); } void nes_miracle_device::tra_complete() // Tx completed sending byte { -// printf("Tx complete\n"); // is there more waiting to send? if (m_xmit_read != m_xmit_write) { @@ -222,14 +224,14 @@ void nes_miracle_device::tra_complete() // Tx completed sending byte void nes_miracle_device::tra_callback() // Tx send bit { + UINT8 bit = transmit_register_get_data_bit(); + // send this to midi out - m_midiout->write_txd(transmit_register_get_data_bit()); + m_midiout->write_txd(bit); } void nes_miracle_device::xmit_char(UINT8 data) { -// printf("xmit %02x\n", data); - // if tx is busy it'll pick this up automatically when it completes // if not, send now! if (!m_tx_busy) @@ -247,3 +249,4 @@ void nes_miracle_device::xmit_char(UINT8 data) } } } + diff --git a/src/emu/bus/nes_ctrl/miracle.h b/src/emu/bus/nes_ctrl/miracle.h index 08a611e0684..1ea7580bc40 100644 --- a/src/emu/bus/nes_ctrl/miracle.h +++ b/src/emu/bus/nes_ctrl/miracle.h @@ -28,7 +28,7 @@ class nes_miracle_device : public device_t, public device_nes_control_port_interface { public: - static const int XMIT_RING_SIZE = 16; + static const int XMIT_RING_SIZE = 64; // construction/destruction nes_miracle_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); -- cgit v1.2.3