mirror of
https://github.com/holub/mame
synced 2025-06-06 04:43:45 +03:00
cms6502: Cleanups and promoted to working.
- Corrected M4 ROM ordering. - Added IEEE controller card.
This commit is contained in:
parent
89edcc3ea4
commit
a1a70c4357
@ -125,6 +125,8 @@ if (BUSES["ACORN"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/acorn/cms/fdc.h",
|
||||
MAME_DIR .. "src/devices/bus/acorn/cms/hires.cpp",
|
||||
MAME_DIR .. "src/devices/bus/acorn/cms/hires.h",
|
||||
MAME_DIR .. "src/devices/bus/acorn/cms/ieee.cpp",
|
||||
MAME_DIR .. "src/devices/bus/acorn/cms/ieee.h",
|
||||
MAME_DIR .. "src/devices/bus/acorn/system/32k.cpp",
|
||||
MAME_DIR .. "src/devices/bus/acorn/system/32k.h",
|
||||
MAME_DIR .. "src/devices/bus/acorn/system/8k.cpp",
|
||||
|
@ -159,6 +159,7 @@ void device_acorn_bus_interface::interface_pre_start()
|
||||
#include "cms/4080term.h"
|
||||
#include "cms/fdc.h"
|
||||
#include "cms/hires.h"
|
||||
#include "cms/ieee.h"
|
||||
|
||||
void acorn_bus_devices(device_slot_interface &device)
|
||||
{
|
||||
@ -187,4 +188,5 @@ void cms_bus_devices(device_slot_interface &device)
|
||||
device.option_add("4080term", CMS_4080TERM); /* CMS 40/80 Video Terminal Card */
|
||||
device.option_add("fdc", CMS_FDC); /* CMS Floppy Disc Controller */
|
||||
device.option_add("hires", CMS_HIRES); /* CMS High Resolution Colour Graphics Card */
|
||||
device.option_add("ieee", CMS_IEEE); /* CMS IEEE Interface */
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ void cms_4080term_device::device_add_mconfig(machine_config &config)
|
||||
m_screen->set_screen_update("ef9345", FUNC(ef9345_device::screen_update));
|
||||
|
||||
GFXDECODE(config, "gfxdecode", "palette", gfx_cms_4080term);
|
||||
PALETTE(config, "palette").set_entries(8);
|
||||
PALETTE(config, "palette", palette_device::RGB_3BIT);
|
||||
|
||||
EF9345(config, m_ef9345, 0);
|
||||
m_ef9345->set_screen("screen");
|
||||
|
@ -24,7 +24,8 @@ DEFINE_DEVICE_TYPE(CMS_FDC, cms_fdc_device, "cms_fdc", "CMS Floppy Disc Controll
|
||||
//-------------------------------------------------
|
||||
|
||||
FLOPPY_FORMATS_MEMBER(cms_fdc_device::floppy_formats )
|
||||
FLOPPY_ACORN_SSD_FORMAT
|
||||
FLOPPY_ACORN_SSD_FORMAT,
|
||||
FLOPPY_ACORN_DSD_FORMAT
|
||||
FLOPPY_FORMATS_END
|
||||
|
||||
static void cms_floppies(device_slot_interface &device)
|
||||
@ -39,14 +40,9 @@ static void cms_floppies(device_slot_interface &device)
|
||||
void cms_fdc_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
WD1770(config, m_fdc, 8_MHz_XTAL);
|
||||
//m_fdc->intrq_wr_callback().set(FUNC(cms_fdc_device::bus_irq_w));
|
||||
//m_fdc->drq_wr_callback().set(FUNC(cms_fdc_device::bus_nmi_w));
|
||||
FLOPPY_CONNECTOR(config, m_floppy[0], cms_floppies, "35dd", floppy_formats);
|
||||
m_floppy[0]->enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, m_floppy[1], cms_floppies, "35dd", floppy_formats);
|
||||
m_floppy[1]->enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, m_floppy[2], cms_floppies, nullptr, floppy_formats);
|
||||
m_floppy[2]->enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, m_floppy[0], cms_floppies, "35dd", floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, m_floppy[1], cms_floppies, "35dd", floppy_formats).enable_sound(true);
|
||||
FLOPPY_CONNECTOR(config, m_floppy[2], cms_floppies, nullptr, floppy_formats).enable_sound(true);
|
||||
}
|
||||
|
||||
|
||||
@ -90,14 +86,13 @@ READ8_MEMBER(cms_fdc_device::wd1770_state_r)
|
||||
|
||||
data |= m_fdc->intrq_r() << 6;
|
||||
data |= m_fdc->drq_r() << 7;
|
||||
logerror("floppy state %02x\n", data);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cms_fdc_device::wd1770_control_w)
|
||||
{
|
||||
floppy_image_device *floppy = nullptr;
|
||||
logerror("floppy control %02x\n", data);
|
||||
|
||||
// bit 0, 1, 2: drive select
|
||||
if (BIT(data, 0)) floppy = m_floppy[0]->get_device();
|
||||
@ -112,13 +107,3 @@ WRITE8_MEMBER(cms_fdc_device::wd1770_control_w)
|
||||
// bit 7: density ??
|
||||
m_fdc->dden_w(BIT(data, 7));
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cms_fdc_device::bus_nmi_w)
|
||||
{
|
||||
m_bus->nmi_w(state);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(cms_fdc_device::bus_irq_w)
|
||||
{
|
||||
m_bus->irq_w(state);
|
||||
}
|
||||
|
@ -41,8 +41,6 @@ protected:
|
||||
private:
|
||||
DECLARE_READ8_MEMBER(wd1770_state_r);
|
||||
DECLARE_WRITE8_MEMBER(wd1770_control_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(bus_irq_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(bus_nmi_w);
|
||||
|
||||
required_device<wd_fdc_device_base> m_fdc;
|
||||
required_device_array<floppy_connector, 3> m_floppy;
|
||||
|
89
src/devices/bus/acorn/cms/ieee.cpp
Normal file
89
src/devices/bus/acorn/cms/ieee.cpp
Normal file
@ -0,0 +1,89 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
CMS IEEE Controller Board
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "ieee.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(CMS_IEEE, cms_ieee_device, "cms_ieee", "CMS IEEE Controller Board");
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
void cms_ieee_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
TMS9914(config, m_tms9914, 4_MHz_XTAL); // TODO: verify clock
|
||||
m_tms9914->int_write_cb().set(FUNC(cms_ieee_device::bus_irq_w));
|
||||
m_tms9914->dio_read_cb().set(IEEE488_TAG, FUNC(ieee488_device::dio_r));
|
||||
m_tms9914->dio_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dio_w));
|
||||
m_tms9914->eoi_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_eoi_w));
|
||||
m_tms9914->dav_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_dav_w));
|
||||
m_tms9914->nrfd_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_nrfd_w));
|
||||
m_tms9914->ndac_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ndac_w));
|
||||
m_tms9914->ifc_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ifc_w));
|
||||
m_tms9914->srq_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_srq_w));
|
||||
m_tms9914->atn_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_atn_w));
|
||||
m_tms9914->ren_write_cb().set(IEEE488_TAG, FUNC(ieee488_device::host_ren_w));
|
||||
|
||||
IEEE488(config, m_ieee);
|
||||
m_ieee->eoi_callback().set(m_tms9914, FUNC(tms9914_device::eoi_w));
|
||||
m_ieee->dav_callback().set(m_tms9914, FUNC(tms9914_device::dav_w));
|
||||
m_ieee->nrfd_callback().set(m_tms9914, FUNC(tms9914_device::nrfd_w));
|
||||
m_ieee->ndac_callback().set(m_tms9914, FUNC(tms9914_device::ndac_w));
|
||||
m_ieee->ifc_callback().set(m_tms9914, FUNC(tms9914_device::ifc_w));
|
||||
m_ieee->srq_callback().set(m_tms9914, FUNC(tms9914_device::srq_w));
|
||||
m_ieee->atn_callback().set(m_tms9914, FUNC(tms9914_device::atn_w));
|
||||
m_ieee->ren_callback().set(m_tms9914, FUNC(tms9914_device::ren_w));
|
||||
IEEE488_SLOT(config, "ieee_dev", 0, cbm_ieee488_devices, nullptr);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// cms_ieee_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
cms_ieee_device::cms_ieee_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, CMS_IEEE, tag, owner, clock)
|
||||
, device_acorn_bus_interface(mconfig, *this)
|
||||
, m_ieee(*this, IEEE488_TAG)
|
||||
, m_tms9914(*this, "hpib")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void cms_ieee_device::device_start()
|
||||
{
|
||||
address_space &space = m_bus->memspace();
|
||||
|
||||
space.install_readwrite_handler(0xfc60, 0xfc6f, read8sm_delegate(*m_tms9914, FUNC(tms9914_device::read)), write8sm_delegate(*m_tms9914, FUNC(tms9914_device::write)));
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
WRITE_LINE_MEMBER(cms_ieee_device::bus_irq_w)
|
||||
{
|
||||
m_bus->irq_w(state);
|
||||
}
|
48
src/devices/bus/acorn/cms/ieee.h
Normal file
48
src/devices/bus/acorn/cms/ieee.h
Normal file
@ -0,0 +1,48 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
CMS IEEE Controller Board
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#ifndef MAME_BUS_ACORN_CMS_IEEE_H
|
||||
#define MAME_BUS_ACORN_CMS_IEEE_H
|
||||
|
||||
#include "bus/acorn/bus.h"
|
||||
#include "bus/ieee488/ieee488.h"
|
||||
#include "machine/tms9914.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class cms_ieee_device:
|
||||
public device_t,
|
||||
public device_acorn_bus_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
cms_ieee_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(bus_irq_w);
|
||||
|
||||
required_device<ieee488_device> m_ieee;
|
||||
required_device<tms9914_device> m_tms9914;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(CMS_IEEE, cms_ieee_device);
|
||||
|
||||
|
||||
#endif /* MAME_BUS_ACORN_CMS_IEEE_H */
|
@ -18,6 +18,30 @@
|
||||
- Analogue Digital Interface Board (CMS00092 A/D I/O)
|
||||
- Floppy Disk Controller
|
||||
|
||||
System I/O Allocation
|
||||
&FA00-&FBFF Advanced graphics card
|
||||
&FC00-&FC0F CPU card VIA
|
||||
&FC10-&FC1F GDP card control register
|
||||
&FC20-&FC2F GDP card colour register
|
||||
&FC30-&FC3F Real-Time-Clock registers
|
||||
&FC40-&FC4F Disc controller registers
|
||||
&FC50-&FC5F Disc controller drive select register
|
||||
&FC60-&FC6F IEEE controller card
|
||||
&FC70-&FC7F Memory select register (on CPU card)
|
||||
&FC80-&FC8F VIA1 on VIB card
|
||||
&FC90-&FC9F VIA2 on VIB card
|
||||
&FCA0-&FCAF VIA3 on VIB card
|
||||
&FCB0-&FCBF VIA4 on VIB card (Printer interface)
|
||||
&FCC0-&FCCF Analogue card ADC
|
||||
&FCD0-&FCDF Analogue card DAC
|
||||
&FCE0-&FCEF Analogue card VIA
|
||||
&FCF0-&FCFF Serial Interface on VIB card
|
||||
&FD00-&FD1F Reserved
|
||||
&FD20-&FD2F 40/80 column card video processor
|
||||
&FD30-&FD3F 40/80 column card VIA (printer interface)
|
||||
&FD40-&FD4F 40/80 column card serial interface
|
||||
&FD50-&FD5F Reserved for future I/O cards
|
||||
|
||||
****************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
@ -40,11 +64,8 @@ public:
|
||||
, m_irqs(*this, "irqs")
|
||||
, m_bus(*this, "bus")
|
||||
, m_map_select(0)
|
||||
, m_page_select(0)
|
||||
{ }
|
||||
|
||||
//DECLARE_INPUT_CHANGED_MEMBER(trigger_reset);
|
||||
|
||||
void cms6502(machine_config &config);
|
||||
|
||||
protected:
|
||||
@ -67,11 +88,10 @@ private:
|
||||
required_device<input_merger_device> m_irqs;
|
||||
required_device<acorn_bus_device> m_bus;
|
||||
|
||||
void cms_bank(address_map &map);
|
||||
void cms6502_mem(address_map &map);
|
||||
|
||||
uint8_t m_map_select;
|
||||
uint8_t m_page_select;
|
||||
uint8_t m_page_select[4];
|
||||
|
||||
uint8_t m_rtc_data[0x10];
|
||||
int m_rtc_reg;
|
||||
@ -101,23 +121,18 @@ void cms_state::cms6502_mem(address_map &map)
|
||||
|
||||
WRITE8_MEMBER(cms_state::map_select_w)
|
||||
{
|
||||
m_map_select = (data & 0x03) << 2;
|
||||
logerror("map select %02x\n", data);
|
||||
//if (m_map_select == 0x00)
|
||||
// m_bank1->set_entry(m_page_select);
|
||||
//else
|
||||
m_bank1->set_entry(m_map_select);
|
||||
m_map_select = data & 0x03;
|
||||
m_bank1->set_entry((m_map_select << 2) | m_page_select[m_map_select]);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(cms_state::page_select_w)
|
||||
{
|
||||
logerror("page select %02x\n", data);
|
||||
m_page_select = data & 0x03;
|
||||
/* 27513 in socket M4 (map 0) */
|
||||
if (m_map_select == 0x00)
|
||||
{
|
||||
m_page_select = data & 0x03;
|
||||
m_bank1->set_entry(m_page_select);
|
||||
m_page_select[m_map_select] = data & 0x03;
|
||||
}
|
||||
m_bank1->set_entry((m_map_select << 2) | m_page_select[m_map_select]);
|
||||
}
|
||||
|
||||
|
||||
@ -137,11 +152,20 @@ void cms_state::machine_start()
|
||||
|
||||
m_rtc_timer = timer_alloc();
|
||||
m_rtc_timer->adjust(attotime::zero, 0, attotime(1, 0));
|
||||
|
||||
/* register for save states */
|
||||
save_item(NAME(m_map_select));
|
||||
save_item(NAME(m_page_select));
|
||||
}
|
||||
|
||||
|
||||
void cms_state::machine_reset()
|
||||
{
|
||||
m_map_select = 0x00;
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
m_page_select[i] = 0x00;
|
||||
}
|
||||
m_bank1->set_entry(0);
|
||||
}
|
||||
|
||||
@ -271,7 +295,6 @@ void cms_state::cms6502(machine_config &config)
|
||||
INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set_inputline(m_maincpu, M6502_IRQ_LINE);
|
||||
|
||||
VIA6522(config, m_via, 1_MHz_XTAL);
|
||||
//m_via->cb2_handler().set(FUNC(cms_state::cass_w));
|
||||
m_via->irq_handler().set("irqs", FUNC(input_merger_device::in_w<0>));
|
||||
|
||||
/* 7 Slot Backplane */
|
||||
@ -300,8 +323,8 @@ ROM_START( cms6502 )
|
||||
/* Socket M4 27513 */
|
||||
ROM_LOAD("basic.m4", 0x00000, 0x4000, CRC(e27b6146) SHA1(ae89ee695bed6f49402f009ded16ad3a36f64c28))
|
||||
ROM_LOAD("dfs-1.4.m4", 0x04000, 0x4000, CRC(0743ddb5) SHA1(cd61956a10510a6954cba9ba17f70c2991e81d9b))
|
||||
ROM_LOAD("simon-2.02.m4", 0x08000, 0x4000, CRC(d1f1b633) SHA1(991c3691a70f45fff3c828c8c0a0906b9f5e34fc))
|
||||
ROM_LOAD("multi-basic.m4", 0x0c000, 0x4000, CRC(fb785563) SHA1(9f97582ba0b82f314008bf95eacb00e7bced3cac))
|
||||
ROM_LOAD("multi-basic.m4", 0x08000, 0x4000, CRC(fb785563) SHA1(9f97582ba0b82f314008bf95eacb00e7bced3cac))
|
||||
ROM_LOAD("simon-2.02.m4", 0x0c000, 0x4000, CRC(d1f1b633) SHA1(991c3691a70f45fff3c828c8c0a0906b9f5e34fc))
|
||||
/* Socket M3 empty */
|
||||
/* Socket M2 27128 */
|
||||
ROM_LOAD("gdp.m2", 0x20000, 0x4000, CRC(f545293b) SHA1(532c45ac4661643c6c6f633d504ef72e800cc900))
|
||||
@ -315,4 +338,4 @@ ROM_END
|
||||
/* Driver */
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1986, cms6502, 0, 0, cms6502, cms, cms_state, empty_init, "Cambridge Microprocessor Systems", "CMS 6502 Development System", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
|
||||
COMP( 1986, cms6502, 0, 0, cms6502, cms, cms_state, empty_init, "Cambridge Microprocessor Systems", "CMS 6502 Development System", MACHINE_NO_SOUND_HW )
|
||||
|
Loading…
Reference in New Issue
Block a user