From 47a460a35a94cb88c1e3647a6a1b2bb11decde77 Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 14 Jul 2018 18:07:34 -0400 Subject: New skeleton device: Western Digital WD1007A ESDI hard disk controller [Al Kossow] --- scripts/src/bus.lua | 2 ++ src/devices/bus/isa/isa_cards.cpp | 2 ++ src/devices/bus/isa/wd1007a.cpp | 60 +++++++++++++++++++++++++++++++++++++++ src/devices/bus/isa/wd1007a.h | 42 +++++++++++++++++++++++++++ src/devices/cpu/mcs51/mcs51.cpp | 6 ++++ src/devices/cpu/mcs51/mcs51.h | 9 ++++++ 6 files changed, 121 insertions(+) create mode 100644 src/devices/bus/isa/wd1007a.cpp create mode 100644 src/devices/bus/isa/wd1007a.h diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index f3133cb94d5..869a6d1b639 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -1117,6 +1117,8 @@ if (BUSES["ISA"]~=null) then MAME_DIR .. "src/devices/bus/isa/aha1542.h", MAME_DIR .. "src/devices/bus/isa/wd1002a_wx1.cpp", MAME_DIR .. "src/devices/bus/isa/wd1002a_wx1.h", + MAME_DIR .. "src/devices/bus/isa/wd1007a.cpp", + MAME_DIR .. "src/devices/bus/isa/wd1007a.h", MAME_DIR .. "src/devices/bus/isa/dectalk.cpp", MAME_DIR .. "src/devices/bus/isa/dectalk.h", MAME_DIR .. "src/devices/bus/isa/pds.cpp", diff --git a/src/devices/bus/isa/isa_cards.cpp b/src/devices/bus/isa/isa_cards.cpp index bd9a61dfe83..fbbafc0bc69 100644 --- a/src/devices/bus/isa/isa_cards.cpp +++ b/src/devices/bus/isa/isa_cards.cpp @@ -33,6 +33,7 @@ #include "side116.h" #include "aha1542.h" #include "wd1002a_wx1.h" +#include "wd1007a.h" #include "mcd.h" #include "lbaenhancer.h" @@ -166,4 +167,5 @@ void pc_isa16_cards(device_slot_interface &device) device.option_add("sb16_lle", ISA16_SB16); device.option_add("mcd", ISA16_MCD); device.option_add("sad8852", ISA16_SAD8852); + device.option_add("wd1007a", WD1007A); } diff --git a/src/devices/bus/isa/wd1007a.cpp b/src/devices/bus/isa/wd1007a.cpp new file mode 100644 index 00000000000..3db2db1d776 --- /dev/null +++ b/src/devices/bus/isa/wd1007a.cpp @@ -0,0 +1,60 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/********************************************************************** + + Western Digital WD1007A ESDI hard disk controller (© 1987) + +**********************************************************************/ + +#include "emu.h" +#include "wd1007a.h" + +#include "cpu/mcs51/mcs51.h" +//#include "imagedev/chd_hd.h" + +DEFINE_DEVICE_TYPE(WD1007A, wd1007a_device, "wd1007a", "WD1007A ESDI HDC") + +ROM_START(wd1007a) + ROM_REGION(0x2000, "mcu", 0) + ROM_LOAD("wd1007a_8753_cs8074.bin", 0x0000, 0x2000, CRC(099c2c03) SHA1(5ff6a70b1b44962654d02f85916c1b09bc4ebc96)) +ROM_END + + +//------------------------------------------------- +// rom_region - device-specific ROM region +//------------------------------------------------- + +const tiny_rom_entry *wd1007a_device::device_rom_region() const +{ + return ROM_NAME(wd1007a); +} + + +//------------------------------------------------- +// wd1007a_device - constructor +//------------------------------------------------- + +wd1007a_device::wd1007a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : device_t(mconfig, WD1007A, tag, owner, clock) + , device_isa16_card_interface(mconfig, *this) +{ +} + + +//------------------------------------------------- +// device_add_mconfig - add device configuration +//------------------------------------------------- + +MACHINE_CONFIG_START(wd1007a_device::device_add_mconfig) + MCFG_DEVICE_ADD("mcu", AM8753, 10_MHz_XTAL) +MACHINE_CONFIG_END + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void wd1007a_device::device_start() +{ + set_isa_device(); +} diff --git a/src/devices/bus/isa/wd1007a.h b/src/devices/bus/isa/wd1007a.h new file mode 100644 index 00000000000..1a761ecb66d --- /dev/null +++ b/src/devices/bus/isa/wd1007a.h @@ -0,0 +1,42 @@ +// license:BSD-3-Clause +// copyright-holders:AJR +/********************************************************************** + + Western Digital WD1007A ESDI hard disk controller + +**********************************************************************/ + +#pragma once + +#ifndef MAME_BUS_ISA_WD1007A_H +#define MAME_BUS_ISA_WD1007A_H + +#include "isa.h" + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> wd1007a_device + +class wd1007a_device : public device_t, public device_isa16_card_interface +{ +public: + // construction/destruction + wd1007a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_add_mconfig(machine_config &config) override; + virtual const tiny_rom_entry *device_rom_region() const override; +}; + + +// device type definition +DECLARE_DEVICE_TYPE(WD1007A, wd1007a_device) + +#endif // MAME_BUS_ISA_WD1007A_H diff --git a/src/devices/cpu/mcs51/mcs51.cpp b/src/devices/cpu/mcs51/mcs51.cpp index b79dab6228f..60d39a25139 100644 --- a/src/devices/cpu/mcs51/mcs51.cpp +++ b/src/devices/cpu/mcs51/mcs51.cpp @@ -226,6 +226,7 @@ DEFINE_DEVICE_TYPE(I8031, i8031_device, "i8031", "Intel I8031") DEFINE_DEVICE_TYPE(I8032, i8032_device, "i8032", "Intel I8032") DEFINE_DEVICE_TYPE(I8051, i8051_device, "i8051", "Intel I8051") DEFINE_DEVICE_TYPE(I8751, i8751_device, "i8751", "Intel I8751") +DEFINE_DEVICE_TYPE(AM8753, am8753_device, "am8753", "AMD Am8753") DEFINE_DEVICE_TYPE(I8052, i8052_device, "i8052", "Intel I8052") DEFINE_DEVICE_TYPE(I8752, i8752_device, "i8752", "Intel I8752") DEFINE_DEVICE_TYPE(I80C31, i80c31_device, "i80c31", "Intel I80C31") @@ -302,6 +303,11 @@ i8751_device::i8751_device(const machine_config &mconfig, const char *tag, devic { } +am8753_device::am8753_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : mcs51_cpu_device(mconfig, AM8753, tag, owner, clock, 13, 7) +{ +} + i8052_device::i8052_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int program_width, int data_width, uint8_t features) : mcs51_cpu_device(mconfig, type, tag, owner, clock, program_width, data_width, features | FEATURE_I8052) { diff --git a/src/devices/cpu/mcs51/mcs51.h b/src/devices/cpu/mcs51/mcs51.h index 51ffe2978d5..911a49c2b89 100644 --- a/src/devices/cpu/mcs51/mcs51.h +++ b/src/devices/cpu/mcs51/mcs51.h @@ -359,6 +359,8 @@ DECLARE_DEVICE_TYPE(I8032, i8032_device) /* variants 4k internal rom and 128 byte internal memory */ DECLARE_DEVICE_TYPE(I8051, i8051_device) DECLARE_DEVICE_TYPE(I8751, i8751_device) +/* variants 8k internal rom and 128 byte internal memory (no 8052 features) */ +DECLARE_DEVICE_TYPE(AM8753, am8753_device) /* variants 8k internal rom and 256 byte internal memory and more registers */ DECLARE_DEVICE_TYPE(I8052, i8052_device) DECLARE_DEVICE_TYPE(I8752, i8752_device) @@ -398,6 +400,13 @@ public: i8751_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); }; +class am8753_device : public mcs51_cpu_device +{ +public: + // construction/destruction + am8753_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); +}; + class i8052_device : public mcs51_cpu_device { -- cgit v1.2.3