mirror of
https://github.com/holub/mame
synced 2025-07-06 18:39:28 +03:00
(MESS) c2040: Refactored to use mos6530n. (nw)
This commit is contained in:
parent
c6bcaa8afa
commit
c15fbd2ad9
@ -188,9 +188,9 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( c2040_fdc_mem, AS_PROGRAM, 8, c2040_device )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x1fff)
|
||||
AM_RANGE(0x0000, 0x003f) AM_MIRROR(0x0300) AM_RAM // 6530
|
||||
AM_RANGE(0x0040, 0x004f) AM_MIRROR(0x0330) AM_DEVREADWRITE(M6522_TAG, via6522_device, read, write)
|
||||
AM_RANGE(0x0080, 0x008f) AM_MIRROR(0x0330) AM_DEVREADWRITE(M6530_TAG, mos6530_device, read, write)
|
||||
AM_RANGE(0x0000, 0x003f) AM_MIRROR(0x0300) AM_DEVICE(M6530_TAG, mos6530_t, ram_map)
|
||||
AM_RANGE(0x0040, 0x004f) AM_MIRROR(0x0330) AM_DEVICE(M6522_TAG, via6522_device, map)
|
||||
AM_RANGE(0x0080, 0x008f) AM_MIRROR(0x0330) AM_DEVICE(M6530_TAG, mos6530_t, io_map)
|
||||
AM_RANGE(0x0400, 0x07ff) AM_RAM AM_SHARE("share1")
|
||||
AM_RANGE(0x0800, 0x0bff) AM_RAM AM_SHARE("share2")
|
||||
AM_RANGE(0x0c00, 0x0fff) AM_RAM AM_SHARE("share3")
|
||||
@ -404,69 +404,6 @@ WRITE8_MEMBER( c2040_device::via_pb_w )
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// mos6530 uk3
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( c2040_device::miot_pb_r )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
PB0
|
||||
PB1
|
||||
PB2
|
||||
PB3 WPS
|
||||
PB4
|
||||
PB5
|
||||
PB6 SYNC
|
||||
PB7
|
||||
|
||||
*/
|
||||
|
||||
UINT8 data = 0;
|
||||
|
||||
// write protect sense
|
||||
data |= m_fdc->wps_r() << 3;
|
||||
|
||||
// SYNC detected
|
||||
data |= m_fdc->sync_r() << 6;
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( c2040_device::miot_pb_w )
|
||||
{
|
||||
/*
|
||||
|
||||
bit description
|
||||
|
||||
PB0 DRV SEL
|
||||
PB1 DS0
|
||||
PB2 DS1
|
||||
PB3
|
||||
PB4
|
||||
PB5
|
||||
PB6
|
||||
PB7 M6504 IRQ
|
||||
|
||||
*/
|
||||
|
||||
// drive select
|
||||
m_fdc->drv_sel_w(BIT(data, 0));
|
||||
|
||||
// density select
|
||||
m_fdc->ds_w((data >> 1) & 0x03);
|
||||
|
||||
// interrupt
|
||||
if (m_miot_irq != BIT(data, 7))
|
||||
{
|
||||
m_fdccpu->set_input_line(M6502_IRQ_LINE, BIT(data, 7) ? CLEAR_LINE : ASSERT_LINE);
|
||||
m_miot_irq = BIT(data, 7);
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( c2040_floppies )
|
||||
//-------------------------------------------------
|
||||
@ -536,12 +473,16 @@ static MACHINE_CONFIG_FRAGMENT( c2040 )
|
||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
|
||||
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
|
||||
|
||||
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
|
||||
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
|
||||
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
|
||||
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_16MHz/16)
|
||||
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
|
||||
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, drv_sel_w))
|
||||
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds0_w))
|
||||
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds1_w))
|
||||
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c2040_fdc_t, wps_r))
|
||||
|
||||
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
|
||||
MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb6_w))
|
||||
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
||||
MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
|
||||
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c2040_device::floppy_formats)
|
||||
@ -590,12 +531,16 @@ static MACHINE_CONFIG_FRAGMENT( c3040 )
|
||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
|
||||
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
|
||||
|
||||
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
|
||||
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
|
||||
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
|
||||
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_16MHz/16)
|
||||
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
|
||||
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, drv_sel_w))
|
||||
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds0_w))
|
||||
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds1_w))
|
||||
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c2040_fdc_t, wps_r))
|
||||
|
||||
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
|
||||
MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb6_w))
|
||||
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
||||
MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
|
||||
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c3040_device::floppy_formats)
|
||||
@ -644,12 +589,16 @@ static MACHINE_CONFIG_FRAGMENT( c4040 )
|
||||
MCFG_VIA6522_CA2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, mode_sel_w))
|
||||
MCFG_VIA6522_CB2_HANDLER(DEVWRITELINE(FDC_TAG, c2040_fdc_t, rw_sel_w))
|
||||
|
||||
MCFG_DEVICE_ADD(M6530_TAG, MOS6530, XTAL_16MHz/16)
|
||||
MCFG_MOS6530_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||
MCFG_MOS6530_IN_PB_CB(READ8(c2040_device, miot_pb_r))
|
||||
MCFG_MOS6530_OUT_PB_CB(WRITE8(c2040_device, miot_pb_w))
|
||||
MCFG_DEVICE_ADD(M6530_TAG, MOS6530n, XTAL_16MHz/16)
|
||||
MCFG_MOS6530n_IRQ_CB(INPUTLINE(M6504_TAG, M6502_IRQ_LINE))
|
||||
MCFG_MOS6530n_OUT_PA_CB(DEVWRITE8(FDC_TAG, c2040_fdc_t, write))
|
||||
MCFG_MOS6530n_OUT_PB0_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, drv_sel_w))
|
||||
MCFG_MOS6530n_OUT_PB1_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds0_w))
|
||||
MCFG_MOS6530n_OUT_PB2_CB(DEVWRITELINE(FDC_TAG, c2040_fdc_t, ds1_w))
|
||||
MCFG_MOS6530n_IN_PB3_CB(DEVREADLINE(FDC_TAG, c2040_fdc_t, wps_r))
|
||||
|
||||
MCFG_DEVICE_ADD(FDC_TAG, C2040_FDC, XTAL_16MHz)
|
||||
MCFG_C2040_SYNC_CALLBACK(DEVWRITELINE(M6530_TAG, mos6530_t, pb6_w))
|
||||
MCFG_C2040_READY_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_ca1))
|
||||
MCFG_C2040_ERROR_CALLBACK(DEVWRITELINE(M6522_TAG, via6522_device, write_cb1))
|
||||
MCFG_FLOPPY_DRIVE_ADD(FDC_TAG":0", c2040_floppies, "525ssqd", c4040_device::floppy_formats)
|
||||
@ -741,8 +690,7 @@ c2040_device::c2040_device(const machine_config &mconfig, device_type type, cons
|
||||
m_address(*this, "ADDRESS"),
|
||||
m_rfdo(1),
|
||||
m_daco(1),
|
||||
m_atna(1),
|
||||
m_miot_irq(CLEAR_LINE)
|
||||
m_atna(1)
|
||||
{
|
||||
}
|
||||
|
||||
@ -762,8 +710,7 @@ c2040_device::c2040_device(const machine_config &mconfig, const char *tag, devic
|
||||
m_address(*this, "ADDRESS"),
|
||||
m_rfdo(1),
|
||||
m_daco(1),
|
||||
m_atna(1),
|
||||
m_miot_irq(CLEAR_LINE)
|
||||
m_atna(1)
|
||||
{
|
||||
}
|
||||
|
||||
@ -797,7 +744,7 @@ void c2040_device::device_start()
|
||||
save_item(NAME(m_rfdo));
|
||||
save_item(NAME(m_daco));
|
||||
save_item(NAME(m_atna));
|
||||
save_item(NAME(m_miot_irq));
|
||||
save_item(NAME(m_ifc));
|
||||
}
|
||||
|
||||
|
||||
|
@ -18,7 +18,7 @@
|
||||
#include "cpu/m6502/m6504.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/6532riot.h"
|
||||
#include "machine/mos6530.h"
|
||||
#include "machine/mos6530n.h"
|
||||
|
||||
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
// ======================> c2040_device
|
||||
|
||||
class c2040_device : public device_t,
|
||||
public device_ieee488_interface
|
||||
public device_ieee488_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -50,8 +50,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( via_pb_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( mode_sel_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( rw_sel_w );
|
||||
DECLARE_READ8_MEMBER( miot_pb_r );
|
||||
DECLARE_WRITE8_MEMBER( miot_pb_w );
|
||||
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
|
||||
@ -78,7 +76,7 @@ protected:
|
||||
required_device<m6504_device> m_fdccpu;
|
||||
required_device<riot6532_device> m_riot0;
|
||||
required_device<riot6532_device> m_riot1;
|
||||
required_device<mos6530_device> m_miot;
|
||||
required_device<mos6530_t> m_miot;
|
||||
required_device<via6522_device> m_via;
|
||||
required_device<floppy_image_device> m_floppy0;
|
||||
optional_device<floppy_image_device> m_floppy1;
|
||||
@ -91,9 +89,6 @@ protected:
|
||||
int m_daco; // not data accepted output
|
||||
int m_atna; // attention acknowledge
|
||||
int m_ifc;
|
||||
|
||||
// signals
|
||||
int m_miot_irq; // MIOT interrupt
|
||||
};
|
||||
|
||||
|
||||
|
@ -82,6 +82,8 @@ c2040_fdc_t::c2040_fdc_t(const machine_config &mconfig, const char *tag, device_
|
||||
m_stp0(0),
|
||||
m_stp1(0),
|
||||
m_ds(0),
|
||||
m_ds0(0),
|
||||
m_ds1(0),
|
||||
m_drv_sel(0),
|
||||
m_mode_sel(0),
|
||||
m_rw_sel(0),
|
||||
@ -116,6 +118,8 @@ void c2040_fdc_t::device_start()
|
||||
save_item(NAME(m_stp0));
|
||||
save_item(NAME(m_stp1));
|
||||
save_item(NAME(m_ds));
|
||||
save_item(NAME(m_ds0));
|
||||
save_item(NAME(m_ds1));
|
||||
save_item(NAME(m_drv_sel));
|
||||
save_item(NAME(m_mode_sel));
|
||||
save_item(NAME(m_rw_sel));
|
||||
@ -451,6 +455,18 @@ WRITE8_MEMBER( c2040_fdc_t::write )
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( c2040_fdc_t::ds0_w )
|
||||
{
|
||||
m_ds0 = state;
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( c2040_fdc_t::ds1_w )
|
||||
{
|
||||
m_ds1 = state;
|
||||
|
||||
ds_w(m_ds1 << 1 | m_ds0);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER( c2040_fdc_t::drv_sel_w )
|
||||
{
|
||||
if (m_drv_sel != state)
|
||||
|
@ -54,6 +54,8 @@ public:
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER( ds0_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( ds1_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( drv_sel_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( mode_sel_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( rw_sel_w );
|
||||
@ -127,6 +129,8 @@ protected:
|
||||
int m_stp0;
|
||||
int m_stp1;
|
||||
int m_ds;
|
||||
int m_ds0;
|
||||
int m_ds1;
|
||||
int m_drv_sel;
|
||||
int m_mode_sel;
|
||||
int m_rw_sel;
|
||||
|
@ -85,6 +85,8 @@ c8050_fdc_t::c8050_fdc_t(const machine_config &mconfig, const char *tag, device_
|
||||
m_stp0(0),
|
||||
m_stp1(0),
|
||||
m_ds(0),
|
||||
m_ds0(0),
|
||||
m_ds1(0),
|
||||
m_drv_sel(0),
|
||||
m_mode_sel(0),
|
||||
m_rw_sel(1)
|
||||
@ -117,6 +119,8 @@ void c8050_fdc_t::device_start()
|
||||
save_item(NAME(m_stp0));
|
||||
save_item(NAME(m_stp1));
|
||||
save_item(NAME(m_ds));
|
||||
save_item(NAME(m_ds0));
|
||||
save_item(NAME(m_ds1));
|
||||
save_item(NAME(m_drv_sel));
|
||||
save_item(NAME(m_mode_sel));
|
||||
save_item(NAME(m_rw_sel));
|
||||
|
@ -113,14 +113,14 @@ void mos6530_t::device_start()
|
||||
m_out_pa_cb.resolve();
|
||||
m_in_pb_cb.resolve();
|
||||
m_out_pb_cb.resolve();
|
||||
m_in_pa0_cb.resolve_safe(1);
|
||||
m_in_pa1_cb.resolve_safe(1);
|
||||
m_in_pa2_cb.resolve_safe(1);
|
||||
m_in_pa3_cb.resolve_safe(1);
|
||||
m_in_pa4_cb.resolve_safe(1);
|
||||
m_in_pa5_cb.resolve_safe(1);
|
||||
m_in_pa6_cb.resolve_safe(1);
|
||||
m_in_pa7_cb.resolve_safe(1);
|
||||
m_in_pa0_cb.resolve();
|
||||
m_in_pa1_cb.resolve();
|
||||
m_in_pa2_cb.resolve();
|
||||
m_in_pa3_cb.resolve();
|
||||
m_in_pa4_cb.resolve();
|
||||
m_in_pa5_cb.resolve();
|
||||
m_in_pa6_cb.resolve();
|
||||
m_in_pa7_cb.resolve();
|
||||
m_out_pa0_cb.resolve_safe();
|
||||
m_out_pa1_cb.resolve_safe();
|
||||
m_out_pa2_cb.resolve_safe();
|
||||
@ -129,14 +129,14 @@ void mos6530_t::device_start()
|
||||
m_out_pa5_cb.resolve_safe();
|
||||
m_out_pa6_cb.resolve_safe();
|
||||
m_out_pa7_cb.resolve_safe();
|
||||
m_in_pb0_cb.resolve_safe(1);
|
||||
m_in_pb1_cb.resolve_safe(1);
|
||||
m_in_pb2_cb.resolve_safe(1);
|
||||
m_in_pb3_cb.resolve_safe(1);
|
||||
m_in_pb4_cb.resolve_safe(1);
|
||||
m_in_pb5_cb.resolve_safe(1);
|
||||
m_in_pb6_cb.resolve_safe(1);
|
||||
m_in_pb7_cb.resolve_safe(1);
|
||||
m_in_pb0_cb.resolve();
|
||||
m_in_pb1_cb.resolve();
|
||||
m_in_pb2_cb.resolve();
|
||||
m_in_pb3_cb.resolve();
|
||||
m_in_pb4_cb.resolve();
|
||||
m_in_pb5_cb.resolve();
|
||||
m_in_pb6_cb.resolve();
|
||||
m_in_pb7_cb.resolve();
|
||||
m_out_pb0_cb.resolve_safe();
|
||||
m_out_pb1_cb.resolve_safe();
|
||||
m_out_pb2_cb.resolve_safe();
|
||||
@ -255,6 +255,8 @@ void mos6530_t::update_pb()
|
||||
|
||||
void mos6530_t::pa_w(int bit, int state)
|
||||
{
|
||||
if (LOG) logerror("%s %s MOS6530 '%s' Port A Data Bit %u State %u\n", machine().time().as_string(), machine().describe_context(), tag(), bit, state);
|
||||
|
||||
m_pa_in &= ~(1 << bit);
|
||||
m_pa_in |= (state << bit);
|
||||
}
|
||||
@ -266,6 +268,8 @@ void mos6530_t::pa_w(int bit, int state)
|
||||
|
||||
void mos6530_t::pb_w(int bit, int state)
|
||||
{
|
||||
if (LOG) logerror("%s %s MOS6530 '%s' Port B Data Bit %u State %u\n", machine().time().as_string(), machine().describe_context(), tag(), bit, state);
|
||||
|
||||
m_pb_in &= ~(1 << bit);
|
||||
m_pb_in |= (state << bit);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user