summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2021-04-08 09:13:28 +0200
committer Olivier Galibert <galibert@pobox.com>2021-04-08 09:15:25 +0200
commitb663c4bc50bb782f32f4ca6a4667f71347d3daae (patch)
tree067756491a009df29f9d0554d896e245078135a7
parent10e96f726c6929edd31fe794b339a4b18740a601 (diff)
cdu75s: start the driver
-rw-r--r--scripts/src/bus.lua2
-rw-r--r--src/devices/bus/nscsi/cdu75s.cpp88
-rw-r--r--src/devices/bus/nscsi/cdu75s.h38
-rw-r--r--src/devices/bus/nscsi/devices.cpp2
4 files changed, 130 insertions, 0 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 1540f2c8d54..e30a51e2c2e 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -2503,6 +2503,8 @@ if (BUSES["NSCSI"]~=null) then
MAME_DIR .. "src/devices/bus/nscsi/cdd2000.h",
MAME_DIR .. "src/devices/bus/nscsi/cdrn820s.cpp",
MAME_DIR .. "src/devices/bus/nscsi/cdrn820s.h",
+ MAME_DIR .. "src/devices/bus/nscsi/cdu75s.cpp",
+ MAME_DIR .. "src/devices/bus/nscsi/cdu75s.h",
MAME_DIR .. "src/devices/bus/nscsi/cw7501.cpp",
MAME_DIR .. "src/devices/bus/nscsi/cw7501.h",
MAME_DIR .. "src/devices/bus/nscsi/devices.cpp",
diff --git a/src/devices/bus/nscsi/cdu75s.cpp b/src/devices/bus/nscsi/cdu75s.cpp
new file mode 100644
index 00000000000..d5a3a0b0863
--- /dev/null
+++ b/src/devices/bus/nscsi/cdu75s.cpp
@@ -0,0 +1,88 @@
+// license:BSD-3-Clause
+// copyright-holders:AJR
+/*******************************************************************************
+
+ Skeleton device for Sony/Apple CDU75S 2x cdrom reader
+
+*******************************************************************************/
+
+// Chips:
+// - IC101: CXA1841Q - ? probably something related to audio
+// - IC102: CXA1182Q-Z - servo control
+// - IC103: CXD2510Q - CD DSP
+// - IC105: BU4053BCF - analog mux/demux
+// - IC201: H8/3032 - main mcu, 64k internal rom
+// - IC202: CXD1808AQ - cdrom decoder
+// - IC203: LH62800K-60 - DRAM 256k*8
+// - IC204: FAS204 2405027 - Fast Architecture SCSI 204, ncr 53c94 compatible
+// - IC205: CXD8532Q - ? probable logic/processing
+// - IC301: pcm-1715u - DAC
+// - IC401: BA6295AFP - 2 channel motor driver
+
+#include "emu.h"
+#include "cdu75s.h"
+
+DEFINE_DEVICE_TYPE(CDU75S, cdu75s_device, "cdu75s", "Philips CDU75S CD-R")
+
+cdu75s_device::cdu75s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
+ : device_t(mconfig, CDU75S, tag, owner, clock)
+ , nscsi_slot_card_interface(mconfig, *this, "fas204")
+ , m_mcu(*this, "mcu")
+ , m_scsi(*this, "fas204")
+ , m_rom(*this, "mcu")
+{
+}
+
+void cdu75s_device::device_start()
+{
+ // We're getting interesting results with a basic vectors map,
+ // e.g. vector<n> points to 0x10000+4*n, where there's a jmp to
+ // the final destination
+
+ for(u32 i = 0; i != 64; i++) {
+ m_rom[i*2] = 1;
+ m_rom[i*2+1] = i*4;
+ }
+}
+
+void cdu75s_device::mem_map(address_map &map)
+{
+ map(0x00000, 0x1ffff).rom().region("mcu", 0);
+ map(0x40000, 0x4000f).m(m_scsi, FUNC(ncr53c94_device::map));
+
+ map(0x60000, 0x60007); // General i/o?
+ map(0x60005, 0x60005).r(FUNC(cdu75s_device::jumpers_r));
+
+ map(0xc0000, 0xc003f); // CXD1808AQ
+}
+
+void cdu75s_device::io_map(address_map &map)
+{
+}
+
+void cdu75s_device::device_add_mconfig(machine_config &config)
+{
+ H83032(config, m_mcu, 33.8688_MHz_XTAL/2);
+ m_mcu->set_addrmap(AS_PROGRAM, &cdu75s_device::mem_map);
+ m_mcu->set_addrmap(AS_IO, &cdu75s_device::io_map);
+
+ NCR53C94(config, m_scsi, 25'000'000); // FAS204, compatible
+}
+
+ROM_START(cdu75s)
+ ROM_REGION(0x20000, "mcu", 0)
+ ROM_FILL(0x00000, 0x10000, 0x00) // Internal rom not yet dumped
+ ROM_LOAD("cdu-75s_1.0j_95.03.14_apple.bin", 0x10000, 0x10000, CRC(f4ad4d48) SHA1(7d674116304bc6948fe4a52d9859b4eb5d40b914))
+ROM_END
+
+const tiny_rom_entry *cdu75s_device::device_rom_region() const
+{
+ return ROM_NAME(cdu75s);
+}
+
+u8 cdu75s_device::jumpers_r()
+{
+ u32 jumpers_id = strtol(owner()->basetag(), nullptr, 16);
+ return (jumpers_id ^ 7) << 1;
+}
+
diff --git a/src/devices/bus/nscsi/cdu75s.h b/src/devices/bus/nscsi/cdu75s.h
new file mode 100644
index 00000000000..b57550f9033
--- /dev/null
+++ b/src/devices/bus/nscsi/cdu75s.h
@@ -0,0 +1,38 @@
+// license:BSD-3-Clause
+// copyright-holders:O. Galibert
+
+#ifndef MAME_BUS_NSCSI_CDU75S_H
+#define MAME_BUS_NSCSI_CDU75S_H
+
+#pragma once
+
+#include "machine/nscsi_bus.h"
+#include "cpu/h8/h83032.h"
+#include "machine/ncr5390.h"
+
+class cdu75s_device : public device_t, public nscsi_slot_card_interface
+{
+public:
+ cdu75s_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
+
+ static constexpr feature_type unemulated_features() { return feature::DISK; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual const tiny_rom_entry *device_rom_region() const override;
+
+private:
+ void mem_map(address_map &map);
+ void io_map(address_map &map);
+
+ required_device<h83032_device> m_mcu;
+ required_device<ncr53c94_device> m_scsi;
+ required_region_ptr<u16> m_rom;
+
+ u8 jumpers_r();
+};
+
+DECLARE_DEVICE_TYPE(CDU75S, cdu75s_device)
+
+#endif // MAME_BUS_NSCSI_CDU75S_H
diff --git a/src/devices/bus/nscsi/devices.cpp b/src/devices/bus/nscsi/devices.cpp
index cc44339902a..98d6db0553a 100644
--- a/src/devices/bus/nscsi/devices.cpp
+++ b/src/devices/bus/nscsi/devices.cpp
@@ -7,6 +7,7 @@
#include "bus/nscsi/cd.h"
#include "bus/nscsi/cdd2000.h"
#include "bus/nscsi/cdrn820s.h"
+#include "bus/nscsi/cdu75s.h"
#include "bus/nscsi/cw7501.h"
#include "bus/nscsi/hd.h"
#include "bus/nscsi/s1410.h"
@@ -21,6 +22,7 @@ void default_scsi_devices(device_slot_interface &device)
device.option_add("cdr4210", CDR4210);
device.option_add("cdrn820s", CDRN820S);
device.option_add("cdd2000", CDD2000);
+ device.option_add("cdu75s", CDU75S);
device.option_add("smoc501", SMOC501);
device.option_add("aplcd150", APPLECD150);
};