mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
(MESS) ql: Added ROM cartridge slot interface. (nw)
This commit is contained in:
parent
10e08f136a
commit
05a0a0fd6d
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -1260,10 +1260,14 @@ 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/rom.c svneol=native#text/plain
|
||||
src/emu/bus/ql/rom.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
|
||||
src/emu/bus/ql/sandy_superqboard.h svneol=native#text/plain
|
||||
src/emu/bus/ql/std.c svneol=native#text/plain
|
||||
src/emu/bus/ql/std.h svneol=native#text/plain
|
||||
src/emu/bus/ql/trumpcard.c svneol=native#text/plain
|
||||
src/emu/bus/ql/trumpcard.h svneol=native#text/plain
|
||||
src/emu/bus/rs232/keyboard.c svneol=native#text/plain
|
||||
|
@ -1148,4 +1148,6 @@ BUSOBJS += $(BUSOBJ)/ql/exp.o
|
||||
BUSOBJS += $(BUSOBJ)/ql/sandy_superdisk.o
|
||||
BUSOBJS += $(BUSOBJ)/ql/sandy_superqboard.o
|
||||
BUSOBJS += $(BUSOBJ)/ql/trumpcard.o
|
||||
BUSOBJS += $(BUSOBJ)/ql/rom.o
|
||||
BUSOBJS += $(BUSOBJ)/ql/std.o
|
||||
endif
|
||||
|
136
src/emu/bus/ql/rom.c
Normal file
136
src/emu/bus/ql/rom.c
Normal file
@ -0,0 +1,136 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Sinclair QL ROM cartridge port emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "rom.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type QL_ROM_CARTRIDGE_SLOT = &device_creator<ql_rom_cartridge_slot_t>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// CARD INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_ql_rom_cartridge_card_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_ql_rom_cartridge_card_interface::device_ql_rom_cartridge_card_interface(const machine_config &mconfig, device_t &device) :
|
||||
device_slot_card_interface(mconfig, device),
|
||||
m_rom(*this, "rom"),
|
||||
m_romoeh(1)
|
||||
{
|
||||
m_slot = dynamic_cast<ql_rom_cartridge_slot_t *>(device.owner());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ~device_ql_rom_cartridge_card_interface - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_ql_rom_cartridge_card_interface::~device_ql_rom_cartridge_card_interface()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// ql_rom_cartridge_slot_t - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
ql_rom_cartridge_slot_t::ql_rom_cartridge_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, QL_ROM_CARTRIDGE_SLOT, "QL ROM cartridge slot", tag, owner, clock, "ql_rom_cartridge_slot", __FILE__),
|
||||
device_slot_interface(mconfig, *this),
|
||||
device_image_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void ql_rom_cartridge_slot_t::device_start()
|
||||
{
|
||||
m_card = dynamic_cast<device_ql_rom_cartridge_card_interface *>(get_card_device());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// call_load -
|
||||
//-------------------------------------------------
|
||||
|
||||
bool ql_rom_cartridge_slot_t::call_load()
|
||||
{
|
||||
if (m_card)
|
||||
{
|
||||
size_t size = 0;
|
||||
|
||||
if (software_entry() == NULL)
|
||||
{
|
||||
size = length();
|
||||
|
||||
m_card->m_rom.allocate(size);
|
||||
fread(m_card->m_rom, size);
|
||||
}
|
||||
else
|
||||
{
|
||||
load_software_region("rom", m_card->m_rom);
|
||||
}
|
||||
}
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// call_softlist_load -
|
||||
//-------------------------------------------------
|
||||
|
||||
bool ql_rom_cartridge_slot_t::call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry)
|
||||
{
|
||||
load_software_part_region(*this, swlist, swname, start_entry);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// get_default_card_software -
|
||||
//-------------------------------------------------
|
||||
|
||||
void ql_rom_cartridge_slot_t::get_default_card_software(astring &result)
|
||||
{
|
||||
software_get_default_slot(result, "standard");
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( ql_rom_cartridge_cards )
|
||||
//-------------------------------------------------
|
||||
|
||||
// slot devices
|
||||
#include "std.h"
|
||||
|
||||
SLOT_INTERFACE_START( ql_rom_cartridge_cards )
|
||||
// the following need ROMs from the software list
|
||||
SLOT_INTERFACE_INTERNAL("standard", QL_STANDARD_ROM_CARTRIDGE)
|
||||
SLOT_INTERFACE_END
|
129
src/emu/bus/ql/rom.h
Normal file
129
src/emu/bus/ql/rom.h
Normal file
@ -0,0 +1,129 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Sinclair QL ROM cartridge port emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
A B
|
||||
* 1 * VDD
|
||||
A12 * 2 * A14
|
||||
A7 * 3 * A13
|
||||
A6 * 4 * A8
|
||||
A5 * 5 * A9
|
||||
SLOT 6 SLOT
|
||||
A4 * 7 * A11
|
||||
A3 * 8 * ROMOEH
|
||||
A2 * 9 * A10
|
||||
A1 * 10 * A15
|
||||
A0 * 11 * D7
|
||||
D0 * 12 * D6
|
||||
D1 * 13 * D5
|
||||
D2 * 14 * D4
|
||||
GND * 15 * D3
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __QL_ROM_CARTRIDGE_SLOT__
|
||||
#define __QL_ROM_CARTRIDGE_SLOT__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_QL_ROM_CARTRIDGE_SLOT_ADD(_tag, _slot_intf, _def_slot) \
|
||||
MCFG_DEVICE_ADD(_tag, QL_ROM_CARTRIDGE_SLOT, 0) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> device_ql_rom_cartridge_card_interface
|
||||
|
||||
class ql_rom_cartridge_slot_t;
|
||||
|
||||
class device_ql_rom_cartridge_card_interface : public device_slot_card_interface
|
||||
{
|
||||
friend class ql_rom_cartridge_slot_t;
|
||||
|
||||
public:
|
||||
// construction/destruction
|
||||
device_ql_rom_cartridge_card_interface(const machine_config &mconfig, device_t &device);
|
||||
virtual ~device_ql_rom_cartridge_card_interface();
|
||||
|
||||
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_rom_cartridge_slot_t *m_slot;
|
||||
|
||||
optional_shared_ptr<UINT8> m_rom;
|
||||
|
||||
int m_romoeh;
|
||||
};
|
||||
|
||||
|
||||
// ======================> ql_rom_cartridge_slot_t
|
||||
|
||||
class ql_rom_cartridge_slot_t : public device_t,
|
||||
public device_slot_interface,
|
||||
public device_image_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
ql_rom_cartridge_slot_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// 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); }
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete() { update_names(); }
|
||||
virtual void device_start();
|
||||
|
||||
// image-level overrides
|
||||
virtual bool call_load();
|
||||
virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry);
|
||||
|
||||
virtual iodevice_t image_type() const { return IO_CARTSLOT; }
|
||||
|
||||
virtual bool is_readable() const { return 1; }
|
||||
virtual bool is_writeable() const { return 0; }
|
||||
virtual bool is_creatable() const { return 0; }
|
||||
virtual bool must_be_loaded() const { return 0; }
|
||||
virtual bool is_reset_on_load() const { return 1; }
|
||||
virtual const char *image_interface() const { return "ql_cart"; }
|
||||
virtual const char *file_extensions() const { return "rom,bin"; }
|
||||
virtual const option_guide *create_option_guide() const { return NULL; }
|
||||
|
||||
// slot interface overrides
|
||||
virtual void get_default_card_software(astring &result);
|
||||
|
||||
device_ql_rom_cartridge_card_interface *m_card;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type QL_ROM_CARTRIDGE_SLOT;
|
||||
|
||||
SLOT_INTERFACE_EXTERN( ql_rom_cartridge_cards );
|
||||
|
||||
|
||||
|
||||
#endif
|
60
src/emu/bus/ql/std.c
Normal file
60
src/emu/bus/ql/std.c
Normal file
@ -0,0 +1,60 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Sinclair QL standard ROM cartridge emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "std.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type QL_STANDARD_ROM_CARTRIDGE = &device_creator<ql_standard_rom_cartridge_t>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// ql_standard_rom_cartridge_t - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
ql_standard_rom_cartridge_t::ql_standard_rom_cartridge_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, QL_STANDARD_ROM_CARTRIDGE, "QL standard ROM cartridge", tag, owner, clock, "ql_standard", __FILE__),
|
||||
device_ql_rom_cartridge_card_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void ql_standard_rom_cartridge_t::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read - cartridge data read
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 ql_standard_rom_cartridge_t::read(address_space &space, offs_t offset, UINT8 data)
|
||||
{
|
||||
if (m_romoeh && m_rom.bytes())
|
||||
{
|
||||
data = m_rom[offset & m_rom.mask()];
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
47
src/emu/bus/ql/std.h
Normal file
47
src/emu/bus/ql/std.h
Normal file
@ -0,0 +1,47 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Curt Coder
|
||||
/**********************************************************************
|
||||
|
||||
Sinclair QL standard ROM cartridge emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __QL_STANDARD_ROM_CARTRIDGE__
|
||||
#define __QL_STANDARD_ROM_CARTRIDGE__
|
||||
|
||||
#include "rom.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> ql_standard_rom_cartridge_t
|
||||
|
||||
class ql_standard_rom_cartridge_t : public device_t,
|
||||
public device_ql_rom_cartridge_card_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
ql_standard_rom_cartridge_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
|
||||
// device_ql_rom_cartridge_card_interface overrides
|
||||
virtual UINT8 read(address_space &space, offs_t offset, UINT8 data);
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type QL_STANDARD_ROM_CARTRIDGE;
|
||||
|
||||
|
||||
#endif
|
@ -1119,6 +1119,8 @@ static MACHINE_CONFIG_START( ql, ql_state )
|
||||
//MCFG_QL_EXPANSION_SLOT_BERRL_CALLBACK()
|
||||
MCFG_QL_EXPANSION_SLOT_EXTINTL_CALLBACK(DEVWRITELINE(ZX8302_TAG, zx8302_device, extint_w))
|
||||
|
||||
MCFG_QL_ROM_CARTRIDGE_SLOT_ADD("rom", ql_rom_cartridge_cards, NULL)
|
||||
|
||||
// cartridge
|
||||
MCFG_CARTSLOT_ADD("cart")
|
||||
MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "emu.h"
|
||||
#include "bus/centronics/ctronics.h"
|
||||
#include "bus/ql/exp.h"
|
||||
#include "bus/ql/rom.h"
|
||||
#include "bus/rs232/rs232.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/mcs48/mcs48.h"
|
||||
|
Loading…
Reference in New Issue
Block a user