Created a PCCARD slot and Linear Flash Card for System 573. Uses bankdev.c for banking the onboard flash chips and the pccard slots. This adds an extra two calls to the memory system & intelfsh.c already called the memory system for accessing the data. [smf]

This commit is contained in:
smf- 2013-06-01 17:35:06 +00:00
parent 823fd8ceeb
commit bbc6be589d
7 changed files with 598 additions and 355 deletions

4
.gitattributes vendored
View File

@ -1279,6 +1279,8 @@ src/emu/machine/ldv1000.c svneol=native#text/plain
src/emu/machine/ldv1000.h svneol=native#text/plain
src/emu/machine/ldvp931.c svneol=native#text/plain
src/emu/machine/ldvp931.h svneol=native#text/plain
src/emu/machine/linflash.c svneol=native#text/plain
src/emu/machine/linflash.h svneol=native#text/plain
src/emu/machine/m6m80011ap.c svneol=native#text/plain
src/emu/machine/m6m80011ap.h svneol=native#text/plain
src/emu/machine/matsucd.c svneol=native#text/plain
@ -1349,6 +1351,8 @@ src/emu/machine/nvram.c svneol=native#text/plain
src/emu/machine/nvram.h svneol=native#text/plain
src/emu/machine/pc16552d.c svneol=native#text/plain
src/emu/machine/pc16552d.h svneol=native#text/plain
src/emu/machine/pccard.c svneol=native#text/plain
src/emu/machine/pccard.h svneol=native#text/plain
src/emu/machine/pcf8593.c svneol=native#text/plain
src/emu/machine/pcf8593.h svneol=native#text/plain
src/emu/machine/pci.c svneol=native#text/plain

View File

@ -217,6 +217,7 @@ EMUMACHINEOBJS = \
$(EMUMACHINE)/ldstub.o \
$(EMUMACHINE)/ldv1000.o \
$(EMUMACHINE)/ldvp931.o \
$(EMUMACHINE)/linflash.o \
$(EMUMACHINE)/m6m80011ap.o \
$(EMUMACHINE)/matsucd.o \
$(EMUMACHINE)/mb14241.o \
@ -252,6 +253,7 @@ EMUMACHINEOBJS = \
$(EMUMACHINE)/nscsi_hd.o \
$(EMUMACHINE)/nvram.o \
$(EMUMACHINE)/pc16552d.o \
$(EMUMACHINE)/pccard.o \
$(EMUMACHINE)/pcf8593.o \
$(EMUMACHINE)/pci.o \
$(EMUMACHINE)/pckeybrd.o \

208
src/emu/machine/linflash.c Normal file
View File

@ -0,0 +1,208 @@
#include "linflash.h"
/// figure out which games use 16mb and which use 32mb
linear_flash_card_device::linear_flash_card_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,const char *shortname, const char *source) :
device_t(mconfig, type, name, tag, owner, clock, shortname, source),
device_memory_interface(mconfig, *this),
device_slot_card_interface(mconfig, *this)
{
}
void linear_flash_card_device::device_start()
{
m_space = &space(AS_0);
}
const address_space_config *linear_flash_card_device::memory_space_config( address_spacenum spacenum ) const
{
return ( spacenum == AS_0 ) ? &m_space_config : NULL;
}
READ16_MEMBER( linear_flash_card_device::read_memory )
{
UINT16 data = m_space->read_word(offset * 2, mem_mask);
//printf( "<%08x %04x %04x\n", offset, data, mem_mask );
return data;
}
WRITE16_MEMBER( linear_flash_card_device::write_memory )
{
//printf( ">%08x %04x %04x\n", offset, data, mem_mask );
m_space->write_word(offset * 2, data, mem_mask);
}
const device_type LINEAR_FLASH_16MB = &device_creator<linear_flash_card_16mb_device>;
static ADDRESS_MAP_START(linear_flash_card_16mb, AS_0, 16, linear_flash_card_16mb_device)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE8("1l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE8("1u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE8("2l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE8("2u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00800000, 0x00bfffff) AM_DEVREADWRITE8("3l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00800000, 0x00bfffff) AM_DEVREADWRITE8("3u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00c00000, 0x00ffffff) AM_DEVREADWRITE8("4l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00c00000, 0x00ffffff) AM_DEVREADWRITE8("4u", intelfsh8_device, read, write, 0xff00)
ADDRESS_MAP_END
linear_flash_card_16mb_device::linear_flash_card_16mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
linear_flash_card_device(mconfig, LINEAR_FLASH_16MB, "Linear Flash Card (16MB)", tag, owner, clock, "linearflash16mb", __FILE__)
{
m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, *ADDRESS_MAP_NAME( linear_flash_card_16mb ) );
}
static MACHINE_CONFIG_FRAGMENT( linear_flash_card_16mb )
MCFG_FUJITSU_29F016A_ADD("1l")
MCFG_FUJITSU_29F016A_ADD("1u")
MCFG_FUJITSU_29F016A_ADD("2l")
MCFG_FUJITSU_29F016A_ADD("2u")
MCFG_FUJITSU_29F016A_ADD("3l")
MCFG_FUJITSU_29F016A_ADD("3u")
MCFG_FUJITSU_29F016A_ADD("4l")
MCFG_FUJITSU_29F016A_ADD("4u")
MACHINE_CONFIG_END
machine_config_constructor linear_flash_card_16mb_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( linear_flash_card_16mb );
}
const device_type LINEAR_FLASH_32MB = &device_creator<linear_flash_card_32mb_device>;
static ADDRESS_MAP_START(linear_flash_card_32mb, AS_0, 16, linear_flash_card_32mb_device)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE8("1l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE8("1u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE8("2l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE8("2u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00800000, 0x00bfffff) AM_DEVREADWRITE8("3l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00800000, 0x00bfffff) AM_DEVREADWRITE8("3u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00c00000, 0x00ffffff) AM_DEVREADWRITE8("4l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00c00000, 0x00ffffff) AM_DEVREADWRITE8("4u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01000000, 0x013fffff) AM_DEVREADWRITE8("5l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01000000, 0x013fffff) AM_DEVREADWRITE8("5u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01400000, 0x017fffff) AM_DEVREADWRITE8("6l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01400000, 0x017fffff) AM_DEVREADWRITE8("6u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01800000, 0x01bfffff) AM_DEVREADWRITE8("7l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01800000, 0x01bfffff) AM_DEVREADWRITE8("7u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01c00000, 0x01ffffff) AM_DEVREADWRITE8("8l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01c00000, 0x01ffffff) AM_DEVREADWRITE8("8u", intelfsh8_device, read, write, 0xff00)
ADDRESS_MAP_END
linear_flash_card_32mb_device::linear_flash_card_32mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
linear_flash_card_device(mconfig, LINEAR_FLASH_32MB, "Linear Flash Card (32MB)", tag, owner, clock, "linearflash32mb", __FILE__)
{
m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, *ADDRESS_MAP_NAME( linear_flash_card_32mb ) );
}
static MACHINE_CONFIG_FRAGMENT( linear_flash_card_32mb )
MCFG_FUJITSU_29F016A_ADD("1l")
MCFG_FUJITSU_29F016A_ADD("1u")
MCFG_FUJITSU_29F016A_ADD("2l")
MCFG_FUJITSU_29F016A_ADD("2u")
MCFG_FUJITSU_29F016A_ADD("3l")
MCFG_FUJITSU_29F016A_ADD("3u")
MCFG_FUJITSU_29F016A_ADD("4l")
MCFG_FUJITSU_29F016A_ADD("4u")
MCFG_FUJITSU_29F016A_ADD("5l")
MCFG_FUJITSU_29F016A_ADD("5u")
MCFG_FUJITSU_29F016A_ADD("6l")
MCFG_FUJITSU_29F016A_ADD("6u")
MCFG_FUJITSU_29F016A_ADD("7l")
MCFG_FUJITSU_29F016A_ADD("7u")
MCFG_FUJITSU_29F016A_ADD("8l")
MCFG_FUJITSU_29F016A_ADD("8u")
MACHINE_CONFIG_END
machine_config_constructor linear_flash_card_32mb_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( linear_flash_card_32mb );
}
const device_type LINEAR_FLASH_64MB = &device_creator<linear_flash_card_64mb_device>;
static ADDRESS_MAP_START(linear_flash_card_64mb, AS_0, 16, linear_flash_card_64mb_device)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE8("1l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00000000, 0x003fffff) AM_DEVREADWRITE8("1u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE8("2l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00400000, 0x007fffff) AM_DEVREADWRITE8("2u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00800000, 0x00bfffff) AM_DEVREADWRITE8("3l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00800000, 0x00bfffff) AM_DEVREADWRITE8("3u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x00c00000, 0x00ffffff) AM_DEVREADWRITE8("4l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x00c00000, 0x00ffffff) AM_DEVREADWRITE8("4u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01000000, 0x013fffff) AM_DEVREADWRITE8("5l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01000000, 0x013fffff) AM_DEVREADWRITE8("5u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01400000, 0x017fffff) AM_DEVREADWRITE8("6l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01400000, 0x017fffff) AM_DEVREADWRITE8("6u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01800000, 0x01bfffff) AM_DEVREADWRITE8("7l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01800000, 0x01bfffff) AM_DEVREADWRITE8("7u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x01c00000, 0x01ffffff) AM_DEVREADWRITE8("8l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x01c00000, 0x01ffffff) AM_DEVREADWRITE8("8u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x02000000, 0x023fffff) AM_DEVREADWRITE8("9l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x02000000, 0x023fffff) AM_DEVREADWRITE8("9u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x02400000, 0x027fffff) AM_DEVREADWRITE8("10l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x02400000, 0x027fffff) AM_DEVREADWRITE8("10u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x02800000, 0x02bfffff) AM_DEVREADWRITE8("11l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x02800000, 0x02bfffff) AM_DEVREADWRITE8("11u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x02c00000, 0x02ffffff) AM_DEVREADWRITE8("12l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x02c00000, 0x02ffffff) AM_DEVREADWRITE8("12u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x03000000, 0x033fffff) AM_DEVREADWRITE8("13l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x03000000, 0x033fffff) AM_DEVREADWRITE8("13u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x03400000, 0x037fffff) AM_DEVREADWRITE8("14l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x03400000, 0x037fffff) AM_DEVREADWRITE8("14u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x03800000, 0x03bfffff) AM_DEVREADWRITE8("15l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x03800000, 0x03bfffff) AM_DEVREADWRITE8("15u", intelfsh8_device, read, write, 0xff00)
AM_RANGE(0x03c00000, 0x03ffffff) AM_DEVREADWRITE8("16l", intelfsh8_device, read, write, 0x00ff)
AM_RANGE(0x03c00000, 0x03ffffff) AM_DEVREADWRITE8("16u", intelfsh8_device, read, write, 0xff00)
ADDRESS_MAP_END
linear_flash_card_64mb_device::linear_flash_card_64mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
linear_flash_card_device(mconfig, LINEAR_FLASH_64MB, "Linear Flash Card (64MB)", tag, owner, clock, "linearflash64mb", __FILE__)
{
m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, *ADDRESS_MAP_NAME( linear_flash_card_64mb ) );
}
static MACHINE_CONFIG_FRAGMENT( linear_flash_card_64mb )
MCFG_FUJITSU_29F016A_ADD("1l")
MCFG_FUJITSU_29F016A_ADD("1u")
MCFG_FUJITSU_29F016A_ADD("2l")
MCFG_FUJITSU_29F016A_ADD("2u")
MCFG_FUJITSU_29F016A_ADD("3l")
MCFG_FUJITSU_29F016A_ADD("3u")
MCFG_FUJITSU_29F016A_ADD("4l")
MCFG_FUJITSU_29F016A_ADD("4u")
MCFG_FUJITSU_29F016A_ADD("5l")
MCFG_FUJITSU_29F016A_ADD("5u")
MCFG_FUJITSU_29F016A_ADD("6l")
MCFG_FUJITSU_29F016A_ADD("6u")
MCFG_FUJITSU_29F016A_ADD("7l")
MCFG_FUJITSU_29F016A_ADD("7u")
MCFG_FUJITSU_29F016A_ADD("8l")
MCFG_FUJITSU_29F016A_ADD("8u")
MCFG_FUJITSU_29F016A_ADD("9l")
MCFG_FUJITSU_29F016A_ADD("9u")
MCFG_FUJITSU_29F016A_ADD("10l")
MCFG_FUJITSU_29F016A_ADD("10u")
MCFG_FUJITSU_29F016A_ADD("11l")
MCFG_FUJITSU_29F016A_ADD("11u")
MCFG_FUJITSU_29F016A_ADD("12l")
MCFG_FUJITSU_29F016A_ADD("12u")
MCFG_FUJITSU_29F016A_ADD("13l")
MCFG_FUJITSU_29F016A_ADD("13u")
MCFG_FUJITSU_29F016A_ADD("14l")
MCFG_FUJITSU_29F016A_ADD("14u")
MCFG_FUJITSU_29F016A_ADD("15l")
MCFG_FUJITSU_29F016A_ADD("15u")
MCFG_FUJITSU_29F016A_ADD("16l")
MCFG_FUJITSU_29F016A_ADD("16u")
MACHINE_CONFIG_END
machine_config_constructor linear_flash_card_64mb_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( linear_flash_card_64mb );
}

View File

@ -0,0 +1,63 @@
#include "emu.h"
#include "intelfsh.h"
#include "machine/pccard.h"
class linear_flash_card_device : public device_t,
public pccard_interface,
public device_memory_interface,
public device_slot_card_interface
{
public:
virtual DECLARE_READ16_MEMBER(read_memory);
virtual DECLARE_WRITE16_MEMBER(write_memory);
protected:
linear_flash_card_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,const char *shortname = "", const char *source = __FILE__);
// device-level overrides
virtual void device_start();
// device_memory_interface overrides
virtual const address_space_config *memory_space_config( address_spacenum spacenum = AS_0 ) const;
address_space_config m_space_config;
address_space *m_space;
};
extern const device_type LINEAR_FLASH_16MB;
class linear_flash_card_16mb_device : public linear_flash_card_device
{
public:
linear_flash_card_16mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
};
extern const device_type LINEAR_FLASH_32MB;
class linear_flash_card_32mb_device : public linear_flash_card_device
{
public:
linear_flash_card_32mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
};
extern const device_type LINEAR_FLASH_64MB;
class linear_flash_card_64mb_device : public linear_flash_card_device
{
public:
linear_flash_card_64mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
// device-level overrides
virtual machine_config_constructor device_mconfig_additions() const;
};

74
src/emu/machine/pccard.c Normal file
View File

@ -0,0 +1,74 @@
#include "pccard.h"
READ16_MEMBER( pccard_interface::read_memory )
{
return 0xffff;
}
WRITE16_MEMBER( pccard_interface::write_memory )
{
}
READ16_MEMBER( pccard_interface::read_reg )
{
return 0xffff;
}
WRITE16_MEMBER( pccard_interface::write_reg )
{
}
const device_type PCCARD_SLOT = &device_creator<pccard_slot_device>;
pccard_slot_device::pccard_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, PCCARD_SLOT, "PCCARD SLOT", tag, owner, clock, "pccard", __FILE__),
device_slot_interface(mconfig, *this),
m_pccard(NULL)
{
}
void pccard_slot_device::device_start()
{
m_pccard = dynamic_cast<pccard_interface *>(get_card_device());
}
READ_LINE_MEMBER(pccard_slot_device::read_line_inserted)
{
return m_pccard != NULL;
}
READ16_MEMBER( pccard_slot_device::read_memory )
{
if( m_pccard != NULL )
{
return m_pccard->read_memory( space, offset, mem_mask );
}
return 0xffff;
}
WRITE16_MEMBER( pccard_slot_device::write_memory )
{
if( m_pccard != NULL )
{
m_pccard->write_memory( space, offset, data, mem_mask );
}
}
READ16_MEMBER( pccard_slot_device::read_reg )
{
if( m_pccard != NULL )
{
return m_pccard->read_reg( space, offset, mem_mask );
}
return 0xffff;
}
WRITE16_MEMBER( pccard_slot_device::write_reg )
{
if( m_pccard != NULL )
{
m_pccard->write_reg( space, offset, data, mem_mask );
}
}

32
src/emu/machine/pccard.h Normal file
View File

@ -0,0 +1,32 @@
#include "emu.h"
class pccard_interface
{
public:
virtual DECLARE_READ16_MEMBER(read_memory);
virtual DECLARE_READ16_MEMBER(read_reg);
virtual DECLARE_WRITE16_MEMBER(write_memory);
virtual DECLARE_WRITE16_MEMBER(write_reg);
};
extern const device_type PCCARD_SLOT;
class pccard_slot_device : public device_t,
public device_slot_interface
{
public:
pccard_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
DECLARE_READ_LINE_MEMBER(read_line_inserted);
DECLARE_READ16_MEMBER(read_memory);
DECLARE_READ16_MEMBER(read_reg);
DECLARE_WRITE16_MEMBER(write_memory);
DECLARE_WRITE16_MEMBER(write_reg);
protected:
virtual void device_start();
private:
// internal state
pccard_interface *m_pccard;
};

File diff suppressed because it is too large Load Diff