(MESS) ql: Expansion port/floppy WIP. (nw)

This commit is contained in:
Curt Coder 2014-05-25 22:00:17 +00:00
parent c37566ab08
commit 9faffd2067
12 changed files with 237 additions and 192 deletions

2
.gitattributes vendored
View File

@ -1254,8 +1254,6 @@ src/emu/bus/plus4/user.c svneol=native#text/plain
src/emu/bus/plus4/user.h svneol=native#text/plain
src/emu/bus/ql/exp.c svneol=native#text/plain
src/emu/bus/ql/exp.h svneol=native#text/plain
src/emu/bus/ql/qimi.c svneol=native#text/plain
src/emu/bus/ql/qimi.h svneol=native#text/plain
src/emu/bus/ql/sandy_superdisk.c svneol=native#text/plain
src/emu/bus/ql/sandy_superdisk.h svneol=native#text/plain
src/emu/bus/ql/sandy_superqboard.c svneol=native#text/plain

View File

@ -1142,7 +1142,6 @@ endif
ifneq ($(filter QL,$(BUSES)),)
OBJDIRS += $(BUSOBJ)/ql
BUSOBJS += $(BUSOBJ)/ql/exp.o
BUSOBJS += $(BUSOBJ)/ql/qimi.o
BUSOBJS += $(BUSOBJ)/ql/sandy_superdisk.o
BUSOBJS += $(BUSOBJ)/ql/sandy_superqboard.o
BUSOBJS += $(BUSOBJ)/ql/trumpcard.o

View File

@ -77,13 +77,11 @@ void ql_expansion_slot_t::device_start()
//-------------------------------------------------
// slot devices
#include "qimi.h"
#include "sandy_superdisk.h"
#include "sandy_superqboard.h"
#include "trumpcard.h"
SLOT_INTERFACE_START( ql_expansion_cards )
SLOT_INTERFACE("qimi", QIMI)
SLOT_INTERFACE("superdisk", SANDY_SUPER_DISK)
SLOT_INTERFACE("superqboard", SANDY_SUPERQBOARD)
SLOT_INTERFACE("trumpcard", QL_TRUMP_CARD)

View File

@ -93,8 +93,14 @@ public:
// construction/destruction
device_ql_expansion_card_interface(const machine_config &mconfig, device_t &device);
virtual void romoeh_w(int state) { m_romoeh = state; }
virtual UINT8 read(address_space &space, offs_t offset, UINT8 data) { return data; }
virtual void write(address_space &space, offs_t offset, UINT8 data) { }
protected:
ql_expansion_slot_t *m_slot;
int m_romoeh;
};
@ -112,11 +118,21 @@ public:
template<class _Object> static devcb_base &set_berrl_wr_callback(device_t &device, _Object object) { return downcast<ql_expansion_slot_t &>(device).m_write_berrl.set_callback(object); }
template<class _Object> static devcb_base &set_extintl_wr_callback(device_t &device, _Object object) { return downcast<ql_expansion_slot_t &>(device).m_write_extintl.set_callback(object); }
// computer interface
UINT8 read(address_space &space, offs_t offset, UINT8 data) { if (m_card) data = m_card->read(space, offset, data); return data; }
void write(address_space &space, offs_t offset, UINT8 data) { if (m_card) m_card->write(space, offset, data); }
DECLARE_WRITE_LINE_MEMBER( romoeh_w ) { if (m_card) m_card->romoeh_w(state); }
// card interface
DECLARE_WRITE_LINE_MEMBER( ipl0l_w ) { m_write_ipl0l(state); }
DECLARE_WRITE_LINE_MEMBER( ipl1l_w ) { m_write_ipl1l(state); }
DECLARE_WRITE_LINE_MEMBER( berrl_w ) { m_write_berrl(state); }
DECLARE_WRITE_LINE_MEMBER( extintl_w ) { m_write_extintl(state); }
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset() { if (get_card_device()) get_card_device()->reset(); }
devcb_write_line m_write_ipl0l;
devcb_write_line m_write_ipl1l;

View File

@ -1,125 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
QIMI (QL Internal Mouse Interface) emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
**********************************************************************/
#include "qimi.h"
//**************************************************************************
// MACROS/CONSTANTS
//**************************************************************************
#define MOUSEX_TAG "MOUSEX"
#define MOUSEY_TAG "MOUSEY"
#define MOUSEB_TAG "MOUSEB"
// Mouse bits in Sandy port order
#define MOUSE_MIDDLE 0x02
#define MOUSE_RIGHT 0x04
#define MOUSE_LEFT 0x08
#define MOUSE_DIRY 0x10
#define MOUSE_DIRX 0x20
#define MOUSE_INTY 0x40
#define MOUSE_INTX 0x80
#define MOUSE_INT_MASK (MOUSE_INTX | MOUSE_INTY)
//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************
const device_type QIMI = &device_creator<qimi_t>;
//-------------------------------------------------
// MACHINE_CONFIG_FRAGMENT( qimi )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( qimi )
MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
machine_config_constructor qimi_t::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( qimi );
}
//-------------------------------------------------
// INPUT_PORTS( qimi )
//-------------------------------------------------
static INPUT_PORTS_START( qimi )
PORT_START(MOUSEX_TAG)
PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
PORT_START(MOUSEY_TAG)
PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1)
PORT_START(MOUSEB_TAG) /* Mouse buttons */
PORT_BIT( MOUSE_RIGHT, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("Mouse Button 1") PORT_CODE(MOUSECODE_BUTTON1)
PORT_BIT( MOUSE_LEFT, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("Mouse Button 2") PORT_CODE(MOUSECODE_BUTTON2)
PORT_BIT( MOUSE_MIDDLE, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_NAME("Mouse Button 3") PORT_CODE(MOUSECODE_BUTTON3)
INPUT_PORTS_END
//-------------------------------------------------
// input_ports - device-specific input ports
//-------------------------------------------------
ioport_constructor qimi_t::device_input_ports() const
{
return INPUT_PORTS_NAME( qimi );
}
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
// qimi_t - constructor
//-------------------------------------------------
qimi_t::qimi_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, QIMI, "QIMI", tag, owner, clock, "qimi", __FILE__),
device_ql_expansion_card_interface(mconfig, *this),
m_mousex(*this, MOUSEX_TAG),
m_mousey(*this, MOUSEY_TAG),
m_mouseb(*this, MOUSEB_TAG)
{
}
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void qimi_t::device_start()
{
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
void qimi_t::device_reset()
{
}

View File

@ -1,56 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************
QIMI (QL Internal Mouse Interface) emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
**********************************************************************/
#pragma once
#ifndef __QIMI__
#define __QIMI__
#include "exp.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> qimi_device
class qimi_t : public device_t,
public device_ql_expansion_card_interface
{
public:
// construction/destruction
qimi_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// optional information overrides
virtual machine_config_constructor device_mconfig_additions() const;
virtual ioport_constructor device_input_ports() const;
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
// device_ql_expansion_card_interface overrides
private:
required_ioport m_mousex;
required_ioport m_mousey;
required_ioport m_mouseb;
};
// device type definition
extern const device_type QIMI;
#endif

View File

@ -17,6 +17,9 @@
// MACROS/CONSTANTS
//**************************************************************************
#define WD1772_TAG "wd1772"
#define CENTRONICS_TAG "centronics"
//**************************************************************************
@ -46,11 +49,27 @@ const rom_entry *sandy_super_disk_t::device_rom_region() const
}
//-------------------------------------------------
// SLOT_INTERFACE( sandy_super_disk_floppies )
//-------------------------------------------------
static SLOT_INTERFACE_START( sandy_super_disk_floppies )
SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
SLOT_INTERFACE_END
//-------------------------------------------------
// MACHINE_CONFIG_FRAGMENT( sandy_super_disk )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( sandy_super_disk )
MCFG_DEVICE_ADD(WD1772_TAG, WD1772x, 8000000)
//MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(sandy_super_disk_t, fdc_intrq_w))
//MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(sandy_super_disk_t, fdc_drq_w))
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", sandy_super_disk_floppies, "35dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":1", sandy_super_disk_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
MACHINE_CONFIG_END
@ -77,7 +96,8 @@ machine_config_constructor sandy_super_disk_t::device_mconfig_additions() const
sandy_super_disk_t::sandy_super_disk_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, SANDY_SUPER_DISK, "Sandy Super Disk", tag, owner, clock, "sandy_super_disk", __FILE__),
device_ql_expansion_card_interface(mconfig, *this),
m_rom(*this, "rom")
m_rom(*this, "rom"),
m_ram(*this, "ram")
{
}

View File

@ -15,6 +15,7 @@
#define __SANDY_SUPER_DISK__
#include "exp.h"
#include "bus/centronics/ctronics.h"
#include "machine/wd_fdc.h"
@ -45,6 +46,7 @@ protected:
private:
required_memory_region m_rom;
optional_shared_ptr<UINT8> m_ram;
};

View File

@ -2,7 +2,7 @@
// copyright-holders:Curt Coder
/**********************************************************************
Sandy SuperQBoard emulation
Sandy SuperQBoard (with HD upgrade) emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
@ -17,6 +17,10 @@
// MACROS/CONSTANTS
//**************************************************************************
#define WD1772_TAG "ic3"
#define TTL74273_TAG "ic10"
#define CENTRONICS_TAG "j2"
//**************************************************************************
@ -32,7 +36,10 @@ const device_type SANDY_SUPERQBOARD = &device_creator<sandy_superqboard_t>;
ROM_START( sandy_superqboard )
ROM_REGION( 0x8000, "rom", 0 )
ROM_LOAD( "sandy_disk_controller_v1.18y_1984.rom", 0x0000, 0x8000, CRC(d02425be) SHA1(e730576e3e0c6a1acad042c09e15fc62a32d8fbd) )
ROM_LOAD( "sandy_disk_controller_v1.18y_1984.ic2", 0x0000, 0x8000, CRC(d02425be) SHA1(e730576e3e0c6a1acad042c09e15fc62a32d8fbd) )
ROM_REGION( 0x100, "plds", 0 )
ROM_LOAD( "gal16v8.ic5", 0x000, 0x000, NO_DUMP )
ROM_END
@ -46,11 +53,38 @@ const rom_entry *sandy_superqboard_t::device_rom_region() const
}
//-------------------------------------------------
// SLOT_INTERFACE( sandy_superqboard_floppies )
//-------------------------------------------------
static SLOT_INTERFACE_START( sandy_superqboard_floppies )
SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
SLOT_INTERFACE( "35hd", FLOPPY_35_HD )
SLOT_INTERFACE_END
//-------------------------------------------------
// centronics
//-------------------------------------------------
WRITE_LINE_MEMBER( sandy_superqboard_t::busy_w )
{
m_busy = state;
}
//-------------------------------------------------
// MACHINE_CONFIG_FRAGMENT( sandy_superqboard )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( sandy_superqboard )
MCFG_DEVICE_ADD(WD1772_TAG, WD1772x, XTAL_16MHz/2)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", sandy_superqboard_floppies, "35dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":1", sandy_superqboard_floppies, NULL, floppy_image_device::default_floppy_formats)
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_printers, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(sandy_superqboard_t, busy_w))
MCFG_CENTRONICS_OUTPUT_LATCH_ADD(TTL74273_TAG, CENTRONICS_TAG)
MACHINE_CONFIG_END
@ -77,7 +111,16 @@ machine_config_constructor sandy_superqboard_t::device_mconfig_additions() const
sandy_superqboard_t::sandy_superqboard_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, SANDY_SUPERQBOARD, "SANDY_SUPERQBOARD", tag, owner, clock, "sandy_superqboard", __FILE__),
device_ql_expansion_card_interface(mconfig, *this),
m_rom(*this, "rom")
m_fdc(*this, WD1772_TAG),
m_floppy0(*this, WD1772_TAG":0"),
m_floppy1(*this, WD1772_TAG":1"),
m_centronics(*this, CENTRONICS_TAG),
m_latch(*this, TTL74273_TAG),
m_rom(*this, "rom"),
m_ram(*this, "ram"),
m_busy(1),
m_int2(0),
m_int3(0)
{
}
@ -97,4 +140,117 @@ void sandy_superqboard_t::device_start()
void sandy_superqboard_t::device_reset()
{
m_fdc->reset();
m_latch->write(0);
m_int2 = 0;
m_int3 = 0;
}
//-------------------------------------------------
// read -
//-------------------------------------------------
UINT8 sandy_superqboard_t::read(address_space &space, offs_t offset, UINT8 data)
{
switch ((offset >> 2) & 0x03)
{
case 0:
data = m_fdc->read(space, offset & 0x03);
break;
case 3:
/*
bit description
0 BUSY
1 mouse pin 8
2 mouse pin 1
3 mouse pin 2
4 mouse pin 4 flip-flop Q
5 mouse pin 3 flip-flop Q
6 INT3
7 INT2
*/
data = m_busy;
data |= m_int3 << 6;
data |= m_int2 << 7;
break;
}
return data;
}
//-------------------------------------------------
// write -
//-------------------------------------------------
void sandy_superqboard_t::write(address_space &space, offs_t offset, UINT8 data)
{
switch ((offset >> 2) & 0x03)
{
case 0:
m_fdc->write(space, offset & 0x03, data);
break;
case 1:
{
/*
bit description
0 SIDE ONE
1 DSEL0
2 DSEL1
3 M ON0
4 /DDEN
5 STROBE inverted
6 GAL pin 11
7 GAL pin 9
*/
floppy_image_device *floppy = NULL;
if (BIT(data, 1))
{
floppy = m_floppy0->get_device();
}
else if (BIT(data, 2))
{
floppy = m_floppy1->get_device();
}
m_fdc->set_floppy(floppy);
if (floppy)
{
floppy->ss_w(BIT(data, 0));
floppy->mon_w(BIT(data, 3));
}
m_fdc->dden_w(BIT(data, 4));
m_centronics->write_strobe(!BIT(data, 5));
}
break;
case 2:
m_latch->write(data);
break;
case 4:
m_int2 = 0;
m_int3 = 0;
break;
case 5:
m_fdc->set_unscaled_clock(XTAL_16MHz >> !BIT(data, 0));
break;
}
}

View File

@ -2,7 +2,7 @@
// copyright-holders:Curt Coder
/**********************************************************************
Sandy SuperQBoard emulation
Sandy SuperQBoard (with HD upgrade) emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
@ -37,15 +37,29 @@ public:
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
WRITE_LINE_MEMBER( busy_w );
protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
// device_ql_expansion_card_interface overrides
virtual UINT8 read(address_space &space, offs_t offset, UINT8 data);
virtual void write(address_space &space, offs_t offset, UINT8 data);
private:
required_device<wd1772_t> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<centronics_device> m_centronics;
required_device<output_latch_device> m_latch;
required_memory_region m_rom;
optional_shared_ptr<UINT8> m_ram;
int m_busy;
int m_int2;
int m_int3;
};

View File

@ -17,6 +17,8 @@
// MACROS/CONSTANTS
//**************************************************************************
#define WD1772_TAG "wd1772"
//**************************************************************************
@ -33,6 +35,10 @@ const device_type QL_TRUMP_CARD = &device_creator<ql_trump_card_t>;
ROM_START( ql_trump_card )
ROM_REGION( 0x8000, "rom", 0 )
ROM_LOAD( "trumpcard-125.rom", 0x0000, 0x8000, CRC(938eaa46) SHA1(9b3458cf3a279ed86ba395dc45c8f26939d6c44d) )
ROM_REGION( 0x100, "plds", 0 )
ROM_LOAD( "1u4", 0x000, 0x000, NO_DUMP )
ROM_LOAD( "2u4", 0x000, 0x000, NO_DUMP )
ROM_END
@ -46,11 +52,25 @@ const rom_entry *ql_trump_card_t::device_rom_region() const
}
//-------------------------------------------------
// SLOT_INTERFACE( ql_trump_card_floppies )
//-------------------------------------------------
static SLOT_INTERFACE_START( ql_trump_card_floppies )
SLOT_INTERFACE( "35dd", FLOPPY_35_DD )
SLOT_INTERFACE_END
//-------------------------------------------------
// MACHINE_CONFIG_FRAGMENT( ql_trump_card )
//-------------------------------------------------
static MACHINE_CONFIG_FRAGMENT( ql_trump_card )
MCFG_DEVICE_ADD(WD1772_TAG, WD1772x, 8000000)
//MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(ql_trump_card_t, fdc_intrq_w))
//MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(ql_trump_card_t, fdc_drq_w))
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":0", ql_trump_card_floppies, "35dd", floppy_image_device::default_floppy_formats)
MCFG_FLOPPY_DRIVE_ADD(WD1772_TAG":1", ql_trump_card_floppies, NULL, floppy_image_device::default_floppy_formats)
MACHINE_CONFIG_END
@ -77,7 +97,8 @@ machine_config_constructor ql_trump_card_t::device_mconfig_additions() const
ql_trump_card_t::ql_trump_card_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, QL_TRUMP_CARD, "QL Trump Card", tag, owner, clock, "ql_trump_card", __FILE__),
device_ql_expansion_card_interface(mconfig, *this),
m_rom(*this, "rom")
m_rom(*this, "rom"),
m_ram(*this, "ram")
{
}

View File

@ -15,6 +15,7 @@
#define __QL_TRUMP_CARD__
#include "exp.h"
#include "machine/wd_fdc.h"
@ -44,6 +45,7 @@ protected:
private:
required_memory_region m_rom;
optional_shared_ptr<UINT8> m_ram;
};