New skeleton device: PleXCombo PX-320A DVD/CD-RW Drive [Firmware HQ]

This commit is contained in:
AJR 2019-10-23 21:52:44 -04:00
parent 41a333e791
commit da07c8901b
4 changed files with 145 additions and 0 deletions

View File

@ -306,6 +306,8 @@ if (BUSES["ATA"]~=null) then
MAME_DIR .. "src/devices/bus/ata/cr589.h",
MAME_DIR .. "src/devices/bus/ata/idehd.cpp",
MAME_DIR .. "src/devices/bus/ata/idehd.h",
MAME_DIR .. "src/devices/bus/ata/px320a.cpp",
MAME_DIR .. "src/devices/bus/ata/px320a.h",
}
end

View File

@ -11,6 +11,7 @@
#include "atapicdr.h"
#include "idehd.h"
#include "px320a.h"
//-------------------------------------------------
// device_ata_interface - constructor
@ -68,4 +69,5 @@ void ata_devices(device_slot_interface &device)
{
device.option_add("hdd", IDE_HARDDISK);
device.option_add("cdrom", ATAPI_CDROM);
device.option_add("px320a", PX320A);
}

View File

@ -0,0 +1,99 @@
// license:BSD-3-Clause
// copyright-holders:AJR
/*******************************************************************************
Skeleton device for Plextor PleXCombo PX-320A IDE DVD/CD-RW drive.
*******************************************************************************/
#include "emu.h"
#include "px320a.h"
#include "cpu/fr/fr.h"
DEFINE_DEVICE_TYPE(PX320A, px320a_device, "px320a", "PleXCombo PX-320A CD-RW/DVD-ROM Drive")
px320a_device::px320a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, PX320A, tag, owner, clock)
, device_ata_interface(mconfig, *this)
, m_frcpu(*this, "frcpu")
{
}
void px320a_device::device_start()
{
}
u16 px320a_device::read_dma()
{
return 0;
}
u16 px320a_device::read_cs0(offs_t offset, u16 mem_mask)
{
return 0;
}
u16 px320a_device::read_cs1(offs_t offset, u16 mem_mask)
{
return 0;
}
void px320a_device::write_dma(u16 data)
{
}
void px320a_device::write_cs0(offs_t offset, u16 data, u16 mem_mask)
{
}
void px320a_device::write_cs1(offs_t offset, u16 data, u16 mem_mask)
{
}
WRITE_LINE_MEMBER(px320a_device::write_dmack)
{
}
WRITE_LINE_MEMBER(px320a_device::write_csel)
{
}
WRITE_LINE_MEMBER(px320a_device::write_dasp)
{
}
WRITE_LINE_MEMBER(px320a_device::write_pdiag)
{
}
void px320a_device::frcpu_map(address_map &map)
{
map(0x00080000, 0x000fffff).rom().region("firmware", 0);
}
void px320a_device::device_add_mconfig(machine_config &config)
{
MB91101A(config, m_frcpu, 8000000); // FR type guessed; clock unknown
m_frcpu->set_addrmap(AS_PROGRAM, &px320a_device::frcpu_map);
}
ROM_START(px320a)
ROM_REGION32_BE(0x80000, "firmware", 0)
ROM_SYSTEM_BIOS(0, "v106", "Firmware v1.06")
ROM_LOAD("sapp106.bin", 0x00000, 0x80000, CRC(2ba54c7a) SHA1(032cc5009fe84db902096ea2bb9dc2221601ab20))
ROM_SYSTEM_BIOS(1, "v105", "Firmware v1.05")
ROM_LOAD("sapp105.bin", 0x00000, 0x80000, CRC(3755a053) SHA1(fb966d506edb6e0a97ad64de3898ce9e75e22d7d))
ROM_SYSTEM_BIOS(2, "v104", "Firmware v1.04a")
ROM_LOAD("sapp104.bin", 0x00000, 0x80000, CRC(7197425f) SHA1(0b02508d668439a78ea8e3d97eddf5a3de6e2ba5))
ROM_SYSTEM_BIOS(3, "v103", "Firmware v1.03")
ROM_LOAD("sap1032.bin", 0x00000, 0x80000, CRC(9ff1c729) SHA1(6ed44bf8decaac2ee9127bdd66e0ff1fd52969c3))
ROM_SYSTEM_BIOS(4, "v102", "Firmware v1.02")
ROM_LOAD("sapp102.bin", 0x00000, 0x80000, CRC(9f96bea4) SHA1(5b70f32e83d8c19d2895d38d0f7e15f2eee326fd))
ROM_END
const tiny_rom_entry *px320a_device::device_rom_region() const
{
return ROM_NAME(px320a);
}

View File

@ -0,0 +1,42 @@
// license:BSD-3-Clause
// copyright-holders:AJR
#ifndef MAME_BUS_ATA_PX320A_H
#define MAME_BUS_ATA_PX320A_H
#pragma once
#include "atadev.h"
class px320a_device : public device_t, public device_ata_interface
{
public:
px320a_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;
virtual u16 read_dma() override;
virtual u16 read_cs0(offs_t offset, u16 mem_mask = 0xffff) override;
virtual u16 read_cs1(offs_t offset, u16 mem_mask = 0xffff) override;
virtual void write_dma(u16 data) override;
virtual void write_cs0(offs_t offset, u16 data, u16 mem_mask = 0xffff) override;
virtual void write_cs1(offs_t offset, u16 data, u16 mem_mask = 0xffff) override;
virtual DECLARE_WRITE_LINE_MEMBER(write_dmack) override;
virtual DECLARE_WRITE_LINE_MEMBER(write_csel) override;
virtual DECLARE_WRITE_LINE_MEMBER(write_dasp) override;
virtual DECLARE_WRITE_LINE_MEMBER(write_pdiag) override;
private:
void frcpu_map(address_map &map);
required_device<cpu_device> m_frcpu;
};
DECLARE_DEVICE_TYPE(PX320A, px320a_device)
#endif // MAME_BUS_ATA_PX320A_H