Previous 199869 Revisions Next

r24770 Tuesday 6th August, 2013 at 12:26:54 UTC by Dirk Best
apricot.c: connect rs232 and centronics interfaces
[src/mess/drivers]apricot.c

trunk/src/mess/drivers/apricot.c
r24769r24770
99
1010#include "emu.h"
1111#include "cpu/i86/i86.h"
12#include "machine/ram.h"
1213#include "machine/pit8253.h"
1314#include "machine/i8255.h"
1415#include "machine/pic8259.h"
1516#include "machine/z80dart.h"
17#include "machine/serial.h"
18#include "machine/ctronics.h"
1619#include "machine/wd17xx.h"
20#include "video/mc6845.h"
1721#include "sound/sn76496.h"
18#include "video/mc6845.h"
19#include "machine/ram.h"
2022#include "imagedev/flopdrv.h"
2123#include "formats/apridisk.h"
2224
r24769r24770
3739   m_ppi(*this, "ic17"),
3840   m_pic(*this, "ic31"),
3941   m_pit(*this, "ic16"),
40   m_z80sio(*this, "ic15"),
42   m_sio(*this, "ic15"),
43   m_rs232(*this, "rs232"),
44   m_centronics(*this, "centronics"),
4145   m_fdc(*this, "ic68"),
4246   m_screen_buffer(*this, "screen_buffer"),
47   m_data_selector_dtr(1),
48   m_data_selector_rts(1),
4349   m_video_mode(0),
4450   m_display_on(1),
4551   m_display_enabled(0)
r24769r24770
5258   required_device<i8255_device> m_ppi;
5359   required_device<pic8259_device> m_pic;
5460   required_device<pit8253_device> m_pit;
55   required_device<z80sio0_device> m_z80sio;
61   required_device<z80sio0_device> m_sio;
62   required_device<rs232_port_device> m_rs232;
63   required_device<centronics_device> m_centronics;
5664   required_device<wd2793_device> m_fdc;
5765
5866   required_shared_ptr<UINT16> m_screen_buffer;
5967
60   DECLARE_READ8_MEMBER(apricot_sysctrl_r);
61   DECLARE_WRITE8_MEMBER(apricot_sysctrl_w);
62   DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out1);
63   DECLARE_WRITE_LINE_MEMBER(apricot_pit8253_out2);
64   DECLARE_WRITE_LINE_MEMBER(apricot_wd2793_intrq_w);
65   DECLARE_WRITE_LINE_MEMBER(apricot_wd2793_drq_w);
66   DECLARE_WRITE_LINE_MEMBER(apricot_mc6845_de) { m_display_enabled = state; };
68   DECLARE_READ8_MEMBER( apricot_sysctrl_r );
69   DECLARE_WRITE8_MEMBER( apricot_sysctrl_w );
70   DECLARE_WRITE_LINE_MEMBER( timer_out1 );
71   DECLARE_WRITE_LINE_MEMBER( timer_out2 );
72   DECLARE_WRITE_LINE_MEMBER( apricot_wd2793_intrq_w );
73   DECLARE_WRITE_LINE_MEMBER( apricot_wd2793_drq_w );
74   DECLARE_WRITE_LINE_MEMBER( apricot_mc6845_de ) { m_display_enabled = state; };
6775
76   DECLARE_WRITE_LINE_MEMBER( data_selector_dtr_w ) { m_data_selector_dtr = state; };
77   DECLARE_WRITE_LINE_MEMBER( data_selector_rts_w ) { m_data_selector_rts = state; };
78
6879   virtual void machine_start();
6980
7081   IRQ_CALLBACK_MEMBER( irq_callback ) { return m_pic->inta_r(); }
7182
83   int m_data_selector_dtr;
84   int m_data_selector_rts;
85
7286   bool m_video_mode;
7387   bool m_display_on;
7488
r24769r24770
104118
105119static const i8255_interface apricot_i8255a_intf =
106120{
121   DEVCB_DEVICE_MEMBER("centronics", centronics_device, read),
122   DEVCB_DEVICE_MEMBER("centronics", centronics_device, write),
107123   DEVCB_NULL,
108   DEVCB_NULL,
109   DEVCB_NULL,
110124   DEVCB_DRIVER_MEMBER(apricot_state, apricot_sysctrl_w),
111125   DEVCB_DRIVER_MEMBER(apricot_state, apricot_sysctrl_r),
112126   DEVCB_NULL
113127};
114128
115WRITE_LINE_MEMBER( apricot_state::apricot_pit8253_out1 )
129WRITE_LINE_MEMBER( apricot_state::timer_out1 )
116130{
117   /* connected to the rs232c interface */
131   // receive clock via timer 1
132   if (m_data_selector_rts == 0 && m_data_selector_dtr == 0)
133      m_sio->rxca_w(state);
118134}
119135
120WRITE_LINE_MEMBER( apricot_state::apricot_pit8253_out2 )
136WRITE_LINE_MEMBER( apricot_state::timer_out2 )
121137{
122   /* connected to the rs232c interface */
138   // transmit clock via timer 2
139   if (m_data_selector_rts == 0 && m_data_selector_dtr == 0)
140      m_sio->txca_w(state);
141
142   // transmit and receive clock via timer 2
143   if (m_data_selector_rts == 1 && m_data_selector_dtr == 0)
144   {
145      m_sio->txca_w(state);
146      m_sio->rxca_w(state);
147   }
123148}
124149
125150static const struct pit8253_interface apricot_pit8253_intf =
126151{
127152   {
128      { XTAL_4MHz / 16,      DEVCB_LINE_VCC, DEVCB_DEVICE_LINE_MEMBER("ic31", pic8259_device, ir6_w) },
129      { 0 /*XTAL_4MHz / 2*/, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(apricot_state, apricot_pit8253_out1) },
130      { 0 /*XTAL_4MHz / 2*/, DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(apricot_state, apricot_pit8253_out2) }
153      { XTAL_4MHz / 16, DEVCB_LINE_VCC, DEVCB_DEVICE_LINE_MEMBER("ic31", pic8259_device, ir6_w) },
154      { XTAL_4MHz / 2,  DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(apricot_state, timer_out1) },
155      { XTAL_4MHz / 2,  DEVCB_LINE_VCC, DEVCB_DRIVER_LINE_MEMBER(apricot_state, timer_out2) }
131156   }
132157};
133158
r24769r24770
137162   XTAL_4MHz / 16, XTAL_4MHz / 16,
138163
139164   // channel a
165   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, rx),
166   DEVCB_DEVICE_LINE_MEMBER("rs232", serial_port_device, tx),
167   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, dtr_w),
168   DEVCB_DEVICE_LINE_MEMBER("rs232", rs232_port_device, rts_w),
169   DEVCB_NULL, //  wait/ready: i8089 data request channel 2
140170   DEVCB_NULL,
141   DEVCB_NULL,
142   DEVCB_NULL,
143   DEVCB_NULL,
144   DEVCB_NULL,
145   DEVCB_NULL,
146171
147172   // channel b
148173   DEVCB_NULL,
149174   DEVCB_NULL,
175   DEVCB_DRIVER_LINE_MEMBER(apricot_state, data_selector_dtr_w),
176   DEVCB_DRIVER_LINE_MEMBER(apricot_state, data_selector_rts_w),
150177   DEVCB_NULL,
151178   DEVCB_NULL,
152   DEVCB_NULL,
153   DEVCB_NULL,
154179
155180   DEVCB_DEVICE_LINE_MEMBER("ic31", pic8259_device, ir5_w),
156181   DEVCB_NULL,
r24769r24770
159184   DEVCB_NULL
160185};
161186
187// note: missing a receive clock callback to support external clock mode
188// (m_data_selector_rts == 1 and m_data_selector_dtr == 0)
189static const rs232_port_interface rs232_intf =
190{
191   DEVCB_NULL,
192   DEVCB_DEVICE_LINE_MEMBER("ic15", z80dart_device, dcda_w),
193   DEVCB_DEVICE_LINE_MEMBER("ic15", z80dart_device, synca_w),
194   DEVCB_NULL,
195   DEVCB_DEVICE_LINE_MEMBER("ic15", z80dart_device, ctsa_w)
196};
162197
198// note: fault output should be connected to syncb input of the sio
199static const centronics_interface apricot_centronics_intf =
200{
201   DEVCB_DEVICE_LINE_MEMBER("ic15", z80dart_device, ctsb_w),
202   DEVCB_DEVICE_LINE_MEMBER("ic15", z80dart_device, dcdb_w),
203   DEVCB_NULL
204};
205
206
163207/***************************************************************************
164208    FLOPPY
165209***************************************************************************/
r24769r24770
183227   { FLOPPY_0, FLOPPY_1, NULL, NULL }
184228};
185229
230static LEGACY_FLOPPY_OPTIONS_START( apricot )
231   LEGACY_FLOPPY_OPTION
232   (
233      apridisk, "dsk", "ACT Apricot disk image", apridisk_identify, apridisk_construct, NULL,
234      HEADS(1-[2])
235      TRACKS(70/[80])
236      SECTORS([9]/18)
237      SECTOR_LENGTH([512])
238      FIRST_SECTOR_ID([1])
239   )
240LEGACY_FLOPPY_OPTIONS_END
186241
242static const floppy_interface apricot_floppy_interface =
243{
244   DEVCB_NULL,
245   DEVCB_NULL,
246   DEVCB_NULL,
247   DEVCB_NULL,
248   DEVCB_NULL,
249   FLOPPY_STANDARD_3_5_DSDD,
250   LEGACY_FLOPPY_OPTIONS_NAME(apricot),
251   "floppy_3_5",
252   NULL
253};
254
255
187256/***************************************************************************
188257    VIDEO EMULATION
189258***************************************************************************/
r24769r24770
191260UINT32 apricot_state::screen_update_apricot(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
192261{
193262   if (!m_display_on)
194      m_crtc->screen_update( screen, bitmap, cliprect);
263      m_crtc->screen_update(screen, bitmap, cliprect);
195264   else
196265      bitmap.fill(RGB_BLACK, cliprect);
197266
r24769r24770
286355
287356
288357/***************************************************************************
289    INPUT PORTS
358    MACHINE DRIVERS
290359***************************************************************************/
291360
292static INPUT_PORTS_START( apricot )
293INPUT_PORTS_END
294
295
296/***************************************************************************
297    SOUND INTERFACE
298 **************************************************************************/
299
300
301//-------------------------------------------------
302//  sn76496_config psg_intf
303//-------------------------------------------------
304
305361static const sn76496_config psg_intf =
306362{
307363   DEVCB_NULL
308364};
309365
310
311/***************************************************************************
312    MACHINE DRIVERS
313***************************************************************************/
314
315static LEGACY_FLOPPY_OPTIONS_START( apricot )
316   LEGACY_FLOPPY_OPTION
317   (
318      apridisk, "dsk", "ACT Apricot disk image", apridisk_identify, apridisk_construct, NULL,
319      HEADS(1-[2])
320      TRACKS(70/[80])
321      SECTORS([9]/18)
322      SECTOR_LENGTH([512])
323      FIRST_SECTOR_ID([1])
324   )
325LEGACY_FLOPPY_OPTIONS_END
326
327static const floppy_interface apricot_floppy_interface =
328{
329   DEVCB_NULL,
330   DEVCB_NULL,
331   DEVCB_NULL,
332   DEVCB_NULL,
333   DEVCB_NULL,
334   FLOPPY_STANDARD_3_5_DSDD,
335   LEGACY_FLOPPY_OPTIONS_NAME(apricot),
336   "floppy_3_5",
337   NULL
338};
339
340366static MACHINE_CONFIG_START( apricot, apricot_state )
341
342   /* basic machine hardware */
343367   MCFG_CPU_ADD("maincpu", I8086, XTAL_15MHz / 3)
344368   MCFG_CPU_PROGRAM_MAP(apricot_mem)
345369   MCFG_CPU_IO_MAP(apricot_io)
346370
347371//  MCFG_CPU_ADD("ic71", I8089, XTAL_15MHz / 3)
348372
349   /* video hardware */
373   // video hardware
350374   MCFG_SCREEN_ADD("screen", RASTER)
351375   MCFG_SCREEN_SIZE(800, 400)
352376   MCFG_SCREEN_VISIBLE_AREA(0, 800-1, 0, 400-1)
353377   MCFG_SCREEN_REFRESH_RATE(72)
354378   MCFG_SCREEN_UPDATE_DRIVER(apricot_state, screen_update_apricot)
355379
356   /* sound hardware */
380   // sound hardware
357381   MCFG_SPEAKER_STANDARD_MONO("mono")
358382   MCFG_SOUND_ADD("ic7", SN76489, XTAL_4MHz / 2)
359383   MCFG_SOUND_CONFIG(psg_intf)
360384   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
361385
362   /* internal ram */
386   // internal ram
363387   MCFG_RAM_ADD(RAM_TAG)
364388   MCFG_RAM_DEFAULT_SIZE("256k")
365389   MCFG_RAM_EXTRA_OPTIONS("384k,512k") /* with 1 or 2 128k expansion boards */
366390
367   /* Devices */
391   // devices
368392   MCFG_MC6845_ADD("ic30", MC6845, "screen", XTAL_15MHz / 10, apricot_mc6845_intf)
369393   MCFG_I8255A_ADD("ic17", apricot_i8255a_intf)
370394   MCFG_PIC8259_ADD("ic31", INPUTLINE("maincpu", 0), VCC, NULL)
371395   MCFG_PIT8253_ADD("ic16", apricot_pit8253_intf)
372396   MCFG_Z80SIO0_ADD("ic15", XTAL_15MHz / 6, apricot_z80sio_intf)
373397
374   /* floppy */
398   // rs232 port
399   MCFG_RS232_PORT_ADD("rs232", rs232_intf, default_rs232_devices, NULL)
400
401   // centronics printer
402   MCFG_CENTRONICS_PRINTER_ADD("centronics", apricot_centronics_intf)
403
404   // floppy
375405   MCFG_WD2793_ADD("ic68", apricot_wd17xx_intf)
376406   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(apricot_floppy_interface)
377407MACHINE_CONFIG_END
r24769r24770
401431    GAME DRIVERS
402432***************************************************************************/
403433
404/*    YEAR  NAME       PARENT   COMPAT  MACHINE    INPUT    CLASS          INIT  COMPANY  FULLNAME      FLAGS */
405COMP( 1983, apricot,   0,       0,      apricot,   apricot, driver_device, 0,    "ACT",   "Apricot PC", GAME_NOT_WORKING )
406COMP( 1984, apricotxi, apricot, 0,      apricotxi, apricot, driver_device, 0,    "ACT",   "Apricot Xi", GAME_NOT_WORKING )
434/*    YEAR  NAME       PARENT   COMPAT  MACHINE    INPUT  CLASS          INIT  COMPANY  FULLNAME      FLAGS */
435COMP( 1983, apricot,   0,       0,      apricot,   0,     driver_device, 0,    "ACT",   "Apricot PC", GAME_NOT_WORKING )
436COMP( 1984, apricotxi, apricot, 0,      apricotxi, 0,     driver_device, 0,    "ACT",   "Apricot Xi", GAME_NOT_WORKING )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team