mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
bbcb: Added Computer Village 1797 FDC (LVL Dos), not working.
This commit is contained in:
parent
e0321d67e6
commit
780340b355
@ -232,6 +232,8 @@ if (BUSES["BBC_FDC"]~=null) then
|
|||||||
MAME_DIR .. "src/devices/bus/bbc/fdc/acorn.h",
|
MAME_DIR .. "src/devices/bus/bbc/fdc/acorn.h",
|
||||||
MAME_DIR .. "src/devices/bus/bbc/fdc/cumana.cpp",
|
MAME_DIR .. "src/devices/bus/bbc/fdc/cumana.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/bbc/fdc/cumana.h",
|
MAME_DIR .. "src/devices/bus/bbc/fdc/cumana.h",
|
||||||
|
MAME_DIR .. "src/devices/bus/bbc/fdc/cv1797.cpp",
|
||||||
|
MAME_DIR .. "src/devices/bus/bbc/fdc/cv1797.h",
|
||||||
MAME_DIR .. "src/devices/bus/bbc/fdc/opus.cpp",
|
MAME_DIR .. "src/devices/bus/bbc/fdc/opus.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/bbc/fdc/opus.h",
|
MAME_DIR .. "src/devices/bus/bbc/fdc/opus.h",
|
||||||
MAME_DIR .. "src/devices/bus/bbc/fdc/watford.cpp",
|
MAME_DIR .. "src/devices/bus/bbc/fdc/watford.cpp",
|
||||||
|
160
src/devices/bus/bbc/fdc/cv1797.cpp
Normal file
160
src/devices/bus/bbc/fdc/cv1797.cpp
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nigel Barnes
|
||||||
|
/**********************************************************************
|
||||||
|
|
||||||
|
Computer Village 1797 FDC
|
||||||
|
|
||||||
|
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/ComputerVillage_FDC.html
|
||||||
|
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "cv1797.h"
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// DEVICE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
DEFINE_DEVICE_TYPE(BBC_CV1797, bbc_cv1797_device, "bbc_cv1797", "Computer Village 1797 FDC")
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// MACHINE_DRIVER( cv1797 )
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
FLOPPY_FORMATS_MEMBER( bbc_cv1797_device::floppy_formats )
|
||||||
|
FLOPPY_ACORN_SSD_FORMAT,
|
||||||
|
FLOPPY_ACORN_DSD_FORMAT,
|
||||||
|
FLOPPY_FSD_FORMAT
|
||||||
|
FLOPPY_FORMATS_END0
|
||||||
|
|
||||||
|
static SLOT_INTERFACE_START( bbc_floppies_525 )
|
||||||
|
SLOT_INTERFACE("525sssd", FLOPPY_525_SSSD)
|
||||||
|
SLOT_INTERFACE("525sd", FLOPPY_525_SD)
|
||||||
|
SLOT_INTERFACE("525ssdd", FLOPPY_525_SSDD)
|
||||||
|
SLOT_INTERFACE("525dd", FLOPPY_525_DD)
|
||||||
|
SLOT_INTERFACE("525qd", FLOPPY_525_QD)
|
||||||
|
SLOT_INTERFACE_END
|
||||||
|
|
||||||
|
ROM_START( cv1797 )
|
||||||
|
ROM_REGION(0x4000, "dfs_rom", 0)
|
||||||
|
ROM_DEFAULT_BIOS("lvldos")
|
||||||
|
ROM_SYSTEM_BIOS(0, "lvldos", "LVL Dos 0.91")
|
||||||
|
ROMX_LOAD("lvldos91.rom", 0x0000, 0x2000, CRC(69d7653a) SHA1(9cd39d011290b97d5ba05b6c745689a8553be5fc), ROM_BIOS(1))
|
||||||
|
ROM_RELOAD(0x2000, 0x2000)
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_add_mconfig - add device configuration
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
MACHINE_CONFIG_MEMBER( bbc_cv1797_device::device_add_mconfig )
|
||||||
|
MCFG_FD1797_ADD("fd1797", XTAL_8MHz / 8)
|
||||||
|
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(bbc_cv1797_device, fdc_intrq_w))
|
||||||
|
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(bbc_cv1797_device, fdc_drq_w))
|
||||||
|
MCFG_WD_FDC_HLD_CALLBACK(WRITELINE(bbc_cv1797_device, motor_w))
|
||||||
|
MCFG_FLOPPY_DRIVE_ADD("fd1797:0", bbc_floppies_525, "525qd", floppy_formats)
|
||||||
|
MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||||
|
MCFG_FLOPPY_DRIVE_ADD("fd1797:1", bbc_floppies_525, "525qd", floppy_formats)
|
||||||
|
MCFG_FLOPPY_DRIVE_SOUND(true)
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
const tiny_rom_entry *bbc_cv1797_device::device_rom_region() const
|
||||||
|
{
|
||||||
|
return ROM_NAME( cv1797 );
|
||||||
|
}
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// LIVE DEVICE
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// bbc_cv1797_device - constructor
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
bbc_cv1797_device::bbc_cv1797_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||||
|
: device_t(mconfig, BBC_CV1797, tag, owner, clock),
|
||||||
|
device_bbc_fdc_interface(mconfig, *this),
|
||||||
|
m_dfs_rom(*this, "dfs_rom"),
|
||||||
|
m_fdc(*this, "fd1797"),
|
||||||
|
m_floppy0(*this, "fd1797:0"),
|
||||||
|
m_floppy1(*this, "fd1797:1")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_start - device-specific startup
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void bbc_cv1797_device::device_start()
|
||||||
|
{
|
||||||
|
device_t* cpu = machine().device("maincpu");
|
||||||
|
address_space& space = cpu->memory().space(AS_PROGRAM);
|
||||||
|
m_slot = dynamic_cast<bbc_fdc_slot_device *>(owner());
|
||||||
|
|
||||||
|
space.install_readwrite_handler(0xfe80, 0xfe80, read8_delegate(FUNC(fd1797_device::read), (fd1797_device *)m_fdc), write8_delegate(FUNC(fd1797_device::write), (fd1797_device *)m_fdc));
|
||||||
|
space.install_readwrite_handler(0xfe84, 0xfe9f, read8_delegate(FUNC(bbc_cv1797_device::fd1797l_read), this), write8_delegate(FUNC(bbc_cv1797_device::fd1797l_write), this));
|
||||||
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// device_reset - device-specific reset
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void bbc_cv1797_device::device_reset()
|
||||||
|
{
|
||||||
|
machine().root_device().membank("bank4")->configure_entry(12, memregion("dfs_rom")->base());
|
||||||
|
|
||||||
|
m_fdc->soft_reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// IMPLEMENTATION
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
READ8_MEMBER(bbc_cv1797_device::fd1797l_read)
|
||||||
|
{
|
||||||
|
return m_drive_control;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(bbc_cv1797_device::fd1797l_write)
|
||||||
|
{
|
||||||
|
floppy_image_device *floppy = nullptr;
|
||||||
|
|
||||||
|
m_drive_control = data;
|
||||||
|
logerror("fdc: Drive control %02x\n", data);
|
||||||
|
// bit 0: drive select
|
||||||
|
floppy_image_device *floppy0 = m_floppy0->get_device();
|
||||||
|
floppy_image_device *floppy1 = m_floppy1->get_device();
|
||||||
|
floppy = (BIT(data, 0) ? floppy1 : floppy0);
|
||||||
|
m_fdc->set_floppy(floppy);
|
||||||
|
|
||||||
|
// bit 1: side select
|
||||||
|
if (floppy)
|
||||||
|
floppy->ss_w(BIT(data, 1));
|
||||||
|
|
||||||
|
// bit 2: density
|
||||||
|
m_fdc->dden_w(BIT(data, 2));
|
||||||
|
|
||||||
|
// bit 6: reset
|
||||||
|
//if (BIT(data, 6)) m_fdc->soft_reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(bbc_cv1797_device::fdc_intrq_w)
|
||||||
|
{
|
||||||
|
m_slot->intrq_w(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(bbc_cv1797_device::fdc_drq_w)
|
||||||
|
{
|
||||||
|
m_slot->drq_w(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(bbc_cv1797_device::motor_w)
|
||||||
|
{
|
||||||
|
if (m_floppy0->get_device()) m_floppy0->get_device()->mon_w(!state);
|
||||||
|
if (m_floppy1->get_device()) m_floppy1->get_device()->mon_w(!state);
|
||||||
|
}
|
66
src/devices/bus/bbc/fdc/cv1797.h
Normal file
66
src/devices/bus/bbc/fdc/cv1797.h
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Nigel Barnes
|
||||||
|
/**********************************************************************
|
||||||
|
|
||||||
|
Computer Village 1797 FDC
|
||||||
|
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef MAME_BUS_BBC_FDC_CV1797_H
|
||||||
|
#define MAME_BUS_BBC_FDC_CV1797_H
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "fdc.h"
|
||||||
|
#include "machine/wd_fdc.h"
|
||||||
|
#include "formats/acorn_dsk.h"
|
||||||
|
#include "formats/fsd_dsk.h"
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
class bbc_cv1797_device :
|
||||||
|
public device_t,
|
||||||
|
public device_bbc_fdc_interface
|
||||||
|
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static constexpr feature_type imperfect_features() { return feature::DISK; }
|
||||||
|
|
||||||
|
// construction/destruction
|
||||||
|
bbc_cv1797_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual void device_start() override;
|
||||||
|
virtual void device_reset() override;
|
||||||
|
|
||||||
|
// optional information overrides
|
||||||
|
virtual void device_add_mconfig(machine_config &config) override;
|
||||||
|
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
DECLARE_FLOPPY_FORMATS(floppy_formats);
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER(fd1797l_read);
|
||||||
|
DECLARE_WRITE8_MEMBER(fd1797l_write);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(fdc_drq_w);
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(motor_w);
|
||||||
|
|
||||||
|
required_memory_region m_dfs_rom;
|
||||||
|
required_device<fd1797_device> m_fdc;
|
||||||
|
required_device<floppy_connector> m_floppy0;
|
||||||
|
optional_device<floppy_connector> m_floppy1;
|
||||||
|
|
||||||
|
int m_drive_control;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// device type definition
|
||||||
|
DECLARE_DEVICE_TYPE(BBC_CV1797, bbc_cv1797_device)
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* MAME_BUS_BBC_FDC_CV1797_H */
|
@ -102,7 +102,7 @@ void bbc_fdc_slot_device::device_reset()
|
|||||||
// slot devices
|
// slot devices
|
||||||
#include "acorn.h"
|
#include "acorn.h"
|
||||||
#include "cumana.h"
|
#include "cumana.h"
|
||||||
//#include "cv1797.h"
|
#include "cv1797.h"
|
||||||
//#include "microware.h"
|
//#include "microware.h"
|
||||||
#include "opus.h"
|
#include "opus.h"
|
||||||
//#include "solidisk.h"
|
//#include "solidisk.h"
|
||||||
@ -115,7 +115,7 @@ SLOT_INTERFACE_START( bbc_fdc_devices )
|
|||||||
SLOT_INTERFACE("acorn1770", BBC_ACORN1770)
|
SLOT_INTERFACE("acorn1770", BBC_ACORN1770)
|
||||||
SLOT_INTERFACE("cumana1", BBC_CUMANA1)
|
SLOT_INTERFACE("cumana1", BBC_CUMANA1)
|
||||||
SLOT_INTERFACE("cumana2", BBC_CUMANA2)
|
SLOT_INTERFACE("cumana2", BBC_CUMANA2)
|
||||||
//SLOT_INTERFACE("cv1797", BBC_CV1797)
|
SLOT_INTERFACE("cv1797", BBC_CV1797)
|
||||||
//SLOT_INTERFACE("microware", BBC_MICROWARE)
|
//SLOT_INTERFACE("microware", BBC_MICROWARE)
|
||||||
SLOT_INTERFACE("opus8272", BBC_OPUS8272)
|
SLOT_INTERFACE("opus8272", BBC_OPUS8272)
|
||||||
SLOT_INTERFACE("opus2791", BBC_OPUS2791)
|
SLOT_INTERFACE("opus2791", BBC_OPUS2791)
|
||||||
|
Loading…
Reference in New Issue
Block a user