Previous 199869 Revisions Next

r22878 Friday 17th May, 2013 at 20:45:06 UTC by Curt Coder
i8251: Implemented 16X/64X clock modes. [Curt Coder]
(MESS) xor100: Refactored to use serial terminal. [Curt Coder]
[src/emu/machine]i8251.c i8251.h
[src/mess/drivers]softbox.c xor100.c
[src/mess/includes]softbox.h xor100.h

trunk/src/emu/machine/i8251.c
r22877r22878
139139
140140void i8251_device::receive_clock()
141141{
142   m_rxc++;
143
144   if (m_rxc == m_br_factor)
145      m_rxc = 0;
146   else
147      return;
148
142149   /* receive enable? */
143150   if (m_command & (1<<2))
144151   {
r22877r22878
165172
166173void i8251_device::transmit_clock()
167174{
175   m_txc++;
176
177   if (m_txc == m_br_factor)
178      m_txc = 0;
179   else
180      return;
181
168182   /* transmit enable? */
169183   if (m_command & (1<<0))
170184   {
r22877r22878
316330   m_mode_byte = 0;
317331   m_command = 0;
318332   m_data = 0;
333   m_rxc = m_txc = 0;
334   m_br_factor = 1;
319335
320336   /* update tx empty pin output */
321337   update_tx_empty();
r22877r22878
464480            }
465481            set_data_frame(word_length,stop_bit_count,parity);
466482
483            switch (data & 0x03)
484            {
485            case 1: m_br_factor = 1; break;
486            case 2: m_br_factor = 16; break;
487            case 3: m_br_factor = 64; break;
488            }
489
490            m_rxc = m_txc = 0;
491
467492#if 0
468493            /* data bits */
469494            m_receive_char_length = (((data>>2) & 0x03)+5);
trunk/src/emu/machine/i8251.h
r22877r22878
119119   /* mode byte - bit definitions depend on mode - e.g. synchronous, asynchronous */
120120   UINT8 m_mode_byte;
121121
122   int m_rxc;
123   int m_txc;
124   int m_br_factor;
125
122126   /* data being received */
123127   UINT8 m_data;
124128};
trunk/src/mess/drivers/xor100.c
r22877r22878
153153   m_dbrg->stt_w(data >> 4);
154154}
155155
156WRITE8_MEMBER( xor100_state::i8251_b_data_w )
157{
158   m_uart_b->data_w(space, 0, data);
159   m_terminal->write(space, 0, data);
160}
161
162156READ8_MEMBER( xor100_state::fdc_r )
163157{
164158   return m_fdc->gen_r(offset) ^ 0xff;
r22877r22878
265259   ADDRESS_MAP_GLOBAL_MASK(0xff)
266260   AM_RANGE(0x00, 0x00) AM_DEVREADWRITE(I8251_A_TAG, i8251_device, data_r, data_w)
267261   AM_RANGE(0x01, 0x01) AM_DEVREADWRITE(I8251_A_TAG, i8251_device, status_r, control_w)
268   AM_RANGE(0x02, 0x02) AM_DEVREAD(I8251_B_TAG, i8251_device, data_r) AM_WRITE(i8251_b_data_w)
262   AM_RANGE(0x02, 0x02) AM_DEVREADWRITE(I8251_B_TAG, i8251_device, data_r, data_w)
269263   AM_RANGE(0x03, 0x03) AM_DEVREADWRITE(I8251_B_TAG, i8251_device, status_r, control_w)
270264   AM_RANGE(0x04, 0x07) AM_DEVREADWRITE(I8255A_TAG, i8255_device, read, write)
271265   AM_RANGE(0x08, 0x08) AM_WRITE(mmu_w)
r22877r22878
401395
402396static const i8251_interface terminal_8251_intf =
403397{
398   DEVCB_DEVICE_LINE_MEMBER(TERMINAL_TAG, serial_terminal_device, tx_r),
399   DEVCB_DEVICE_LINE_MEMBER(TERMINAL_TAG, serial_terminal_device, rx_w),
404400   DEVCB_NULL,
405401   DEVCB_NULL,
406402   DEVCB_NULL,
407403   DEVCB_NULL,
408404   DEVCB_NULL,
409405   DEVCB_NULL,
410   DEVCB_NULL,
411   DEVCB_NULL,
412406   DEVCB_NULL
413407};
414408
r22877r22878
512506
513507/* Terminal Interface */
514508
515WRITE8_MEMBER( xor100_state::xor100_kbd_put )
516{
517   m_uart_b->receive_character(data);
518}
509static DEVICE_INPUT_DEFAULTS_START( terminal )
510   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x06 ) // 9600
511   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x00 ) // 8N1
512DEVICE_INPUT_DEFAULTS_END
519513
520514static GENERIC_TERMINAL_INTERFACE( xor100_terminal_intf )
521515{
522   DEVCB_DRIVER_MEMBER(xor100_state, xor100_kbd_put)
516   DEVCB_NULL
523517};
524518
525519static S100_INTERFACE( s100_intf )
r22877r22878
598592   MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":3", xor100_floppies, NULL,    NULL, floppy_image_device::default_floppy_formats)
599593
600594   MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, xor100_centronics_intf)
601   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, xor100_terminal_intf)
595   MCFG_SERIAL_TERMINAL_ADD(TERMINAL_TAG, xor100_terminal_intf, 9600)
596   MCFG_DEVICE_INPUT_DEFAULTS(terminal)
602597
603598   // S-100
604599   MCFG_S100_BUS_ADD(Z80_TAG, s100_intf)
trunk/src/mess/drivers/softbox.c
r22877r22878
246246
247247WRITE_LINE_MEMBER( softbox_state::fr_w )
248248{
249   m_rx_clock++;
250
251   if (m_rx_clock & 0x10)
252   {
253      m_rx_clock = 0;
254      m_usart->receive_clock();
255   }
249   m_usart->receive_clock();
256250}
257251
258252WRITE_LINE_MEMBER( softbox_state::ft_w )
259253{
260   m_tx_clock++;
261
262   if (m_tx_clock & 0x10)
263   {
264      m_tx_clock = 0;
265      m_usart->transmit_clock();
266   }
254   m_usart->transmit_clock();
267255}
268256
269257static COM8116_INTERFACE( dbrg_intf )
trunk/src/mess/includes/xor100.h
r22877r22878
7070   DECLARE_WRITE8_MEMBER( prom_toggle_w );
7171   DECLARE_READ8_MEMBER( prom_disable_r );
7272   DECLARE_WRITE8_MEMBER( baud_w );
73   DECLARE_WRITE8_MEMBER( i8251_b_data_w );
7473   DECLARE_READ8_MEMBER( fdc_r );
7574   DECLARE_WRITE8_MEMBER( fdc_w );
7675   DECLARE_READ8_MEMBER( fdc_wait_r );
trunk/src/mess/includes/softbox.h
r22877r22878
2626        m_maincpu(*this, Z80_TAG),
2727        m_usart(*this, I8251_TAG),
2828        m_dbrg(*this, COM8116_TAG),
29        m_ieee(*this, IEEE488_TAG),
30        m_rx_clock(0),
31        m_tx_clock(0)
29        m_ieee(*this, IEEE488_TAG)
3230   { }
3331
3432   required_device<cpu_device> m_maincpu;
r22877r22878
5351      LED_B,
5452      LED_READY
5553   };
56
57   int m_rx_clock;
58   int m_tx_clock;
5954};
6055
6156#endif

Previous 199869 Revisions Next


© 1997-2024 The MAME Team