Previous 199869 Revisions Next

r26082 Sunday 10th November, 2013 at 04:45:41 UTC by Carl
(mess) isbc: checkpoint, isbc2861 starts to output (nw)
[src/mess/drivers]isbc.c

trunk/src/mess/drivers/isbc.c
r26081r26082
1616#include "cpu/i86/i86.h"
1717#include "cpu/i86/i286.h"
1818#include "machine/terminal.h"
19#include "machine/pic8259.h"
20#include "machine/pit8253.h"
21#include "machine/i8255.h"
22#include "machine/i8251.h"
23#include "machine/z80dart.h"
24#include "machine/serial.h"
1925
20
2126class isbc_state : public driver_device
2227{
2328public:
2429   isbc_state(const machine_config &mconfig, device_type type, const char *tag)
2530      : driver_device(mconfig, type, tag),
2631   m_maincpu(*this, "maincpu"),
27   m_terminal(*this, TERMINAL_TAG)
32   m_terminal(*this, "terminal"),
33   m_uart8251(*this, "uart8251"),
34   m_uart8274(*this, "uart8274"),
35   m_pic_1(*this, "pic_1")
2836   { }
2937
3038   required_device<cpu_device> m_maincpu;
31   required_device<generic_terminal_device> m_terminal;
32   DECLARE_READ16_MEMBER(isbc_terminal_status_r);
33   DECLARE_READ16_MEMBER(isbc_terminal_r);
34   DECLARE_WRITE8_MEMBER(kbd_put);
35   UINT8 m_term_data;
36   virtual void machine_reset();
39   required_device<serial_terminal_device> m_terminal;
40   optional_device<i8251_device> m_uart8251;
41   optional_device<i8274_device> m_uart8274;
42   optional_device<pic8259_device> m_pic_1;
43
44   DECLARE_WRITE_LINE_MEMBER(isbc86_tmr2_w);
45   DECLARE_WRITE_LINE_MEMBER(isbc286_tmr2_w);
46   DECLARE_READ8_MEMBER(get_slave_ack);
3747};
3848
39
40
41READ16_MEMBER( isbc_state::isbc_terminal_status_r )
42{
43   return (m_term_data) ? 3 : 1;
44}
45
46READ16_MEMBER( isbc_state::isbc_terminal_r )
47{
48   UINT8 ret = m_term_data;
49   m_term_data = 0;
50   return ret;
51}
52
5349static ADDRESS_MAP_START(rpc86_mem, AS_PROGRAM, 16, isbc_state)
5450   ADDRESS_MAP_UNMAP_HIGH
5551   AM_RANGE(0x00000, 0x0ffff) AM_RAM
r26081r26082
6662   AM_RANGE(0xfc000, 0xfffff) AM_ROM AM_REGION("user1",0)
6763ADDRESS_MAP_END
6864
69static ADDRESS_MAP_START(isbc86_io, AS_IO, 16, isbc_state)
65static ADDRESS_MAP_START(isbc_io, AS_IO, 16, isbc_state)
7066   ADDRESS_MAP_UNMAP_HIGH
71   AM_RANGE(0x00d8, 0x00d9) AM_READ(isbc_terminal_r) AM_DEVWRITE8(TERMINAL_TAG, generic_terminal_device, write, 0xff)
72   AM_RANGE(0x00da, 0x00db) AM_READ(isbc_terminal_status_r)
67   AM_RANGE(0x00c0, 0x00c3) AM_DEVREADWRITE8("pic_0", pic8259_device, read, write, 0x00ff)
68   AM_RANGE(0x00c4, 0x00c7) AM_DEVREADWRITE8("pic_0", pic8259_device, read, write, 0x00ff)
69   AM_RANGE(0x00c8, 0x00cf) AM_DEVREADWRITE8("ppi", i8255_device, read, write, 0x00ff)
70   AM_RANGE(0x00d0, 0x00d7) AM_DEVREADWRITE8("pit", pit8253_device, read, write, 0x00ff)
71   AM_RANGE(0x00d8, 0x00d9) AM_DEVREADWRITE8("uart8251", i8251_device, data_r, data_w, 0x00ff)
72   AM_RANGE(0x00da, 0x00db) AM_DEVREADWRITE8("uart8251", i8251_device, status_r, control_w, 0x00ff)
73   AM_RANGE(0x00dc, 0x00dd) AM_DEVREADWRITE8("uart8251", i8251_device, data_r, data_w, 0x00ff)
74   AM_RANGE(0x00de, 0x00df) AM_DEVREADWRITE8("uart8251", i8251_device, status_r, control_w, 0x00ff)
7375ADDRESS_MAP_END
7476
77static ADDRESS_MAP_START(isbc286_io, AS_IO, 16, isbc_state)
78   ADDRESS_MAP_UNMAP_HIGH
79   AM_RANGE(0x00c0, 0x00c3) AM_DEVREADWRITE8("pic_0", pic8259_device, read, write, 0x00ff)
80   AM_RANGE(0x00c4, 0x00c7) AM_DEVREADWRITE8("pic_1", pic8259_device, read, write, 0x00ff)
81   AM_RANGE(0x00c8, 0x00cf) AM_DEVREADWRITE8("ppi", i8255_device, read, write, 0x00ff)
82   AM_RANGE(0x00d0, 0x00d7) AM_DEVREADWRITE8("pit", pit8254_device, read, write, 0x00ff)
83   AM_RANGE(0x00d8, 0x00df) AM_DEVREADWRITE8("uart8274", i8274_device, cd_ba_r, cd_ba_w, 0x00ff)
84ADDRESS_MAP_END
85
7586static ADDRESS_MAP_START(isbc286_mem, AS_PROGRAM, 16, isbc_state)
7687   ADDRESS_MAP_UNMAP_HIGH
7788   AM_RANGE(0x00000, 0xdffff) AM_RAM
r26081r26082
7990   AM_RANGE(0xfe0000, 0xffffff) AM_ROM AM_REGION("user1",0)
8091ADDRESS_MAP_END
8192
82static ADDRESS_MAP_START(isbc286_io, AS_IO, 16, isbc_state)
83   ADDRESS_MAP_UNMAP_HIGH
84ADDRESS_MAP_END
85
8693static ADDRESS_MAP_START(isbc2861_mem, AS_PROGRAM, 16, isbc_state)
8794   ADDRESS_MAP_UNMAP_HIGH
88   AM_RANGE(0x00000, 0xeffff) AM_RAM
95   AM_RANGE(0x00000, 0xdffff) AM_RAM
8996   AM_RANGE(0xf0000, 0xfffff) AM_ROM AM_REGION("user1",0)
9097   AM_RANGE(0xff0000, 0xffffff) AM_ROM AM_REGION("user1",0)
9198ADDRESS_MAP_END
9299
93static ADDRESS_MAP_START(isbc2861_io, AS_IO, 16, isbc_state)
94   ADDRESS_MAP_UNMAP_HIGH
95ADDRESS_MAP_END
96
97100/* Input ports */
98101static INPUT_PORTS_START( isbc )
99102INPUT_PORTS_END
100103
104static DEVICE_INPUT_DEFAULTS_START( isbc86_terminal )
105   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x01 ) // 300
106   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x20 ) // 8N2
107DEVICE_INPUT_DEFAULTS_END
101108
102void isbc_state::machine_reset()
109static DEVICE_INPUT_DEFAULTS_START( isbc286_terminal )
110   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x0f, 0x06 ) // 9600
111   DEVICE_INPUT_DEFAULTS( "TERM_FRAME", 0x30, 0x00 ) // 8N1
112DEVICE_INPUT_DEFAULTS_END
113
114static const serial_terminal_interface terminal_intf =
103115{
104   m_term_data = 0;
116   DEVCB_NULL
117};
118
119static const struct pit8253_interface isbc86_pit_config =
120{
121   {
122      {
123         XTAL_22_1184MHz/18,
124         DEVCB_NULL,
125         DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir0_w)
126      }, {
127         XTAL_22_1184MHz/18,
128         DEVCB_NULL,
129         DEVCB_NULL
130      }, {
131         XTAL_22_1184MHz/18,
132         DEVCB_NULL,
133         DEVCB_DRIVER_LINE_MEMBER(isbc_state, isbc86_tmr2_w)
134      }
135   }
136};
137
138WRITE_LINE_MEMBER( isbc_state::isbc86_tmr2_w )
139{
140   m_uart8251->rxc_w(state);
141   m_uart8251->txc_w(state);
105142}
106143
107WRITE8_MEMBER( isbc_state::kbd_put )
144static const struct pit8253_interface isbc286_pit_config =
108145{
109   m_term_data = data;
146   {
147      {
148         XTAL_22_1184MHz/18,
149         DEVCB_NULL,
150         DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir0_w)
151      }, {
152         XTAL_22_1184MHz/18,
153         DEVCB_NULL,
154         DEVCB_DEVICE_LINE_MEMBER("uart8274", z80dart_device, rxtxcb_w)
155      }, {
156         XTAL_22_1184MHz/18,
157         DEVCB_NULL,
158         DEVCB_DRIVER_LINE_MEMBER(isbc_state, isbc286_tmr2_w)
159      }
160   }
161};
162
163WRITE_LINE_MEMBER( isbc_state::isbc286_tmr2_w )
164{
165   m_uart8274->rxca_w(state);
166   m_uart8274->txca_w(state);
110167}
111168
112static GENERIC_TERMINAL_INTERFACE( terminal_intf )
169static const i8255_interface isbc_ppi_interface =
113170{
114   DEVCB_DRIVER_MEMBER(isbc_state, kbd_put)
171   DEVCB_NULL,
172   DEVCB_NULL,
173   DEVCB_NULL,
174   DEVCB_NULL,
175   DEVCB_NULL,
176   DEVCB_NULL
115177};
116178
179static I8274_INTERFACE(isbc_uart8274_interface)
180{
181   0, 0, 0, 0,
182
183   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
184   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
185   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w),
186   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
187   DEVCB_NULL,
188   DEVCB_NULL,
189
190   DEVCB_DEVICE_LINE_MEMBER("terminal", serial_terminal_device, tx_r),
191   DEVCB_DEVICE_LINE_MEMBER("terminal", serial_terminal_device, rx_w),
192   DEVCB_NULL,
193   DEVCB_NULL,
194   DEVCB_NULL,
195   DEVCB_NULL,
196
197   DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir6_w)
198};
199
200static const i8251_interface isbc_uart8251_interface =
201{
202   DEVCB_DEVICE_LINE_MEMBER("terminal", serial_terminal_device, tx_r),
203   DEVCB_DEVICE_LINE_MEMBER("terminal", serial_terminal_device, rx_w),
204   DEVCB_NULL,
205   DEVCB_NULL,
206   DEVCB_NULL,
207   DEVCB_DEVICE_LINE_MEMBER("pic_0", pic8259_device, ir6_w),
208   DEVCB_NULL,
209   DEVCB_NULL,
210   DEVCB_NULL
211};
212
213static const rs232_port_interface rs232_intf =
214{
215   DEVCB_NULL,
216   DEVCB_DEVICE_LINE_MEMBER("uart8274", z80dart_device, dcda_w),
217   DEVCB_NULL,
218   DEVCB_NULL,
219   DEVCB_DEVICE_LINE_MEMBER("uart8274", z80dart_device, ctsa_w)
220};
221
222READ8_MEMBER( isbc_state::get_slave_ack )
223{
224   if (offset == 7)
225      return m_pic_1->inta_r();
226
227   return 0x00;
228}
229
117230static MACHINE_CONFIG_START( isbc86, isbc_state )
118231   /* basic machine hardware */
119   MCFG_CPU_ADD("maincpu", I8086, XTAL_9_8304MHz)
232   MCFG_CPU_ADD("maincpu", I8086, XTAL_5MHz)
120233   MCFG_CPU_PROGRAM_MAP(isbc86_mem)
121   MCFG_CPU_IO_MAP(isbc86_io)
234   MCFG_CPU_IO_MAP(isbc_io)
235   MCFG_PIC8259_ADD("pic_0", INPUTLINE(":maincpu", 0), VCC, NULL)
236   MCFG_PIT8253_ADD("pit", isbc86_pit_config)
237   MCFG_I8255A_ADD("ppi", isbc_ppi_interface)
238   MCFG_I8251_ADD("uart8251", isbc_uart8251_interface)
122239
123240   /* video hardware */
124   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
241   MCFG_SERIAL_TERMINAL_ADD("terminal", terminal_intf, 300)
242   MCFG_DEVICE_INPUT_DEFAULTS(isbc86_terminal)
125243MACHINE_CONFIG_END
126244
127245static MACHINE_CONFIG_START( rpc86, isbc_state )
128246   /* basic machine hardware */
129   MCFG_CPU_ADD("maincpu", I8086, XTAL_9_8304MHz)
247   MCFG_CPU_ADD("maincpu", I8086, XTAL_5MHz)
130248   MCFG_CPU_PROGRAM_MAP(rpc86_mem)
131249   MCFG_CPU_IO_MAP(rpc86_io)
132250
133251   /* video hardware */
134   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
252   MCFG_SERIAL_TERMINAL_ADD("terminal", terminal_intf, 300)
135253MACHINE_CONFIG_END
136254
137255static MACHINE_CONFIG_START( isbc286, isbc_state )
138256   /* basic machine hardware */
139   MCFG_CPU_ADD("maincpu", I80286, XTAL_9_8304MHz)
257   MCFG_CPU_ADD("maincpu", I80286, XTAL_8MHz)
140258   MCFG_CPU_PROGRAM_MAP(isbc286_mem)
141259   MCFG_CPU_IO_MAP(isbc286_io)
260   MCFG_PIC8259_ADD("pic_0", INPUTLINE(":maincpu", 0), VCC, READ8(isbc_state, get_slave_ack))
261   MCFG_PIC8259_ADD("pic_1", DEVWRITELINE("pic_0", pic8259_device, ir7_w), GND, NULL)
262   MCFG_PIT8254_ADD("pit", isbc286_pit_config)
263   MCFG_I8255A_ADD("ppi", isbc_ppi_interface)
264   MCFG_I8274_ADD("uart8274", XTAL_16MHz/4, isbc_uart8274_interface)
265   MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, NULL)
142266
143267   /* video hardware */
144   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
268   MCFG_SERIAL_TERMINAL_ADD("terminal", terminal_intf, 9600)
269   MCFG_DEVICE_INPUT_DEFAULTS(isbc286_terminal)
145270MACHINE_CONFIG_END
146271
147static MACHINE_CONFIG_START( isbc2861, isbc_state )
148   /* basic machine hardware */
149   MCFG_CPU_ADD("maincpu", I80286, XTAL_9_8304MHz)
272static MACHINE_CONFIG_DERIVED( isbc2861, isbc286 )
273   MCFG_CPU_MODIFY("maincpu")
150274   MCFG_CPU_PROGRAM_MAP(isbc2861_mem)
151   MCFG_CPU_IO_MAP(isbc2861_io)
152
153   /* video hardware */
154   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, terminal_intf)
155275MACHINE_CONFIG_END
156276
157277/* ROM definition */
r26081r26082
191311
192312/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT COMPANY   FULLNAME       FLAGS */
193313COMP( 19??, rpc86,    0,       0,    rpc86,      isbc, driver_device,    0,   "Intel",   "RPC 86",GAME_NOT_WORKING | GAME_NO_SOUND)
194COMP( 19??, isbc86,   0,       0,    isbc86,     isbc, driver_device,    0,   "Intel",   "iSBC 86/12A",GAME_NOT_WORKING | GAME_NO_SOUND)
314COMP( 1978, isbc86,   0,       0,    isbc86,     isbc, driver_device,    0,   "Intel",   "iSBC 86/12A",GAME_NOT_WORKING | GAME_NO_SOUND)
195315COMP( 19??, isbc286,  0,       0,    isbc286,    isbc, driver_device,    0,   "Intel",   "iSBC 286",GAME_NOT_WORKING | GAME_NO_SOUND)
196COMP( 19??, isbc2861, 0,       0,    isbc2861,   isbc, driver_device,    0,   "Intel",   "iSBC 286-10",GAME_NOT_WORKING | GAME_NO_SOUND)
316COMP( 1985, isbc2861, 0,       0,    isbc2861,    isbc, driver_device,    0,   "Intel",   "iSBC 286-10",GAME_NOT_WORKING | GAME_NO_SOUND)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team