summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2012-12-09 18:17:57 +0000
committer Curt Coder <curtcoder@mail.com>2012-12-09 18:17:57 +0000
commit133259956312f85ba5eb2c85d8d9cab4675be300 (patch)
tree11f49559a73a7356cdceb83d66498965be1d1b4d /src/mess/machine
parent7c5fa01c742db01a32c333462601baa80dc29108 (diff)
upd765: Added DP8473 and PC8477A variants. (nw)
(MESS) fd2000: Used correct FDCs. (nw)
Diffstat (limited to 'src/mess/machine')
-rw-r--r--src/mess/machine/fd2000.c119
-rw-r--r--src/mess/machine/fd2000.h6
2 files changed, 114 insertions, 11 deletions
diff --git a/src/mess/machine/fd2000.c b/src/mess/machine/fd2000.c
index 99bddef8bcc..4f7401c6592 100644
--- a/src/mess/machine/fd2000.c
+++ b/src/mess/machine/fd2000.c
@@ -13,6 +13,7 @@
- IEC
- VIA
+ - DP8473/PC8477A command extensions to upd765
- D1M/D2M/D4M image format (http://ist.uwaterloo.ca/~schepers/formats/D2M-DNP.TXT)
*/
@@ -92,27 +93,121 @@ const rom_entry *fd2000_device::device_rom_region() const
static ADDRESS_MAP_START( fd2000_mem, AS_PROGRAM, 8, fd2000_device )
AM_RANGE(0x0000, 0x3fff) AM_RAM
AM_RANGE(0x4000, 0x400f) AM_MIRROR(0xbf0) AM_DEVREADWRITE(M6522_TAG, via6522_device, read, write)
- AM_RANGE(0x4e00, 0x4e07) AM_MIRROR(0x1f8) AM_DEVICE(DP8473_TAG, upd765a_device, map)
+ AM_RANGE(0x4e00, 0x4e07) AM_MIRROR(0x1f8) AM_DEVICE(DP8473_TAG, dp8473_device, map)
AM_RANGE(0x5000, 0x7fff) AM_RAM
AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0)
ADDRESS_MAP_END
//-------------------------------------------------
-// via6522_interface via1_intf
+// ADDRESS_MAP( fd4000_mem )
//-------------------------------------------------
+static ADDRESS_MAP_START( fd4000_mem, AS_PROGRAM, 8, fd4000_device )
+ AM_RANGE(0x0000, 0x3fff) AM_RAM
+ AM_RANGE(0x4000, 0x400f) AM_MIRROR(0xbf0) AM_DEVREADWRITE(M6522_TAG, via6522_device, read, write)
+ AM_RANGE(0x4e00, 0x4e07) AM_MIRROR(0x1f8) AM_DEVICE(PC8477AV1_TAG, pc8477a_device, map)
+ AM_RANGE(0x5000, 0x7fff) AM_RAM
+ AM_RANGE(0x8000, 0xffff) AM_ROM AM_REGION(M6502_TAG, 0)
+ADDRESS_MAP_END
+
+
+//-------------------------------------------------
+// via6522_interface via_intf
+//-------------------------------------------------
+
+READ8_MEMBER( fd2000_device::via_pa_r )
+{
+ /*
+
+ bit description
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7
+
+ */
+
+ return 0;
+}
+
+WRITE8_MEMBER( fd2000_device::via_pa_w )
+{
+ /*
+
+ bit description
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5 FAST DIR
+ 6
+ 7
+
+ */
+}
+
+READ8_MEMBER( fd2000_device::via_pb_r )
+{
+ /*
+
+ bit description
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6
+ 7 FDC INTRQ
+
+ */
+
+ UINT8 data = 0;
+
+ // FDC interrupt
+ data |= m_fdc->get_irq() << 7;
+
+ return data;
+}
+
+WRITE8_MEMBER( fd2000_device::via_pb_w )
+{
+ /*
+
+ bit description
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5 LED
+ 6 LED
+ 7
+
+ */
+}
+
static const via6522_interface via_intf =
{
- DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pa_r),
+ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pb_r),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
- DEVCB_NULL,
- DEVCB_NULL,
+ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pa_w),
+ DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER, fd2000_device, via_pb_w),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_NULL,
@@ -144,7 +239,7 @@ static MACHINE_CONFIG_FRAGMENT( fd2000 )
MCFG_CPU_PROGRAM_MAP(fd2000_mem)
MCFG_VIA6522_ADD(M6522_TAG, 2000000, via_intf)
- MCFG_UPD765A_ADD(DP8473_TAG, true, true)
+ MCFG_DP8473_ADD(DP8473_TAG)
MCFG_FLOPPY_DRIVE_ADD(DP8473_TAG":0", fd2000_floppies, "35hd", 0, floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
MACHINE_CONFIG_END
@@ -156,12 +251,12 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_FRAGMENT( fd4000 )
MCFG_CPU_ADD(M6502_TAG, M65C02, 2000000)
- MCFG_CPU_PROGRAM_MAP(fd2000_mem)
+ MCFG_CPU_PROGRAM_MAP(fd4000_mem)
MCFG_VIA6522_ADD(M6522_TAG, 2000000, via_intf)
- MCFG_UPD765A_ADD(DP8473_TAG, true, true)
+ MCFG_PC8477A_ADD(PC8477AV1_TAG)
- MCFG_FLOPPY_DRIVE_ADD(DP8473_TAG":0", fd4000_floppies, "35ed", 0, floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
+ MCFG_FLOPPY_DRIVE_ADD(PC8477AV1_TAG":0", fd4000_floppies, "35ed", 0, floppy_image_device::default_floppy_formats)//fd2000_device::floppy_formats)
MACHINE_CONFIG_END
@@ -217,6 +312,7 @@ fd2000_device::fd2000_device(const machine_config &mconfig, const char *tag, dev
: device_t(mconfig, FD2000, "FD-2000", tag, owner, clock),
device_cbm_iec_interface(mconfig, *this),
m_maincpu(*this, M6502_TAG),
+ m_fdc(*this, DP8473_TAG),
m_floppy0(*this, DP8473_TAG":0"),
m_variant(TYPE_FD2000)
{
@@ -226,7 +322,8 @@ fd2000_device::fd2000_device(const machine_config &mconfig, device_type type, co
: device_t(mconfig, type, name, tag, owner, clock),
device_cbm_iec_interface(mconfig, *this),
m_maincpu(*this, M6502_TAG),
- m_floppy0(*this, DP8473_TAG":0"),
+ m_fdc(*this, PC8477AV1_TAG),
+ m_floppy0(*this, PC8477AV1_TAG":0"),
m_variant(variant)
{
}
diff --git a/src/mess/machine/fd2000.h b/src/mess/machine/fd2000.h
index 961af2c1bbb..f029989b83b 100644
--- a/src/mess/machine/fd2000.h
+++ b/src/mess/machine/fd2000.h
@@ -53,6 +53,11 @@ public:
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
+ DECLARE_READ8_MEMBER( via_pa_r );
+ DECLARE_WRITE8_MEMBER( via_pa_w );
+ DECLARE_READ8_MEMBER( via_pb_r );
+ DECLARE_WRITE8_MEMBER( via_pb_w );
+
//DECLARE_FLOPPY_FORMATS( floppy_formats );
protected:
@@ -68,6 +73,7 @@ protected:
void cbm_iec_reset(int state);
required_device<m65c02_device> m_maincpu;
+ required_device<upd765_family_device> m_fdc;
required_device<floppy_connector> m_floppy0;
int m_variant;