mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
(MESS) bw2: Added expansion slot interface and RAMCARD expansion device. [Curt Coder]
This commit is contained in:
parent
51346049f6
commit
954c61d7c8
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -6641,6 +6641,10 @@ src/mess/machine/bebox.c svneol=native#text/plain
|
||||
src/mess/machine/beta.c svneol=native#text/plain
|
||||
src/mess/machine/beta.h svneol=native#text/plain
|
||||
src/mess/machine/bk.c svneol=native#text/plain
|
||||
src/mess/machine/bw2_ramcard.c svneol=native#text/plain
|
||||
src/mess/machine/bw2_ramcard.h svneol=native#text/plain
|
||||
src/mess/machine/bw2exp.c svneol=native#text/plain
|
||||
src/mess/machine/bw2exp.h svneol=native#text/plain
|
||||
src/mess/machine/c128_comal80.c svneol=native#text/plain
|
||||
src/mess/machine/c128_comal80.h svneol=native#text/plain
|
||||
src/mess/machine/c1541.c svneol=native#text/plain
|
||||
|
129
src/mess/machine/bw2_ramcard.c
Normal file
129
src/mess/machine/bw2_ramcard.c
Normal file
@ -0,0 +1,129 @@
|
||||
/**********************************************************************
|
||||
|
||||
Bondwell 2 RAMCARD emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "bw2_ramcard.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type BW2_RAMCARD = &device_creator<bw2_ramcard_device>;
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ROM( bw2_ramcard )
|
||||
//-------------------------------------------------
|
||||
|
||||
ROM_START( bw2_ramcard )
|
||||
ROM_REGION( 0x4000, "ramcard", 0 )
|
||||
ROM_LOAD( "ramcard-10.ic10", 0x0000, 0x4000, CRC(68cde1ba) SHA1(a776a27d64f7b857565594beb63aa2cd692dcf04) )
|
||||
ROM_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// rom_region - device-specific ROM region
|
||||
//-------------------------------------------------
|
||||
|
||||
const rom_entry *bw2_ramcard_device::device_rom_region() const
|
||||
{
|
||||
return ROM_NAME( bw2_ramcard );
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bw2_ramcard_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bw2_ramcard_device::bw2_ramcard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, BW2_RAMCARD, "RAMCARD", tag, owner, clock),
|
||||
device_bw2_expansion_slot_interface(mconfig, *this),
|
||||
m_ram(*this, "ram"),
|
||||
m_en(0),
|
||||
m_bank(0)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bw2_ramcard_device::device_start()
|
||||
{
|
||||
// find memory regions
|
||||
m_rom = memregion("ramcard")->base();
|
||||
|
||||
// allocate memory
|
||||
m_ram.allocate(512 * 1024);
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_en));
|
||||
save_item(NAME(m_bank));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void bw2_ramcard_device::device_reset()
|
||||
{
|
||||
m_en = 0;
|
||||
m_bank = 0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// bw2_cd_r - cartridge data read
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 bw2_ramcard_device::bw2_cd_r(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6)
|
||||
{
|
||||
if (!ram2)
|
||||
{
|
||||
data = m_rom[offset & 0x3fff];
|
||||
}
|
||||
else if (m_en && !ram5)
|
||||
{
|
||||
data = m_ram[(m_bank << 15) | offset];
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// bw2_cd_r - cartridge data write
|
||||
//-------------------------------------------------
|
||||
|
||||
void bw2_ramcard_device::bw2_cd_w(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6)
|
||||
{
|
||||
if (m_en && !ram5)
|
||||
{
|
||||
m_ram[(m_bank << 15) | offset] = data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// bw2_slot_w - slot write
|
||||
//-------------------------------------------------
|
||||
|
||||
void bw2_ramcard_device::bw2_slot_w(address_space &space, offs_t offset, UINT8 data)
|
||||
{
|
||||
m_en = 1;
|
||||
m_bank = data & 0x0f;
|
||||
}
|
61
src/mess/machine/bw2_ramcard.h
Normal file
61
src/mess/machine/bw2_ramcard.h
Normal file
@ -0,0 +1,61 @@
|
||||
/**********************************************************************
|
||||
|
||||
Bondwell 2 RAMCARD emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __BW2_RAMCARD__
|
||||
#define __BW2_RAMCARD__
|
||||
|
||||
#include "emu.h"
|
||||
#include "machine/bw2exp.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bw2_ramcard_device
|
||||
|
||||
class bw2_ramcard_device : public device_t,
|
||||
public device_bw2_expansion_slot_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bw2_ramcard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// optional information overrides
|
||||
virtual const rom_entry *device_rom_region() const;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete() { m_shortname = "bw2_ramcard"; }
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
// device_bw2_expansion_slot_interface overrides
|
||||
virtual UINT8 bw2_cd_r(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6);
|
||||
virtual void bw2_cd_w(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6);
|
||||
virtual void bw2_slot_w(address_space &space, offs_t offset, UINT8 data);
|
||||
|
||||
private:
|
||||
optional_shared_ptr<UINT8> m_ram;
|
||||
const UINT8 *m_rom;
|
||||
|
||||
int m_en;
|
||||
UINT8 m_bank;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type BW2_RAMCARD;
|
||||
|
||||
|
||||
|
||||
#endif
|
188
src/mess/machine/bw2exp.c
Normal file
188
src/mess/machine/bw2exp.c
Normal file
@ -0,0 +1,188 @@
|
||||
/**********************************************************************
|
||||
|
||||
Bondwell 2 Expansion Port emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "machine/bw2exp.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
const device_type BW2_EXPANSION_SLOT = &device_creator<bw2_expansion_slot_device>;
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// CARD INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_bw2_expansion_slot_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_bw2_expansion_slot_interface::device_bw2_expansion_slot_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_slot_card_interface(mconfig,device)
|
||||
{
|
||||
m_slot = dynamic_cast<bw2_expansion_slot_device *>(device.owner());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ~device_bw2_expansion_slot_interface - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_bw2_expansion_slot_interface::~device_bw2_expansion_slot_interface()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bw2_expansion_slot_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bw2_expansion_slot_device::bw2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, BW2_EXPANSION_SLOT, "Bondwell 2 expansion port", tag, owner, clock),
|
||||
device_slot_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// bw2_expansion_slot_device - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bw2_expansion_slot_device::~bw2_expansion_slot_device()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bw2_expansion_slot_device::device_start()
|
||||
{
|
||||
m_cart = dynamic_cast<device_bw2_expansion_slot_interface *>(get_card_device());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void bw2_expansion_slot_device::device_reset()
|
||||
{
|
||||
if (m_cart != NULL)
|
||||
{
|
||||
m_cart->device().reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// cd_r - cartridge data read
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 bw2_expansion_slot_device::cd_r(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6)
|
||||
{
|
||||
if (m_cart != NULL)
|
||||
{
|
||||
data = m_cart->bw2_cd_r(space, offset, data, ram2, ram3, ram4, ram5, ram6);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// cd_w - cartridge data write
|
||||
//-------------------------------------------------
|
||||
|
||||
void bw2_expansion_slot_device::cd_w(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6)
|
||||
{
|
||||
if (m_cart != NULL)
|
||||
{
|
||||
m_cart->bw2_cd_w(space, offset, data, ram2, ram3, ram4, ram5, ram6);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// slot_r - slot read
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( bw2_expansion_slot_device::slot_r )
|
||||
{
|
||||
UINT8 data = 0xff;
|
||||
|
||||
if (m_cart != NULL)
|
||||
{
|
||||
data = m_cart->bw2_slot_r(space, offset);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// slot_w - slot write
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( bw2_expansion_slot_device::slot_w )
|
||||
{
|
||||
if (m_cart != NULL)
|
||||
{
|
||||
m_cart->bw2_slot_w(space, offset, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// modsel_r - modsel read
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER( bw2_expansion_slot_device::modsel_r )
|
||||
{
|
||||
UINT8 data = 0xff;
|
||||
|
||||
if (m_cart != NULL)
|
||||
{
|
||||
data = m_cart->bw2_modsel_r(space, offset);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// modsel_w - modsel write
|
||||
//-------------------------------------------------
|
||||
|
||||
WRITE8_MEMBER( bw2_expansion_slot_device::modsel_w )
|
||||
{
|
||||
if (m_cart != NULL)
|
||||
{
|
||||
m_cart->bw2_modsel_w(space, offset, data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( bw2_expansion_cards )
|
||||
//-------------------------------------------------
|
||||
|
||||
SLOT_INTERFACE_START( bw2_expansion_cards )
|
||||
SLOT_INTERFACE("ramcard", BW2_RAMCARD)
|
||||
SLOT_INTERFACE_END
|
135
src/mess/machine/bw2exp.h
Normal file
135
src/mess/machine/bw2exp.h
Normal file
@ -0,0 +1,135 @@
|
||||
/**********************************************************************
|
||||
|
||||
Bondwell 2 Expansion Port emulation
|
||||
|
||||
Copyright MESS Team.
|
||||
Visit http://mamedev.org for licensing and usage restrictions.
|
||||
|
||||
**********************************************************************
|
||||
|
||||
5V 1 26 12V
|
||||
D3 2 27 12V
|
||||
A1 3 28 A3
|
||||
A2 4 29 A4
|
||||
_CTSB 5 30 A5
|
||||
_RST 6 31 A6
|
||||
_MODSEL 7 32 A7
|
||||
16MHZ 8 33 A8
|
||||
_IORQ 9 34 A9
|
||||
_RD 10 35 A10
|
||||
D0 11 36 A11
|
||||
D1 12 37 A12
|
||||
D2 13 38 A13
|
||||
A0 14 39 A14
|
||||
D4 15 40 _RAM6
|
||||
D5 16 41 _RAM5
|
||||
D6 17 42 _RFSH
|
||||
D7 18 43 _WR
|
||||
DCDB 19 44 SELECT
|
||||
_DTRB 20 45 _RAM2
|
||||
_RTSB 21 46 _RAM3
|
||||
_DSRB 22 47 _RAM4
|
||||
TXDB 23 48 _SLOT
|
||||
RXDB 24 49 GND
|
||||
GND 25 50 5V
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __BW2_EXPANSION_SLOT__
|
||||
#define __BW2_EXPANSION_SLOT__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define BW2_EXPANSION_SLOT_TAG "exp"
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_BW2_EXPANSION_SLOT_ADD(_tag, _clock, _slot_intf, _def_slot, _def_inp) \
|
||||
MCFG_DEVICE_ADD(_tag, BW2_EXPANSION_SLOT, _clock) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
|
||||
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> bw2_expansion_slot_device
|
||||
|
||||
class device_bw2_expansion_slot_interface;
|
||||
|
||||
class bw2_expansion_slot_device : public device_t,
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bw2_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual ~bw2_expansion_slot_device();
|
||||
|
||||
// computer interface
|
||||
UINT8 cd_r(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6);
|
||||
void cd_w(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6);
|
||||
|
||||
DECLARE_READ8_MEMBER( slot_r );
|
||||
DECLARE_WRITE8_MEMBER( slot_w );
|
||||
|
||||
DECLARE_READ8_MEMBER( modsel_r );
|
||||
DECLARE_WRITE8_MEMBER( modsel_w );
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
device_bw2_expansion_slot_interface *m_cart;
|
||||
};
|
||||
|
||||
|
||||
// ======================> device_bw2_expansion_slot_interface
|
||||
|
||||
// class representing interface-specific live bw2_expansion card
|
||||
class device_bw2_expansion_slot_interface : public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
device_bw2_expansion_slot_interface(const machine_config &mconfig, device_t &device);
|
||||
virtual ~device_bw2_expansion_slot_interface();
|
||||
|
||||
virtual UINT8 bw2_cd_r(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6) { return data; };
|
||||
virtual void bw2_cd_w(address_space &space, offs_t offset, UINT8 data, int ram2, int ram3, int ram4, int ram5, int ram6) { };
|
||||
|
||||
virtual UINT8 bw2_slot_r(address_space &space, offs_t offset) { return 0xff; }
|
||||
virtual void bw2_slot_w(address_space &space, offs_t offset, UINT8 data) { }
|
||||
|
||||
virtual UINT8 bw2_modsel_r(address_space &space, offs_t offset) { return 0xff; }
|
||||
virtual void bw2_modsel_w(address_space &space, offs_t offset, UINT8 data) { }
|
||||
|
||||
protected:
|
||||
bw2_expansion_slot_device *m_slot;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type BW2_EXPANSION_SLOT;
|
||||
|
||||
|
||||
// slot devices
|
||||
#include "machine/bw2_ramcard.h"
|
||||
|
||||
SLOT_INTERFACE_EXTERN( bw2_expansion_cards );
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -778,6 +778,8 @@ $(MESSOBJ)/bnpo.a: \
|
||||
|
||||
$(MESSOBJ)/bondwell.a: \
|
||||
$(MESS_DRIVERS)/bw2.o \
|
||||
$(MESS_MACHINE)/bw2exp.o \
|
||||
$(MESS_MACHINE)/bw2_ramcard.o \
|
||||
$(MESS_DRIVERS)/bw12.o \
|
||||
|
||||
$(MESSOBJ)/booth.a: \
|
||||
|
Loading…
Reference in New Issue
Block a user