cw7501, cdr4201: Transform skeleton drivers into SCSI bus devices

This commit is contained in:
AJR 2019-07-11 17:05:05 -04:00
parent 60d4fea8c8
commit 4105acd1ed
8 changed files with 153 additions and 120 deletions

View File

@ -2152,6 +2152,8 @@ if (BUSES["NSCSI"]~=null) then
files {
MAME_DIR .. "src/devices/bus/nscsi/cd.cpp",
MAME_DIR .. "src/devices/bus/nscsi/cd.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",
MAME_DIR .. "src/devices/bus/nscsi/devices.h",
MAME_DIR .. "src/devices/bus/nscsi/hd.cpp",

View File

@ -3885,7 +3885,6 @@ files {
MAME_DIR .. "src/mame/drivers/chaos.cpp",
MAME_DIR .. "src/mame/drivers/cd2650.cpp",
MAME_DIR .. "src/mame/drivers/cdc721.cpp",
MAME_DIR .. "src/mame/drivers/cdr4210.cpp",
MAME_DIR .. "src/mame/drivers/cit101.cpp",
MAME_DIR .. "src/mame/machine/cit101_kbd.cpp",
MAME_DIR .. "src/mame/machine/cit101_kbd.h",

View File

@ -0,0 +1,96 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/*******************************************************************************
Skeleton device for Panasonic CW-7501 CD-R drive and clones.
*******************************************************************************/
#include "emu.h"
#include "bus/nscsi/cw7501.h"
#include "machine/ncr5390.h"
DEFINE_DEVICE_TYPE(CW7501, cw7501_device, "cw7501", "Panasonic CW-7501 CD-R")
DEFINE_DEVICE_TYPE(CDR4210, cdr4210_device, "cdr4210", "Creative Technology Blaster CD-R 4210")
cw7501_device::cw7501_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, type, tag, owner, clock)
, nscsi_slot_card_interface(mconfig, *this, "scsic")
, m_cdcpu(*this, "cdcpu")
{
}
cw7501_device::cw7501_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: cw7501_device(mconfig, CW7501, tag, owner, clock)
{
}
cdr4210_device::cdr4210_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: cw7501_device(mconfig, CDR4210, tag, owner, clock)
{
}
void cw7501_device::device_start()
{
m_mystery_address = 0;
save_item(NAME(m_mystery_address));
}
u8 cw7501_device::mystery_data_r()
{
if (!machine().side_effects_disabled())
logerror("%s: Reading from mystery register #%02X\n", machine().describe_context(), m_mystery_address);
return 0;
}
void cw7501_device::mystery_data_w(u8 data)
{
logerror("%s: Writing %02X to mystery register #%02X\n", machine().describe_context(), data, m_mystery_address);
}
void cw7501_device::mystery_address_w(u8 data)
{
m_mystery_address = data;
}
void cw7501_device::mem_map(address_map &map)
{
map(0x000880, 0x007fff).ram();
map(0x008000, 0x03ffff).rom().region("flash", 0x08000);
map(0x050000, 0x050000).w(FUNC(cw7501_device::mystery_address_w));
map(0x050001, 0x050001).rw(FUNC(cw7501_device::mystery_data_r), FUNC(cw7501_device::mystery_data_w));
map(0x058000, 0x05800f).m("scsic", FUNC(ncr53cf94_device::map));
map(0x060000, 0x060003).noprw(); // ?
}
void cw7501_device::device_add_mconfig(machine_config &config)
{
M37710S4(config, m_cdcpu, 12'500'000); // type and clock are total guesses
m_cdcpu->set_addrmap(AS_PROGRAM, &cw7501_device::mem_map);
NCR53CF94(config, "scsic", 25'000'000); // type and clock guessed
}
ROM_START(cw7501)
ROM_REGION16_LE(0x40000, "flash", 0)
ROM_LOAD("mk200.bin", 0x00000, 0x40000, CRC(12efd802) SHA1(2986ee5eedbe0cb662a9a7e7fa4e6ca7ccd8c539)) // v2.00 (1996)
ROM_END
const tiny_rom_entry *cw7501_device::device_rom_region() const
{
return ROM_NAME(cw7501);
}
ROM_START(cdr4210)
ROM_REGION16_LE(0x40000, "flash", 0)
ROM_LOAD("cr113.bin", 0x00000, 0x40000, CRC(fd2faff9) SHA1(6aafdedf12240ad347427287c0db289f90bd064d)) // v1.13 (1996)
ROM_END
const tiny_rom_entry *cdr4210_device::device_rom_region() const
{
return ROM_NAME(cdr4210);
}
// another clone: Plasmon CDR 4240

View File

@ -0,0 +1,52 @@
// license:BSD-3-Clause
// copyright-holders:AJR
#ifndef MAME_BUS_NSCSI_CW7501
#define MAME_BUS_NSCSI_CW7501 1
#pragma once
#include "cpu/m37710/m37710.h"
#include "machine/nscsi_bus.h"
class cw7501_device : public device_t, public nscsi_slot_card_interface
{
public:
cw7501_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static constexpr feature_type unemulated_features() { return feature::DISK; }
protected:
cw7501_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
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:
u8 mystery_data_r();
void mystery_data_w(u8 data);
void mystery_address_w(u8 data);
void mem_map(address_map &map);
required_device<m37710s4_device> m_cdcpu;
u8 m_mystery_address;
};
class cdr4210_device : public cw7501_device
{
public:
cdr4210_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
static constexpr feature_type unemulated_features() { return feature::DISK; }
protected:
virtual const tiny_rom_entry *device_rom_region() const override;
};
DECLARE_DEVICE_TYPE(CW7501, cw7501_device)
DECLARE_DEVICE_TYPE(CDR4210, cdr4210_device)
#endif // MAME_BUS_NSCSI_CW7501

View File

@ -2,6 +2,7 @@
// copyright-holders:AJR
#include "bus/nscsi/cd.h"
#include "bus/nscsi/cw7501.h"
#include "bus/nscsi/hd.h"
#include "bus/nscsi/s1410.h"
@ -10,4 +11,6 @@ void default_scsi_devices(device_slot_interface &device)
device.option_add("cdrom", NSCSI_CDROM);
device.option_add("harddisk", NSCSI_HARDDISK);
device.option_add("s1410", NSCSI_S1410);
device.option_add("cw7501", CW7501);
device.option_add("cdr4210", CDR4210);
};

View File

@ -1,114 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/*******************************************************************************
Skeleton driver for CDR4210 SCSI CD-R drive by Creative Technology Ltd.
*******************************************************************************/
#include "emu.h"
#include "cpu/m37710/m37710.h"
#include "machine/ncr5390.h"
#include "machine/nscsi_bus.h"
class cdr4210_state : public driver_device
{
public:
cdr4210_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
{
}
void cdr4210(machine_config &config);
protected:
virtual void machine_start() override;
private:
u8 mystery_data_r();
void mystery_data_w(u8 data);
void mystery_address_w(u8 data);
void mem_map(address_map &map);
required_device<m37710s4_device> m_maincpu;
u8 m_mystery_address;
};
void cdr4210_state::machine_start()
{
m_mystery_address = 0;
save_item(NAME(m_mystery_address));
}
u8 cdr4210_state::mystery_data_r()
{
if (!machine().side_effects_disabled())
logerror("%s: Reading from mystery register #%02X\n", machine().describe_context(), m_mystery_address);
return 0;
}
void cdr4210_state::mystery_data_w(u8 data)
{
logerror("%s: Writing %02X to mystery register #%02X\n", machine().describe_context(), data, m_mystery_address);
}
void cdr4210_state::mystery_address_w(u8 data)
{
m_mystery_address = data;
}
void cdr4210_state::mem_map(address_map &map)
{
map(0x000880, 0x007fff).ram();
map(0x008000, 0x03ffff).rom().region("flash", 0x08000);
map(0x050000, 0x050000).w(FUNC(cdr4210_state::mystery_address_w));
map(0x050001, 0x050001).rw(FUNC(cdr4210_state::mystery_data_r), FUNC(cdr4210_state::mystery_data_w));
map(0x058000, 0x05800f).m("scsi:7:scsic", FUNC(ncr53cf94_device::map));
map(0x060000, 0x060003).noprw(); // ?
}
static INPUT_PORTS_START(cdr4210)
INPUT_PORTS_END
static void scsi_devices(device_slot_interface &device)
{
device.option_add_internal("scsic", NCR53CF94).clock(25'000'000); // type guessed
}
void cdr4210_state::cdr4210(machine_config &config)
{
M37710S4(config, m_maincpu, 12'500'000); // type and clock are total guesses
m_maincpu->set_addrmap(AS_PROGRAM, &cdr4210_state::mem_map);
NSCSI_BUS(config, "scsi");
NSCSI_CONNECTOR(config, "scsi:0", scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:1", scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:2", scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:3", scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:4", scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:5", scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:6", scsi_devices, nullptr);
NSCSI_CONNECTOR(config, "scsi:7", scsi_devices, "scsic", true);
}
ROM_START(cdr4210)
ROM_REGION16_LE(0x40000, "flash", 0)
ROM_LOAD("cr113.bin", 0x00000, 0x40000, CRC(fd2faff9) SHA1(6aafdedf12240ad347427287c0db289f90bd064d))
ROM_END
// this should probably be the parent
ROM_START(cw7501)
ROM_REGION16_LE(0x40000, "flash", 0)
ROM_LOAD("mk200.bin", 0x00000, 0x40000, CRC(12efd802) SHA1(2986ee5eedbe0cb662a9a7e7fa4e6ca7ccd8c539))
ROM_END
// another clone: Plasmon CDR 4240
SYST(1996, cdr4210, 0, 0, cdr4210, cdr4210, cdr4210_state, empty_init, "Creative Technology", "CD-R 4210 (v1.13)", MACHINE_IS_SKELETON)
SYST(1996, cw7501, cdr4210, 0, cdr4210, cdr4210, cdr4210_state, empty_init, "Panasonic", "CW-7501 (v2.00)", MACHINE_IS_SKELETON)

View File

@ -9740,10 +9740,6 @@ quizard4 // (c) TAB Austria 1998
quizard4_40 // (c) TAB Austria 1997
quizard4_41 // (c) TAB Austria 1998
@source:cdr4210.cpp
cdr4210 //
cw7501 // 1996 Panasonic
@source:cedar_magnet.cpp
cedmag
mag_time

View File

@ -135,7 +135,6 @@ ccs2810.cpp
ccs300.cpp
cd2650.cpp
cdc721.cpp
cdr4210.cpp
cfx9850.cpp
cgc7900.cpp
cgenie.cpp