Previous 199869 Revisions Next

r34701 Wednesday 28th January, 2015 at 14:20:23 UTC by R. Belmont
(MESS) nes: Working MIDI output for Miracle Piano [R. Belmont]
[src/emu/bus/nes_ctrl]miracle.c miracle.h

trunk/src/emu/bus/nes_ctrl/miracle.c
r243212r243213
22
33    Nintendo Entertainment System - Miracle Piano Keyboard
44
5    TODO: basically everything, this is just a skeleton with no
6    real MIDI handling at the moment.
5    TODO: MIDI input, output is now working.
76
87    Copyright MESS Team.
98    Visit http://mamedev.org for licensing and usage restrictions.
r243212r243213
1312#include "miracle.h"
1413
1514#define MIRACLE_MIDI_WAITING 0
16#define MIRACLE_MIDI_RECEIVE 1      // receive byte from piano
17#define MIRACLE_MIDI_SEND 2         // send byte to piano
15#define MIRACLE_MIDI_RECEIVE 1      // receive byte from piano
16#define MIRACLE_MIDI_SEND 2         // send byte to piano
1817
1918//**************************************************************************
2019//  DEVICE DEFINITIONS
r243212r243213
4443   {
4544      m_strobe_clock++;
4645   }
46   else
47   {
48      device_serial_interface::device_timer(timer, id, param, ptr);
49   }
4750}
4851
4952//**************************************************************************
r243212r243213
129132
130133void nes_miracle_device::write(UINT8 data)
131134{
132//  printf("write: %d (%d %02x %d)\n", data & 1, m_sent_bits, m_data_sent, m_midi_mode);
135//   printf("write: %d (%d %02x %d)\n", data & 1, m_sent_bits, m_data_sent, m_midi_mode);
133136
134137   if (m_midi_mode == MIRACLE_MIDI_SEND)
135138   {
r243212r243213
142145      // then we go back to waiting
143146      if (m_sent_bits == 8)
144147      {
145//          printf("xmit MIDI byte %02x\n", m_data_sent);
148//         printf("xmit MIDI byte %02x\n", m_data_sent);
146149         xmit_char(m_data_sent);
147150         m_midi_mode = MIRACLE_MIDI_WAITING;
148151         m_sent_bits = 0;
r243212r243213
163166      // was timer running?
164167      if (m_strobe_clock > 0)
165168      {
166//          printf("got strobe at %d clocks\n", m_strobe_clock);
169//         printf("got strobe at %d clocks\n", m_strobe_clock);
167170
168171         if (m_strobe_clock < 66 && data == 0)
169172         {
r243212r243213
199202void nes_miracle_device::rcv_complete()    // Rx completed receiving byte
200203{
201204   receive_register_extract();
202//  UINT8 rcv = get_received_char();
205//   UINT8 rcv = get_received_char();
203206}
204207
205208void nes_miracle_device::tra_complete()    // Tx completed sending byte
206209{
207//  printf("Tx complete\n");
208210   // is there more waiting to send?
209211   if (m_xmit_read != m_xmit_write)
210212   {
r243212r243213
222224
223225void nes_miracle_device::tra_callback()    // Tx send bit
224226{
227   UINT8 bit = transmit_register_get_data_bit();
228
225229   // send this to midi out
226   m_midiout->write_txd(transmit_register_get_data_bit());
230   m_midiout->write_txd(bit);
227231}
228232
229233void nes_miracle_device::xmit_char(UINT8 data)
230234{
231//  printf("xmit %02x\n", data);
232
233235   // if tx is busy it'll pick this up automatically when it completes
234236   // if not, send now!
235237   if (!m_tx_busy)
r243212r243213
247249      }
248250   }
249251}
252
trunk/src/emu/bus/nes_ctrl/miracle.h
r243212r243213
2828                     public device_nes_control_port_interface
2929{
3030public:
31   static const int XMIT_RING_SIZE = 16;
31   static const int XMIT_RING_SIZE = 64;
3232
3333   // construction/destruction
3434   nes_miracle_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team