diff options
author | 2015-05-21 15:47:18 +0300 | |
---|---|---|
committer | 2015-05-21 15:47:26 +0300 | |
commit | c15fbd2ad96fb41bbb5445ecedcc07d1b84b25ee (patch) | |
tree | 014d9547e4d06ad0c2fd3f6ca1faca0cd8e40621 /src | |
parent | c6bcaa8afa0b3d8307a2071eac96783120c4d80d (diff) |
(MESS) c2040: Refactored to use mos6530n. (nw)
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/bus/ieee488/c2040.c | 113 | ||||
-rw-r--r-- | src/emu/bus/ieee488/c2040.h | 11 | ||||
-rw-r--r-- | src/emu/bus/ieee488/c2040fdc.c | 16 | ||||
-rw-r--r-- | src/emu/bus/ieee488/c2040fdc.h | 4 | ||||
-rw-r--r-- | src/emu/bus/ieee488/c8050fdc.c | 4 | ||||
-rw-r--r-- | src/emu/machine/mos6530n.c | 36 |
6 files changed, 77 insertions, 107 deletions
diff --git a/src/emu/bus/ieee488/c2040.c b/src/emu/bus/ieee488/c2040.c index 7350af4a377..ccb149a4943 100644 --- a/src/emu/bus/ieee488/c2040.c +++ b/src/emu/bus/ieee488/c2040.c @@ -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") @@ -405,69 +405,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)); } diff --git a/src/emu/bus/ieee488/c2040.h b/src/emu/bus/ieee488/c2040.h index 45f0d6d443c..62e238efa4d 100644 --- a/src/emu/bus/ieee488/c2040.h +++ b/src/emu/bus/ieee488/c2040.h @@ -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 }; diff --git a/src/emu/bus/ieee488/c2040fdc.c b/src/emu/bus/ieee488/c2040fdc.c index 44baae86260..4dfccbde366 100644 --- a/src/emu/bus/ieee488/c2040fdc.c +++ b/src/emu/bus/ieee488/c2040fdc.c @@ -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) diff --git a/src/emu/bus/ieee488/c2040fdc.h b/src/emu/bus/ieee488/c2040fdc.h index 5e09f9843e7..178e81240a2 100644 --- a/src/emu/bus/ieee488/c2040fdc.h +++ b/src/emu/bus/ieee488/c2040fdc.h @@ -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; diff --git a/src/emu/bus/ieee488/c8050fdc.c b/src/emu/bus/ieee488/c8050fdc.c index 8b0a853c6d0..02bceb80328 100644 --- a/src/emu/bus/ieee488/c8050fdc.c +++ b/src/emu/bus/ieee488/c8050fdc.c @@ -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)); diff --git a/src/emu/machine/mos6530n.c b/src/emu/machine/mos6530n.c index 0999eaa4856..1c1be27638f 100644 --- a/src/emu/machine/mos6530n.c +++ b/src/emu/machine/mos6530n.c @@ -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); } |