bbcb: Added Computer Village 1797 FDC (LVL Dos), not working.

This commit is contained in:
Nigel Barnes 2017-11-06 19:17:49 +00:00
parent e0321d67e6
commit 780340b355
4 changed files with 230 additions and 2 deletions

View File

@ -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/cumana.cpp",
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.h",
MAME_DIR .. "src/devices/bus/bbc/fdc/watford.cpp",

View 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);
}

View 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 */

View File

@ -102,7 +102,7 @@ void bbc_fdc_slot_device::device_reset()
// slot devices
#include "acorn.h"
#include "cumana.h"
//#include "cv1797.h"
#include "cv1797.h"
//#include "microware.h"
#include "opus.h"
//#include "solidisk.h"
@ -115,7 +115,7 @@ SLOT_INTERFACE_START( bbc_fdc_devices )
SLOT_INTERFACE("acorn1770", BBC_ACORN1770)
SLOT_INTERFACE("cumana1", BBC_CUMANA1)
SLOT_INTERFACE("cumana2", BBC_CUMANA2)
//SLOT_INTERFACE("cv1797", BBC_CV1797)
SLOT_INTERFACE("cv1797", BBC_CV1797)
//SLOT_INTERFACE("microware", BBC_MICROWARE)
SLOT_INTERFACE("opus8272", BBC_OPUS8272)
SLOT_INTERFACE("opus2791", BBC_OPUS2791)