nscsi: Add dump and skeleton device for Sony CDU561-25 CD-ROM drive [Bitsavers]

This commit is contained in:
AJR 2021-04-16 15:19:23 -04:00
parent 27d77ba197
commit 56ea894a84
6 changed files with 153 additions and 0 deletions

View File

@ -2507,6 +2507,8 @@ if (BUSES["NSCSI"]~=null) then
MAME_DIR .. "src/devices/bus/nscsi/cdu75s.h",
MAME_DIR .. "src/devices/bus/nscsi/cdu415.cpp",
MAME_DIR .. "src/devices/bus/nscsi/cdu415.h",
MAME_DIR .. "src/devices/bus/nscsi/cdu561.cpp",
MAME_DIR .. "src/devices/bus/nscsi/cdu561.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",

View File

@ -0,0 +1,84 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/*******************************************************************************
Skeleton device for Sony CDU561-52 CD-ROM drive.
PCB: MAIN 1-644-812-13
Microcontroller:
- Mitsubishi M37732S4AFP
Memories:
- TI TMS27C010A-12 EPROM or equivalent
- Mosel MS62256CLL-10FC or Sony CXK58257AM-10L 32,768x8 Static RAM
- Mosel MS514256A-70VC 262,144x4 Fast Page Mode DRAM (x2; near CXD1198)
- Fujitsu MB81C79A-45 or Sony CXK5971AM-35 8,192x9 Static RAM (near CXD1186)
Other major digital ICs:
- Sony CXD1185CQ SCSI Controller
- Sony CXD1186Q CD-ROM Decoder
- Sony CXD1198AQ CD-ROM Subcode Decoder
- Sony CXD2500BQ CD Digital Signal Processor
- Sony CXD2568M
- Sony CXD8416Q
Linear ICs:
- Sony CXA1372AQ RF Signal Processing Servo Amplifier for CD Player
- Sony CXA1571M RF Amplifier for CD Player
- Toshiba TA8406P Dual Power Operational Amplifier (x3)
XTALs:
- D169 (near CXD2500B)
- 24.00MX (near CXD1198)
*******************************************************************************/
#include "emu.h"
#include "cdu561.h"
#include "cpu/m37710/m37710.h"
#include "machine/cxd1185.h"
DEFINE_DEVICE_TYPE(CDU561_25, cdu561_25_device, "cdu561_25", "Sony CDU561-25")
cdu561_25_device::cdu561_25_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, CDU561_25, tag, owner, clock)
, nscsi_slot_card_interface(mconfig, *this, "scsic")
{
}
void cdu561_25_device::device_start()
{
}
void cdu561_25_device::mem_map(address_map &map)
{
map(0x000880, 0x007fff).ram();
map(0x008000, 0x01ffff).rom().region("eprom", 0x8000);
map(0x020000, 0x02ffff).rom().region("eprom", 0);
map(0x030000, 0x03000f).noprw(); // CXD1186?
map(0x050000, 0x05000f).m("scsic", FUNC(cxd1185_device::map));
map(0x070000, 0x070001).nopr(); // ?
}
void cdu561_25_device::device_add_mconfig(machine_config &config)
{
m37732s4_device &mcu(M37732S4(config, "mcu", 24_MHz_XTAL / 2));
mcu.set_addrmap(AS_PROGRAM, &cdu561_25_device::mem_map);
CXD1185(config, "scsic", 24_MHz_XTAL / 2);
}
ROM_START(cdu561_25)
ROM_REGION16_LE(0x20000, "eprom", 0)
ROM_SYSTEM_BIOS(0, "19a", "apl1.9a")
ROMX_LOAD("apl1.9a_83fb.ic302", 0x00000, 0x20000, CRC(0efc50eb) SHA1(8bfd6ebc0863017914808e8282a5914cdc828f56), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "18f", "apl1.8F")
ROMX_LOAD("apl1.8f_d905.ic302", 0x00000, 0x20000, CRC(3ea92e48) SHA1(2f409fd59c5f09d22e00b39f4b0b57e16316090d), ROM_BIOS(1))
ROM_END
const tiny_rom_entry *cdu561_25_device::device_rom_region() const
{
return ROM_NAME(cdu561_25);
}

View File

@ -0,0 +1,29 @@
// license:BSD-3-Clause
// copyright-holders:AJR
#ifndef MAME_BUS_NSCSI_CDU561_H
#define MAME_BUS_NSCSI_CDU561_H
#pragma once
#include "machine/nscsi_bus.h"
class cdu561_25_device : public device_t, public nscsi_slot_card_interface
{
public:
cdu561_25_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);
};
DECLARE_DEVICE_TYPE(CDU561_25, cdu561_25_device)
#endif // MAME_BUS_NSCSI_CDU561_25_H

View File

@ -9,6 +9,7 @@
#include "bus/nscsi/cdrn820s.h"
#include "bus/nscsi/cdu75s.h"
#include "bus/nscsi/cdu415.h"
#include "bus/nscsi/cdu561.h"
#include "bus/nscsi/cw7501.h"
#include "bus/nscsi/hd.h"
#include "bus/nscsi/s1410.h"
@ -25,6 +26,7 @@ void default_scsi_devices(device_slot_interface &device)
device.option_add("cdd2000", CDD2000);
device.option_add("cdu75s", CDU75S);
device.option_add("cdu415", CDU415);
device.option_add("cdu561_25", CDU561_25);
device.option_add("smoc501", SMOC501);
device.option_add("aplcd150", APPLECD150);
};

View File

@ -83,6 +83,7 @@ DEFINE_DEVICE_TYPE(M37702S1, m37702s1_device, "m37702s1", "Mitsubishi M37702S1")
DEFINE_DEVICE_TYPE(M37710S4, m37710s4_device, "m37710s4", "Mitsubishi M37710S4")
DEFINE_DEVICE_TYPE(M37720S1, m37720s1_device, "m37720s1", "Mitsubishi M37720S1")
DEFINE_DEVICE_TYPE(M37730S2, m37730s2_device, "m37730s2", "Mitsubishi M37730S2")
DEFINE_DEVICE_TYPE(M37732S4, m37732s4_device, "m37732s4", "Mitsubishi M37732S4")
// On-board RAM, ROM, and peripherals
@ -311,6 +312,26 @@ void m37730s2_device::map(address_map &map)
map(0x000080, 0x00047f).ram();
}
// M37732S4: 2048 bytes internal RAM, no internal ROM
void m37732s4_device::map(address_map &map)
{
map(0x000000, 0x000001).noprw();
map(0x00000a, 0x00007f).noprw();
map(0x00000a, 0x000015).rw(FUNC(m37732s4_device::port_r<4>), FUNC(m37732s4_device::port_w<4>)).umask16(0x00ff);
map(0x00000a, 0x00000d).rw(FUNC(m37732s4_device::port_r<5>), FUNC(m37732s4_device::port_w<5>)).umask16(0xff00);
map(0x00005e, 0x00005e).rw(FUNC(m37732s4_device::proc_mode_r), FUNC(m37732s4_device::proc_mode_w));
map(0x000060, 0x000060).w(FUNC(m37732s4_device::watchdog_timer_w));
map(0x000061, 0x000061).rw(FUNC(m37732s4_device::watchdog_freq_r), FUNC(m37732s4_device::watchdog_freq_w));
map(0x000062, 0x000062).rw(FUNC(m37732s4_device::waveform_mode_r), FUNC(m37732s4_device::waveform_mode_w));
map(0x000064, 0x000065).w(FUNC(m37732s4_device::pulse_output_w));
ad_register_map(map);
uart0_register_map(map);
uart1_register_map(map);
timer_register_map(map);
irq_register_map(map);
map(0x000080, 0x00087f).ram();
}
// many other combinations of RAM and ROM size exist
@ -357,6 +378,11 @@ m37730s2_device::m37730s2_device(const machine_config &mconfig, const char *tag,
{
}
m37732s4_device::m37732s4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: m37710_cpu_device(mconfig, M37732S4, tag, owner, clock, address_map_constructor(FUNC(m37732s4_device::map), this))
{
}
std::vector<std::pair<int, const address_space_config *>> m37710_cpu_device::memory_space_config() const
{
return std::vector<std::pair<int, const address_space_config *>> {

View File

@ -2186,11 +2186,21 @@ protected:
void map(address_map &map);
};
class m37732s4_device : public m37710_cpu_device
{
public:
// construction/destruction
m37732s4_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
void map(address_map &map);
};
DECLARE_DEVICE_TYPE(M37702M2, m37702m2_device)
DECLARE_DEVICE_TYPE(M37702S1, m37702s1_device)
DECLARE_DEVICE_TYPE(M37710S4, m37710s4_device)
DECLARE_DEVICE_TYPE(M37720S1, m37720s1_device)
DECLARE_DEVICE_TYPE(M37730S2, m37730s2_device)
DECLARE_DEVICE_TYPE(M37732S4, m37732s4_device)
/* ======================================================================== */