Previous 199869 Revisions Next

r22960 Sunday 19th May, 2013 at 21:44:31 UTC by Curt Coder
(MESS) mpz80: Refactored to use serial terminal thru an RS-232 port. [Curt Coder]
[src/mess/drivers]horizon.c mpz80.c xor100.c
[src/mess/includes]mpz80.h
[src/mess/machine]s100.c s100.h s100_wunderbus.c s100_wunderbus.h

trunk/src/mess/drivers/mpz80.c
r22959r22960
629629//**************************************************************************
630630
631631//-------------------------------------------------
632//  GENERIC_TERMINAL_INTERFACE( terminal_intf )
633//-------------------------------------------------
634
635static GENERIC_TERMINAL_INTERFACE( terminal_intf )
636{
637   DEVCB_DEVICE_MEMBER(S100_TAG, s100_device, terminal_receive_w)
638};
639
640
641//-------------------------------------------------
642632//  S100_INTERFACE( s100_intf )
643633//-------------------------------------------------
644634
r22959r22960
677667   DEVCB_NULL,
678668   DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
679669   DEVCB_NULL,
680   DEVCB_NULL,
681   DEVCB_DEVICE_MEMBER(TERMINAL_TAG, generic_terminal_device, write)
670   DEVCB_NULL
682671};
683672
684673static SLOT_INTERFACE_START( mpz80_s100_cards )
r22959r22960
755744   MCFG_S100_SLOT_ADD("s100_13", mpz80_s100_cards, NULL, NULL)
756745   MCFG_S100_SLOT_ADD("s100_14", mpz80_s100_cards, NULL, NULL)
757746
758   // devices
759   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
760
761747   // internal ram
762748   MCFG_RAM_ADD(RAM_TAG)
763749   MCFG_RAM_DEFAULT_SIZE("65K")
trunk/src/mess/drivers/horizon.c
r22959r22960
199199   DEVCB_NULL,
200200   DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
201201   DEVCB_NULL,
202   DEVCB_NULL,
203202   DEVCB_NULL
204203};
205204
trunk/src/mess/drivers/xor100.c
r22959r22960
556556   DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
557557   DEVCB_NULL,
558558   DEVCB_NULL,
559   DEVCB_NULL,
560559};
561560
562561static SLOT_INTERFACE_START( xor100_s100_cards )
trunk/src/mess/machine/s100.c
r22959r22960
8787      memset(&m_out_rdy_cb, 0, sizeof(m_out_rdy_cb));
8888      memset(&m_out_hold_cb, 0, sizeof(m_out_hold_cb));
8989      memset(&m_out_error_cb, 0, sizeof(m_out_error_cb));
90      memset(&m_out_terminal_cb, 0, sizeof(m_out_terminal_cb));
9190   }
9291}
9392
r22959r22960
131130   m_out_rdy_func.resolve(m_out_rdy_cb, *this);
132131   m_out_hold_func.resolve(m_out_hold_cb, *this);
133132   m_out_error_func.resolve(m_out_error_cb, *this);
134   m_out_terminal_func.resolve(m_out_terminal_cb, *this);
135133}
136134
137135
r22959r22960
246244WRITE_LINE_MEMBER( s100_device::error_w ) { m_out_error_func(state); }
247245
248246
249//-------------------------------------------------
250//  terminal_receive_w - receive character
251//-------------------------------------------------
252247
253WRITE8_MEMBER( s100_device::terminal_receive_w )
254{
255   device_s100_card_interface *entry = m_device_list.first();
256
257   while (entry)
258   {
259      if (entry->s100_has_terminal())
260      {
261         entry->s100_terminal_w(data);
262         break;
263      }
264      entry = entry->next();
265   }
266}
267
268
269//-------------------------------------------------
270//  terminal_transmit_w - transmit character
271//-------------------------------------------------
272
273WRITE8_MEMBER( s100_device::terminal_transmit_w )
274{
275   terminal_transmit_w(data);
276}
277
278void s100_device::terminal_transmit_w(UINT8 data)
279{
280   m_out_terminal_func(0, data);
281}
282
283
284
285248//**************************************************************************
286249//  DEVICE S100 CARD INTERFACE
287250//**************************************************************************
trunk/src/mess/machine/s100.h
r22959r22960
144144   devcb_write_line    m_out_rdy_cb;
145145   devcb_write_line    m_out_hold_cb;
146146   devcb_write_line    m_out_error_cb;
147   devcb_write8        m_out_terminal_cb;
148147};
149148
150149class device_s100_card_interface;
r22959r22960
185184   DECLARE_WRITE_LINE_MEMBER( hold_w );
186185   DECLARE_WRITE_LINE_MEMBER( error_w );
187186
188   DECLARE_WRITE8_MEMBER( terminal_receive_w );
189   DECLARE_WRITE8_MEMBER( terminal_transmit_w );
190   void terminal_transmit_w(UINT8 data);
191
192187protected:
193188   // device-level overrides
194189   virtual void device_start();
r22959r22960
213208   devcb_resolved_write_line   m_out_rdy_func;
214209   devcb_resolved_write_line   m_out_hold_func;
215210   devcb_resolved_write_line   m_out_error_func;
216   devcb_resolved_write8       m_out_terminal_func;
217211
218212   simple_list<device_s100_card_interface> m_device_list;
219213};
r22959r22960
267261   virtual void s100_sxtrq_w(int state) { }
268262   virtual int s100_sixtn_r() { return 1; }
269263
270   // terminal
271   virtual bool s100_has_terminal() { return false; }
272   virtual void s100_terminal_w(UINT8 data) { }
273
274264   // reset
275265   virtual void s100_poc_w(int state) { }
276266   virtual void s100_reset_w(int state) { }
trunk/src/mess/machine/s100_wunderbus.c
r22959r22960
1919#define INS8250_1_TAG   "6d"
2020#define INS8250_2_TAG   "5d"
2121#define INS8250_3_TAG   "4d"
22#define RS232_A_TAG      "rs232a"
23#define RS232_B_TAG      "rs232b"
24#define RS232_C_TAG      "rs232c"
2225#define UPD1990C_TAG    "12a"
2326
2427
r22959r22960
5861//-------------------------------------------------
5962//  ins8250_interface ace1_intf
6063//-------------------------------------------------
61/*
62static INS8250_TRANSMIT( ace1_transmit )
63{
64    s100_wunderbus_device *wunderbus = downcast<s100_wunderbus_device *>(device->owner());
6564
66    wunderbus->m_bus->terminal_transmit_w(data);
67}
68*/
69//-------------------------------------------------
70//  s100_terminal_w - terminal write
71//-------------------------------------------------
72
73void s100_wunderbus_device::s100_terminal_w(UINT8 data)
74{
75//  ins8250_receive(m_ace1, data);
76}
77
7865static ins8250_interface ace1_intf =
7966{
80   DEVCB_NULL,
81   DEVCB_NULL,
67   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, serial_port_device, tx),
68   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, dtr_w),
69   DEVCB_DEVICE_LINE_MEMBER(RS232_A_TAG, rs232_port_device, rts_w),
8270   DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir3_w),
8371   DEVCB_NULL,
84   DEVCB_NULL,
8572   DEVCB_NULL
8673};
8774
r22959r22960
9279
9380static ins8250_interface ace2_intf =
9481{
95   DEVCB_NULL,
96   DEVCB_NULL,
82   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, serial_port_device, tx),
83   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, dtr_w),
84   DEVCB_DEVICE_LINE_MEMBER(RS232_B_TAG, rs232_port_device, rts_w),
9785   DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir4_w),
9886   DEVCB_NULL,
99   DEVCB_NULL,
10087   DEVCB_NULL
10188};
10289
r22959r22960
10794
10895static ins8250_interface ace3_intf =
10996{
110   DEVCB_NULL,
111   DEVCB_NULL,
97   DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, serial_port_device, tx),
98   DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, rs232_port_device, dtr_w),
99   DEVCB_DEVICE_LINE_MEMBER(RS232_C_TAG, rs232_port_device, rts_w),
112100   DEVCB_DEVICE_LINE_MEMBER(I8259A_TAG, pic8259_device, ir5_w),
113101   DEVCB_NULL,
114   DEVCB_NULL,
115102   DEVCB_NULL
116103};
117104
118105
119106//-------------------------------------------------
107//  rs232_port_interface rs232a_intf
108//-------------------------------------------------
109
110static DEVICE_INPUT_DEFAULTS_START( terminal )
111   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x06 ) // 9600
112   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x00 ) // 8N1
113DEVICE_INPUT_DEFAULTS_END
114
115static const rs232_port_interface rs232a_intf =
116{
117   DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, rx_w),
118   DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, dcd_w),
119   DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, dsr_w),
120   DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, ri_w),
121   DEVCB_DEVICE_LINE_MEMBER(INS8250_1_TAG, ins8250_uart_device, cts_w)
122};
123
124
125//-------------------------------------------------
126//  rs232_port_interface rs232b_intf
127//-------------------------------------------------
128
129static const rs232_port_interface rs232b_intf =
130{
131   DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, rx_w),
132   DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, dcd_w),
133   DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, dsr_w),
134   DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, ri_w),
135   DEVCB_DEVICE_LINE_MEMBER(INS8250_2_TAG, ins8250_uart_device, cts_w)
136};
137
138
139//-------------------------------------------------
140//  rs232_port_interface rs232c_intf
141//-------------------------------------------------
142
143static const rs232_port_interface rs232c_intf =
144{
145   DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, rx_w),
146   DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, dcd_w),
147   DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, dsr_w),
148   DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, ri_w),
149   DEVCB_DEVICE_LINE_MEMBER(INS8250_3_TAG, ins8250_uart_device, cts_w)
150};
151
152
153//-------------------------------------------------
120154//  UPD1990A_INTERFACE( rtc_intf )
121155//-------------------------------------------------
122156
r22959r22960
145179   MCFG_INS8250_ADD(INS8250_1_TAG, ace1_intf, XTAL_18_432MHz/10)
146180   MCFG_INS8250_ADD(INS8250_2_TAG, ace2_intf, XTAL_18_432MHz/10)
147181   MCFG_INS8250_ADD(INS8250_3_TAG, ace3_intf, XTAL_18_432MHz/10)
182   MCFG_RS232_PORT_ADD(RS232_A_TAG, rs232a_intf, default_rs232_devices, "serial_terminal", terminal)
183   MCFG_RS232_PORT_ADD(RS232_B_TAG, rs232b_intf, default_rs232_devices, NULL, NULL)
184   MCFG_RS232_PORT_ADD(RS232_C_TAG, rs232c_intf, default_rs232_devices, NULL, NULL)
148185   MCFG_UPD1990A_ADD(UPD1990C_TAG, XTAL_32_768kHz, rtc_intf)
149186MACHINE_CONFIG_END
150187
trunk/src/mess/machine/s100_wunderbus.h
r22959r22960
1616#include "machine/ins8250.h"
1717#include "machine/pic8259.h"
1818#include "machine/s100.h"
19#include "machine/serial.h"
1920#include "machine/upd1990a.h"
2021
2122
r22959r22960
5253   virtual void s100_vi2_w(int state);
5354   virtual UINT8 s100_sinp_r(address_space &space, offs_t offset);
5455   virtual void s100_sout_w(address_space &space, offs_t offset, UINT8 data);
55   virtual bool s100_has_terminal() { return true; }
56   virtual void s100_terminal_w(UINT8 data);
5756
5857private:
5958   required_device<pic8259_device> m_pic;
trunk/src/mess/includes/mpz80.h
r22959r22960
1212#include "machine/s100_djdma.h"
1313#include "machine/s100_mm65k16s.h"
1414#include "machine/s100_wunderbus.h"
15#include "machine/terminal.h"
1615
1716#define Z80_TAG         "17a"
1817#define AM9512_TAG      "17d"
19#define TERMINAL_TAG    "terminal"
2018
2119class mpz80_state : public driver_device
2220{
r22959r22960
2523      : driver_device(mconfig, type, tag),
2624         m_maincpu(*this, Z80_TAG),
2725         m_ram(*this, RAM_TAG),
28         m_terminal(*this, TERMINAL_TAG),
2926         m_s100(*this, S100_TAG),
3027         m_rom(*this, Z80_TAG),
3128         m_map_ram(*this, "map_ram"),
r22959r22960
4542
4643   required_device<cpu_device> m_maincpu;
4744   required_device<ram_device> m_ram;
48   required_device<generic_terminal_device> m_terminal;
4945   required_device<s100_device> m_s100;
5046   required_memory_region m_rom;
5147   optional_shared_ptr<UINT8> m_map_ram;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team