Previous 199869 Revisions Next

r26791 Saturday 28th December, 2013 at 01:46:52 UTC by smf
preliminary receiving serial support for MC68901 [smf]
[src/emu/machine]mc68901.c mc68901.h

trunk/src/emu/machine/mc68901.c
r26790r26791
409409   save_item(NAME(m_tsr));
410410   save_item(NAME(m_udr));
411411   save_item(NAME(m_udr_written));
412   save_item(NAME(m_rcv));
413   save_item(NAME(m_rcv_pending));
412414   save_item(NAME(m_rxtx_word));
413415   save_item(NAME(m_rxtx_start));
414416   save_item(NAME(m_rxtx_stop));
r26790r26791
455457   register_w(REGISTER_RSR, 0);
456458
457459   transmit_register_reset();
460   receive_register_reset();
458461}
459462
460463
r26790r26791
497500         transmit_register_setup(m_udr);
498501         m_udr_written = 0;
499502         m_tsr |= TSR_BUFFER_EMPTY;
503
504         if (m_ier & IR_XMIT_BUFFER_EMPTY)
505         {
506            take_interrupt(IR_XMIT_BUFFER_EMPTY);
507         }
500508      }
509      else
510      {
511         m_tsr |= TSR_UNDERRUN_ERROR;
512         // TODO: transmit error?
513      }
501514   }
502515   else
503516   {
r26790r26791
507520
508521
509522//-------------------------------------------------
510//  rcv_callback -
511//-------------------------------------------------
512
513void mc68901_device::rcv_callback()
514{
515   receive_register_update_bit(get_in_data_bit());
516}
517
518
519//-------------------------------------------------
520523//  rcv_complete -
521524//-------------------------------------------------
522525
523526void mc68901_device::rcv_complete()
524527{
528   receive_register_extract();
529   m_rcv = get_received_char();
530   //if (m_rcv_pending) TODO: error?
531     
532   m_rcv_pending = 1;
533   rx_buffer_full();
525534}
526535
527536
r26790r26791
570579
571580   case REGISTER_SCR:   return m_scr;
572581   case REGISTER_UCR:   return m_ucr;
573   case REGISTER_RSR:
574      m_rsr_read = 1;
575      return m_rsr;
582   case REGISTER_RSR:   return m_rsr;
576583
577584   case REGISTER_TSR:
578585      {
r26790r26791
584591      }
585592
586593   case REGISTER_UDR:
587      /* load RSR with latched value */
588      m_rsr = (m_next_rsr & 0x7c) | (m_rsr & 0x03);
589      m_next_rsr = 0;
594      m_rcv_pending = 0;
595      return m_rcv;
590596
591      if (m_rsr & 0x78)
592      {
593         /* signal receiver error interrupt */
594         rx_error();
595      }
596
597      return m_udr;
598
599597   default:                      return 0;
600598   }
601599}
r26790r26791
11351133
11361134WRITE_LINE_MEMBER(mc68901_device::write_rx)
11371135{
1138   if (state)
1139   {
1140      input_callback(m_input_state | RX);
1141   }
1142   else
1143   {
1144      input_callback(m_input_state & ~RX);
1145   }
1136   device_serial_interface::rx_w(state);
11461137}
11471138
11481139WRITE_LINE_MEMBER(mc68901_device::write_dsr)
trunk/src/emu/machine/mc68901.h
r26790r26791
134134   // device_serial_interface overrides
135135   virtual void tra_callback();
136136   virtual void tra_complete();
137   virtual void rcv_callback();
138137   virtual void rcv_complete();
139138   virtual void input_callback(UINT8 state);
140139
r26790r26791
271270   UINT8 m_rsr;                            /* receiver status register */
272271   UINT8 m_udr;                            /* USART data register */
273272   int m_udr_written;
273   UINT8 m_rcv;
274   int m_rcv_pending;
274275
275276   /* counter timer state */
276277   UINT8 m_tmc[4];     /* timer main counters */

Previous 199869 Revisions Next


© 1997-2024 The MAME Team