Previous 199869 Revisions Next

r19193 Wednesday 28th November, 2012 at 15:57:06 UTC by Curt Coder
(MESS) xor100: Floppy modernization. (nw)
[src/mess/drivers]xor100.c
[src/mess/includes]xor100.h

trunk/src/mess/drivers/xor100.c
r19192r19193
202202
203203    */
204204
205   /* drive select */
206   if (BIT(data, 0)) wd17xx_set_drive(m_fdc, 0);
207   if (BIT(data, 1)) wd17xx_set_drive(m_fdc, 1);
205   // drive select
206   floppy_image_device *floppy = NULL;
208207
209   floppy_mon_w(m_floppy0, CLEAR_LINE);
210   floppy_mon_w(m_floppy1, CLEAR_LINE);
211   floppy_drive_set_ready_state(m_floppy0, 1, 1);
212   floppy_drive_set_ready_state(m_floppy1, 1, 1);
208   if (BIT(data, 0)) floppy = m_floppy0->get_device();
209   if (BIT(data, 1)) floppy = m_floppy1->get_device();
210   if (BIT(data, 2)) floppy = m_floppy2->get_device();
211   if (BIT(data, 3)) floppy = m_floppy3->get_device();
212
213   m_fdc->set_floppy(floppy);
214
215   if (floppy) floppy->mon_w(0);
213216}
214217
215218WRITE8_MEMBER( xor100_state::fdc_dsel_w )
r19192r19193
237240   case 3: m_fdc_dden = !m_fdc_dden; break;
238241   }
239242
240   wd17xx_dden_w(m_fdc, m_fdc_dden);
243   m_fdc->dden_w(m_fdc_dden);
241244}
242245
243246/* Memory Maps */
r19192r19193
260263   AM_RANGE(0x0a, 0x0a) AM_READ(prom_disable_r)
261264   AM_RANGE(0x0b, 0x0b) AM_READ_PORT("DSW0") AM_WRITE(baud_w)
262265   AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write)
263   AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE_LEGACY(WD1795_TAG, wd17xx_r, wd17xx_w)
266   AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE(WD1795_TAG, fd1795_t, read, write)
264267   AM_RANGE(0xfc, 0xfc) AM_READWRITE(fdc_wait_r, fdc_dcont_w)
265268   AM_RANGE(0xfd, 0xfd) AM_WRITE(fdc_dsel_w)
266269ADDRESS_MAP_END
r19192r19193
348351
349352/* COM5016 Interface */
350353
351WRITE_LINE_MEMBER(xor100_state::com5016_fr_w)
354WRITE_LINE_MEMBER( xor100_state::com5016_fr_w )
352355{
353   device_t *device = machine().device(I8251_A_TAG);
354   i8251_device* uart = dynamic_cast<i8251_device*>(device);
355   uart->transmit_clock();
356   uart->receive_clock();
356   m_uart_a->transmit_clock();
357   m_uart_a->receive_clock();
357358}
358359
359WRITE_LINE_MEMBER(xor100_state::com5016_ft_w)
360WRITE_LINE_MEMBER( xor100_state::com5016_ft_w )
360361{
361   device_t *device = machine().device(I8251_B_TAG);
362   i8251_device* uart = dynamic_cast<i8251_device*>(device);
363   uart->transmit_clock();
364   uart->receive_clock();
362   m_uart_b->transmit_clock();
363   m_uart_b->receive_clock();
365364}
366365
367366static COM8116_INTERFACE( com5016_intf )
368367{
369368   DEVCB_NULL,               /* fX/4 output */
370   DEVCB_DRIVER_LINE_MEMBER(xor100_state,com5016_fr_w),   /* fR output */
371   DEVCB_DRIVER_LINE_MEMBER(xor100_state,com5016_ft_w),   /* fT output */
369   DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_fr_w),   /* fR output */
370   DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_ft_w),   /* fT output */
372371   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },   // WRONG?
373372   { 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 },   // WRONG?
374373};
r19192r19193
407406
408407READ8_MEMBER(xor100_state::i8255_pc_r)
409408{
410   centronics_device *centronics = machine().device<centronics_device>("centronics");
411409   /*
412410
413411        bit     description
r19192r19193
426424   UINT8 data = 0;
427425
428426   /* on line */
429   data |= centronics->vcc_r() << 4;
427   data |= m_centronics->vcc_r() << 4;
430428
431429   /* busy */
432   data |= centronics->busy_r() << 5;
430   data |= m_centronics->busy_r() << 5;
433431
434432   return data;
435433}
r19192r19193
440438   DEVCB_DEVICE_MEMBER(CENTRONICS_TAG, centronics_device, write),
441439   DEVCB_NULL,
442440   DEVCB_DEVICE_LINE_MEMBER(CENTRONICS_TAG, centronics_device, strobe_w),
443   DEVCB_DRIVER_MEMBER(xor100_state,i8255_pc_r),
441   DEVCB_DRIVER_MEMBER(xor100_state, i8255_pc_r),
444442   DEVCB_NULL
445443};
446444
r19192r19193
453451
454452/* Z80-CTC Interface */
455453
456WRITE_LINE_MEMBER(xor100_state::ctc_z0_w)
454WRITE_LINE_MEMBER( xor100_state::ctc_z0_w )
457455{
458456}
459457
460WRITE_LINE_MEMBER(xor100_state::ctc_z1_w)
458WRITE_LINE_MEMBER( xor100_state::ctc_z1_w )
461459{
462460}
463461
464WRITE_LINE_MEMBER(xor100_state::ctc_z2_w)
462WRITE_LINE_MEMBER( xor100_state::ctc_z2_w )
465463{
466464}
467465
468466static Z80CTC_INTERFACE( ctc_intf )
469467{
470468   DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0),   /* interrupt handler */
471   DEVCB_DRIVER_LINE_MEMBER(xor100_state,ctc_z0_w),         /* ZC/TO0 callback */
472   DEVCB_DRIVER_LINE_MEMBER(xor100_state,ctc_z1_w),         /* ZC/TO1 callback */
473   DEVCB_DRIVER_LINE_MEMBER(xor100_state,ctc_z2_w)       /* ZC/TO2 callback */
469   DEVCB_DRIVER_LINE_MEMBER(xor100_state, ctc_z0_w),         /* ZC/TO0 callback */
470   DEVCB_DRIVER_LINE_MEMBER(xor100_state, ctc_z1_w),         /* ZC/TO1 callback */
471   DEVCB_DRIVER_LINE_MEMBER(xor100_state, ctc_z2_w)       /* ZC/TO2 callback */
474472};
475473
476474/* WD1795-02 Interface */
477475
478WRITE_LINE_MEMBER( xor100_state::fdc_irq_w )
476static SLOT_INTERFACE_START( xor100_floppies )
477   SLOT_INTERFACE( "8ssdd", FLOPPY_8_SSDD ) // Shugart SA-100
478SLOT_INTERFACE_END
479
480void xor100_state::fdc_intrq_w(bool state)
479481{
480482   m_fdc_irq = state;
481483   m_ctc->trg0(state);
r19192r19193
487489   }
488490}
489491
490WRITE_LINE_MEMBER( xor100_state::fdc_drq_w )
492void xor100_state::fdc_drq_w(bool state)
491493{
492494   m_fdc_drq = state;
493495
r19192r19193
498500   }
499501}
500502
501static const wd17xx_interface fdc_intf =
502{
503   DEVCB_NULL,
504   DEVCB_DRIVER_LINE_MEMBER(xor100_state, fdc_irq_w),
505   DEVCB_DRIVER_LINE_MEMBER(xor100_state, fdc_drq_w),
506   { FLOPPY_0, FLOPPY_1, NULL, NULL }
507};
508
509503/* Terminal Interface */
510504
511WRITE8_MEMBER(xor100_state::xor100_kbd_put)
505WRITE8_MEMBER( xor100_state::xor100_kbd_put )
512506{
513   i8251_device* uart = dynamic_cast<i8251_device*>(machine().device(I8251_B_TAG));
514   uart->receive_character(data);
507   m_uart_b->receive_character(data);
515508}
516509
517510static GENERIC_TERMINAL_INTERFACE( xor100_terminal_intf )
518511{
519   DEVCB_DRIVER_MEMBER(xor100_state,xor100_kbd_put)
512   DEVCB_DRIVER_MEMBER(xor100_state, xor100_kbd_put)
520513};
521514
515static S100_INTERFACE( s100_intf )
516{
517   DEVCB_NULL,
518   DEVCB_NULL,
519   DEVCB_NULL,
520   DEVCB_NULL,
521   DEVCB_NULL,
522   DEVCB_NULL,
523   DEVCB_NULL,
524   DEVCB_NULL,
525   DEVCB_NULL,
526   DEVCB_NULL,
527   DEVCB_NULL,
528   DEVCB_NULL,
529   DEVCB_NULL,
530   DEVCB_NULL,
531   DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
532   DEVCB_NULL,
533   DEVCB_NULL,
534   DEVCB_NULL,
535};
536
537static SLOT_INTERFACE_START( xor100_s100_cards )
538SLOT_INTERFACE_END
539
522540/* Machine Initialization */
523541
524542void xor100_state::machine_start()
r19192r19193
551569
552570/* Machine Driver */
553571
554static const floppy_interface xor100_floppy_interface =
555{
556   DEVCB_NULL,
557   DEVCB_NULL,
558   DEVCB_NULL,
559   DEVCB_NULL,
560   DEVCB_NULL,
561   FLOPPY_STANDARD_5_25_DSDD,
562   LEGACY_FLOPPY_OPTIONS_NAME(default),
563   NULL,
564   NULL
565};
566
567572static MACHINE_CONFIG_START( xor100, xor100_state )
568573   /* basic machine hardware */
569574   MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_8MHz/2)
r19192r19193
576581   MCFG_I8255A_ADD(I8255A_TAG, printer_8255_intf)
577582   MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf)
578583   MCFG_COM8116_ADD(COM5016_TAG, 5000000, com5016_intf)
579   MCFG_FD1795_ADD(WD1795_TAG, /*XTAL_8MHz/8,*/ fdc_intf)
580   MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(xor100_floppy_interface)
584   MCFG_FD1795x_ADD(WD1795_TAG, XTAL_8MHz/8 *8)
585   MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":0", xor100_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
586   MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":1", xor100_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
587   MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":2", xor100_floppies, NULL,    NULL, floppy_image_device::default_floppy_formats)
588   MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":3", xor100_floppies, NULL,    NULL, floppy_image_device::default_floppy_formats)
589
581590   MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, xor100_centronics_intf)
582591   MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, xor100_terminal_intf)
583592
593   // S-100
594   MCFG_S100_BUS_ADD(Z80_TAG, s100_intf)
595   MCFG_S100_SLOT_ADD("s100_1", xor100_s100_cards, NULL, NULL)
596   MCFG_S100_SLOT_ADD("s100_2", xor100_s100_cards, NULL, NULL)
597   MCFG_S100_SLOT_ADD("s100_3", xor100_s100_cards, NULL, NULL)
598   MCFG_S100_SLOT_ADD("s100_4", xor100_s100_cards, NULL, NULL)
599   MCFG_S100_SLOT_ADD("s100_5", xor100_s100_cards, NULL, NULL)
600   MCFG_S100_SLOT_ADD("s100_6", xor100_s100_cards, NULL, NULL)
601   MCFG_S100_SLOT_ADD("s100_7", xor100_s100_cards, NULL, NULL)
602   MCFG_S100_SLOT_ADD("s100_8", xor100_s100_cards, NULL, NULL)
603   MCFG_S100_SLOT_ADD("s100_9", xor100_s100_cards, NULL, NULL)
604   MCFG_S100_SLOT_ADD("s100_10", xor100_s100_cards, NULL, NULL)
605
584606   /* internal ram */
585607   MCFG_RAM_ADD(RAM_TAG)
586608   MCFG_RAM_DEFAULT_SIZE("64K")
trunk/src/mess/includes/xor100.h
r19192r19193
55
66#include "emu.h"
77#include "cpu/z80/z80.h"
8#include "formats/basicdsk.h"
9#include "imagedev/flopdrv.h"
108#include "machine/ram.h"
119#include "machine/com8116.h"
1210#include "machine/ctronics.h"
1311#include "machine/i8255.h"
1412#include "machine/i8251.h"
13#include "machine/s100.h"
1514#include "machine/terminal.h"
16#include "machine/wd17xx.h"
15#include "machine/wd_fdc.h"
1716#include "machine/z80ctc.h"
1817
1918#define SCREEN_TAG      "screen"
r19192r19193
3332      : driver_device(mconfig, type, tag),
3433        m_maincpu(*this, Z80_TAG),
3534        m_dbrg(*this, COM5016_TAG),
35        m_uart_a(*this, I8251_A_TAG),
3636        m_uart_b(*this, I8251_B_TAG),
3737        m_fdc(*this, WD1795_TAG),
3838        m_ctc(*this, Z80CTC_TAG),
3939        m_ram(*this, RAM_TAG),
4040        m_terminal(*this, TERMINAL_TAG),
41        m_floppy0(*this, FLOPPY_0),
42        m_floppy1(*this, FLOPPY_1)
41        m_centronics(*this, CENTRONICS_TAG),
42        m_s100(*this, S100_TAG),
43        m_floppy0(*this, WD1795_TAG":0"),
44        m_floppy1(*this, WD1795_TAG":1"),
45        m_floppy2(*this, WD1795_TAG":2"),
46        m_floppy3(*this, WD1795_TAG":3")
4347   { }
4448
4549   required_device<cpu_device> m_maincpu;
4650   required_device<com8116_device> m_dbrg;
51   required_device<i8251_device> m_uart_a;
4752   required_device<i8251_device> m_uart_b;
48   required_device<fd1795_device> m_fdc;
53   required_device<fd1795_t> m_fdc;
4954   required_device<z80ctc_device> m_ctc;
5055   required_device<ram_device> m_ram;
5156   required_device<generic_terminal_device> m_terminal;
52   required_device<legacy_floppy_image_device> m_floppy0;
53   required_device<legacy_floppy_image_device> m_floppy1;
57   required_device<centronics_device> m_centronics;
58   required_device<s100_device> m_s100;
59   required_device<floppy_connector> m_floppy0;
60   required_device<floppy_connector> m_floppy1;
61   required_device<floppy_connector> m_floppy2;
62   required_device<floppy_connector> m_floppy3;
5463
5564   virtual void machine_start();
5665   virtual void machine_reset();
r19192r19193
6372   DECLARE_READ8_MEMBER( fdc_wait_r );
6473   DECLARE_WRITE8_MEMBER( fdc_dcont_w );
6574   DECLARE_WRITE8_MEMBER( fdc_dsel_w );
66   DECLARE_WRITE_LINE_MEMBER( fdc_irq_w );
67   DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
75   void fdc_intrq_w(bool state);
76   void fdc_drq_w(bool state);
6877
6978   void bankswitch();
7079
r19192r19193
7382   int m_bank;
7483
7584   // floppy state
76   int m_fdc_irq;
77   int m_fdc_drq;
85   bool m_fdc_irq;
86   bool m_fdc_drq;
7887   int m_fdc_dden;
7988   DECLARE_WRITE_LINE_MEMBER(com5016_fr_w);
8089   DECLARE_WRITE_LINE_MEMBER(com5016_ft_w);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team