summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bus/nes_ctrl/miracle.c
diff options
context:
space:
mode:
author arbee <rb6502@users.noreply.github.com>2015-01-28 09:20:23 -0500
committer arbee <rb6502@users.noreply.github.com>2015-01-28 09:20:23 -0500
commitfc3a4001e68402922f9329895227c468f88feb2b (patch)
tree19b09ae27f85200ee69699818d94ed04d2fcf8f1 /src/emu/bus/nes_ctrl/miracle.c
parent1541b221361037762d656b209537d669b972f891 (diff)
(MESS) nes: Working MIDI output for Miracle Piano [R. Belmont]
Diffstat (limited to 'src/emu/bus/nes_ctrl/miracle.c')
-rw-r--r--src/emu/bus/nes_ctrl/miracle.c27
1 files changed, 15 insertions, 12 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)
}
}
}
+