mirror of
https://github.com/holub/mame
synced 2025-05-20 20:58:51 +03:00
(MESS) xor100: Floppy modernization. (nw)
This commit is contained in:
parent
81ffb6d1e1
commit
52582aac7b
@ -202,14 +202,17 @@ WRITE8_MEMBER( xor100_state::fdc_dcont_w )
|
||||
|
||||
*/
|
||||
|
||||
/* drive select */
|
||||
if (BIT(data, 0)) wd17xx_set_drive(m_fdc, 0);
|
||||
if (BIT(data, 1)) wd17xx_set_drive(m_fdc, 1);
|
||||
// drive select
|
||||
floppy_image_device *floppy = NULL;
|
||||
|
||||
floppy_mon_w(m_floppy0, CLEAR_LINE);
|
||||
floppy_mon_w(m_floppy1, CLEAR_LINE);
|
||||
floppy_drive_set_ready_state(m_floppy0, 1, 1);
|
||||
floppy_drive_set_ready_state(m_floppy1, 1, 1);
|
||||
if (BIT(data, 0)) floppy = m_floppy0->get_device();
|
||||
if (BIT(data, 1)) floppy = m_floppy1->get_device();
|
||||
if (BIT(data, 2)) floppy = m_floppy2->get_device();
|
||||
if (BIT(data, 3)) floppy = m_floppy3->get_device();
|
||||
|
||||
m_fdc->set_floppy(floppy);
|
||||
|
||||
if (floppy) floppy->mon_w(0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( xor100_state::fdc_dsel_w )
|
||||
@ -237,7 +240,7 @@ WRITE8_MEMBER( xor100_state::fdc_dsel_w )
|
||||
case 3: m_fdc_dden = !m_fdc_dden; break;
|
||||
}
|
||||
|
||||
wd17xx_dden_w(m_fdc, m_fdc_dden);
|
||||
m_fdc->dden_w(m_fdc_dden);
|
||||
}
|
||||
|
||||
/* Memory Maps */
|
||||
@ -260,7 +263,7 @@ static ADDRESS_MAP_START( xor100_io, AS_IO, 8, xor100_state )
|
||||
AM_RANGE(0x0a, 0x0a) AM_READ(prom_disable_r)
|
||||
AM_RANGE(0x0b, 0x0b) AM_READ_PORT("DSW0") AM_WRITE(baud_w)
|
||||
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write)
|
||||
AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE_LEGACY(WD1795_TAG, wd17xx_r, wd17xx_w)
|
||||
AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE(WD1795_TAG, fd1795_t, read, write)
|
||||
AM_RANGE(0xfc, 0xfc) AM_READWRITE(fdc_wait_r, fdc_dcont_w)
|
||||
AM_RANGE(0xfd, 0xfd) AM_WRITE(fdc_dsel_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -348,27 +351,23 @@ INPUT_PORTS_END
|
||||
|
||||
/* COM5016 Interface */
|
||||
|
||||
WRITE_LINE_MEMBER(xor100_state::com5016_fr_w)
|
||||
WRITE_LINE_MEMBER( xor100_state::com5016_fr_w )
|
||||
{
|
||||
device_t *device = machine().device(I8251_A_TAG);
|
||||
i8251_device* uart = dynamic_cast<i8251_device*>(device);
|
||||
uart->transmit_clock();
|
||||
uart->receive_clock();
|
||||
m_uart_a->transmit_clock();
|
||||
m_uart_a->receive_clock();
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(xor100_state::com5016_ft_w)
|
||||
WRITE_LINE_MEMBER( xor100_state::com5016_ft_w )
|
||||
{
|
||||
device_t *device = machine().device(I8251_B_TAG);
|
||||
i8251_device* uart = dynamic_cast<i8251_device*>(device);
|
||||
uart->transmit_clock();
|
||||
uart->receive_clock();
|
||||
m_uart_b->transmit_clock();
|
||||
m_uart_b->receive_clock();
|
||||
}
|
||||
|
||||
static COM8116_INTERFACE( com5016_intf )
|
||||
{
|
||||
DEVCB_NULL, /* fX/4 output */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state,com5016_fr_w), /* fR output */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state,com5016_ft_w), /* fT output */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_fr_w), /* fR output */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state, com5016_ft_w), /* fT output */
|
||||
{ 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, // WRONG?
|
||||
{ 101376, 67584, 46080, 37686, 33792, 16896, 8448, 4224, 2816, 2534, 2112, 1408, 1056, 704, 528, 264 }, // WRONG?
|
||||
};
|
||||
@ -407,7 +406,6 @@ static const i8251_interface terminal_8251_intf =
|
||||
|
||||
READ8_MEMBER(xor100_state::i8255_pc_r)
|
||||
{
|
||||
centronics_device *centronics = machine().device<centronics_device>("centronics");
|
||||
/*
|
||||
|
||||
bit description
|
||||
@ -426,10 +424,10 @@ READ8_MEMBER(xor100_state::i8255_pc_r)
|
||||
UINT8 data = 0;
|
||||
|
||||
/* on line */
|
||||
data |= centronics->vcc_r() << 4;
|
||||
data |= m_centronics->vcc_r() << 4;
|
||||
|
||||
/* busy */
|
||||
data |= centronics->busy_r() << 5;
|
||||
data |= m_centronics->busy_r() << 5;
|
||||
|
||||
return data;
|
||||
}
|
||||
@ -440,7 +438,7 @@ static I8255A_INTERFACE( printer_8255_intf )
|
||||
DEVCB_DEVICE_MEMBER(CENTRONICS_TAG, centronics_device, write),
|
||||
DEVCB_NULL,
|
||||
DEVCB_DEVICE_LINE_MEMBER(CENTRONICS_TAG, centronics_device, strobe_w),
|
||||
DEVCB_DRIVER_MEMBER(xor100_state,i8255_pc_r),
|
||||
DEVCB_DRIVER_MEMBER(xor100_state, i8255_pc_r),
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
@ -453,29 +451,33 @@ static const centronics_interface xor100_centronics_intf =
|
||||
|
||||
/* Z80-CTC Interface */
|
||||
|
||||
WRITE_LINE_MEMBER(xor100_state::ctc_z0_w)
|
||||
WRITE_LINE_MEMBER( xor100_state::ctc_z0_w )
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(xor100_state::ctc_z1_w)
|
||||
WRITE_LINE_MEMBER( xor100_state::ctc_z1_w )
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(xor100_state::ctc_z2_w)
|
||||
WRITE_LINE_MEMBER( xor100_state::ctc_z2_w )
|
||||
{
|
||||
}
|
||||
|
||||
static Z80CTC_INTERFACE( ctc_intf )
|
||||
{
|
||||
DEVCB_CPU_INPUT_LINE(Z80_TAG, INPUT_LINE_IRQ0), /* interrupt handler */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state,ctc_z0_w), /* ZC/TO0 callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state,ctc_z1_w), /* ZC/TO1 callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state,ctc_z2_w) /* ZC/TO2 callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state, ctc_z0_w), /* ZC/TO0 callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state, ctc_z1_w), /* ZC/TO1 callback */
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state, ctc_z2_w) /* ZC/TO2 callback */
|
||||
};
|
||||
|
||||
/* WD1795-02 Interface */
|
||||
|
||||
WRITE_LINE_MEMBER( xor100_state::fdc_irq_w )
|
||||
static SLOT_INTERFACE_START( xor100_floppies )
|
||||
SLOT_INTERFACE( "8ssdd", FLOPPY_8_SSDD ) // Shugart SA-100
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
void xor100_state::fdc_intrq_w(bool state)
|
||||
{
|
||||
m_fdc_irq = state;
|
||||
m_ctc->trg0(state);
|
||||
@ -487,7 +489,7 @@ WRITE_LINE_MEMBER( xor100_state::fdc_irq_w )
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( xor100_state::fdc_drq_w )
|
||||
void xor100_state::fdc_drq_w(bool state)
|
||||
{
|
||||
m_fdc_drq = state;
|
||||
|
||||
@ -498,27 +500,43 @@ WRITE_LINE_MEMBER( xor100_state::fdc_drq_w )
|
||||
}
|
||||
}
|
||||
|
||||
static const wd17xx_interface fdc_intf =
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state, fdc_irq_w),
|
||||
DEVCB_DRIVER_LINE_MEMBER(xor100_state, fdc_drq_w),
|
||||
{ FLOPPY_0, FLOPPY_1, NULL, NULL }
|
||||
};
|
||||
|
||||
/* Terminal Interface */
|
||||
|
||||
WRITE8_MEMBER(xor100_state::xor100_kbd_put)
|
||||
WRITE8_MEMBER( xor100_state::xor100_kbd_put )
|
||||
{
|
||||
i8251_device* uart = dynamic_cast<i8251_device*>(machine().device(I8251_B_TAG));
|
||||
uart->receive_character(data);
|
||||
m_uart_b->receive_character(data);
|
||||
}
|
||||
|
||||
static GENERIC_TERMINAL_INTERFACE( xor100_terminal_intf )
|
||||
{
|
||||
DEVCB_DRIVER_MEMBER(xor100_state,xor100_kbd_put)
|
||||
DEVCB_DRIVER_MEMBER(xor100_state, xor100_kbd_put)
|
||||
};
|
||||
|
||||
static S100_INTERFACE( s100_intf )
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_CPU_INPUT_LINE(Z80_TAG, Z80_INPUT_LINE_WAIT),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
};
|
||||
|
||||
static SLOT_INTERFACE_START( xor100_s100_cards )
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
/* Machine Initialization */
|
||||
|
||||
void xor100_state::machine_start()
|
||||
@ -551,19 +569,6 @@ void xor100_state::machine_reset()
|
||||
|
||||
/* Machine Driver */
|
||||
|
||||
static const floppy_interface xor100_floppy_interface =
|
||||
{
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
FLOPPY_STANDARD_5_25_DSDD,
|
||||
LEGACY_FLOPPY_OPTIONS_NAME(default),
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( xor100, xor100_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD(Z80_TAG, Z80, XTAL_8MHz/2)
|
||||
@ -576,11 +581,28 @@ static MACHINE_CONFIG_START( xor100, xor100_state )
|
||||
MCFG_I8255A_ADD(I8255A_TAG, printer_8255_intf)
|
||||
MCFG_Z80CTC_ADD(Z80CTC_TAG, XTAL_8MHz/2, ctc_intf)
|
||||
MCFG_COM8116_ADD(COM5016_TAG, 5000000, com5016_intf)
|
||||
MCFG_FD1795_ADD(WD1795_TAG, /*XTAL_8MHz/8,*/ fdc_intf)
|
||||
MCFG_LEGACY_FLOPPY_2_DRIVES_ADD(xor100_floppy_interface)
|
||||
MCFG_FD1795x_ADD(WD1795_TAG, XTAL_8MHz/8 *8)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":0", xor100_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":1", xor100_floppies, "8ssdd", NULL, floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":2", xor100_floppies, NULL, NULL, floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD1795_TAG":3", xor100_floppies, NULL, NULL, floppy_image_device::default_floppy_formats)
|
||||
|
||||
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, xor100_centronics_intf)
|
||||
MCFG_GENERIC_TERMINAL_ADD(TERMINAL_TAG, xor100_terminal_intf)
|
||||
|
||||
// S-100
|
||||
MCFG_S100_BUS_ADD(Z80_TAG, s100_intf)
|
||||
MCFG_S100_SLOT_ADD("s100_1", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_2", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_3", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_4", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_5", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_6", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_7", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_8", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_9", xor100_s100_cards, NULL, NULL)
|
||||
MCFG_S100_SLOT_ADD("s100_10", xor100_s100_cards, NULL, NULL)
|
||||
|
||||
/* internal ram */
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("64K")
|
||||
|
@ -5,15 +5,14 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "formats/basicdsk.h"
|
||||
#include "imagedev/flopdrv.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/com8116.h"
|
||||
#include "machine/ctronics.h"
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/i8251.h"
|
||||
#include "machine/s100.h"
|
||||
#include "machine/terminal.h"
|
||||
#include "machine/wd17xx.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "machine/z80ctc.h"
|
||||
|
||||
#define SCREEN_TAG "screen"
|
||||
@ -33,24 +32,34 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, Z80_TAG),
|
||||
m_dbrg(*this, COM5016_TAG),
|
||||
m_uart_a(*this, I8251_A_TAG),
|
||||
m_uart_b(*this, I8251_B_TAG),
|
||||
m_fdc(*this, WD1795_TAG),
|
||||
m_ctc(*this, Z80CTC_TAG),
|
||||
m_ram(*this, RAM_TAG),
|
||||
m_terminal(*this, TERMINAL_TAG),
|
||||
m_floppy0(*this, FLOPPY_0),
|
||||
m_floppy1(*this, FLOPPY_1)
|
||||
m_centronics(*this, CENTRONICS_TAG),
|
||||
m_s100(*this, S100_TAG),
|
||||
m_floppy0(*this, WD1795_TAG":0"),
|
||||
m_floppy1(*this, WD1795_TAG":1"),
|
||||
m_floppy2(*this, WD1795_TAG":2"),
|
||||
m_floppy3(*this, WD1795_TAG":3")
|
||||
{ }
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<com8116_device> m_dbrg;
|
||||
required_device<i8251_device> m_uart_a;
|
||||
required_device<i8251_device> m_uart_b;
|
||||
required_device<fd1795_device> m_fdc;
|
||||
required_device<fd1795_t> m_fdc;
|
||||
required_device<z80ctc_device> m_ctc;
|
||||
required_device<ram_device> m_ram;
|
||||
required_device<generic_terminal_device> m_terminal;
|
||||
required_device<legacy_floppy_image_device> m_floppy0;
|
||||
required_device<legacy_floppy_image_device> m_floppy1;
|
||||
required_device<centronics_device> m_centronics;
|
||||
required_device<s100_device> m_s100;
|
||||
required_device<floppy_connector> m_floppy0;
|
||||
required_device<floppy_connector> m_floppy1;
|
||||
required_device<floppy_connector> m_floppy2;
|
||||
required_device<floppy_connector> m_floppy3;
|
||||
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
@ -63,8 +72,8 @@ public:
|
||||
DECLARE_READ8_MEMBER( fdc_wait_r );
|
||||
DECLARE_WRITE8_MEMBER( fdc_dcont_w );
|
||||
DECLARE_WRITE8_MEMBER( fdc_dsel_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_irq_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
|
||||
void fdc_intrq_w(bool state);
|
||||
void fdc_drq_w(bool state);
|
||||
|
||||
void bankswitch();
|
||||
|
||||
@ -73,8 +82,8 @@ public:
|
||||
int m_bank;
|
||||
|
||||
// floppy state
|
||||
int m_fdc_irq;
|
||||
int m_fdc_drq;
|
||||
bool m_fdc_irq;
|
||||
bool m_fdc_drq;
|
||||
int m_fdc_dden;
|
||||
DECLARE_WRITE_LINE_MEMBER(com5016_fr_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(com5016_ft_w);
|
||||
|
Loading…
Reference in New Issue
Block a user