summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/linflash.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/linflash.c')
-rw-r--r--src/devices/machine/linflash.c208
1 files changed, 208 insertions, 0 deletions
diff --git a/src/devices/machine/linflash.c b/src/devices/machine/linflash.c
new file mode 100644
index 00000000000..fe72efa921d
--- /dev/null
+++ b/src/devices/machine/linflash.c
@@ -0,0 +1,208 @@
+// license:BSD-3-Clause
+// copyright-holders:smf
+#include "linflash.h"
+
+linear_flash_pccard_device::linear_flash_pccard_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_pccard_device::device_start()
+{
+ m_space = &space(AS_0);
+}
+
+const address_space_config *linear_flash_pccard_device::memory_space_config( address_spacenum spacenum ) const
+{
+ return ( spacenum == AS_0 ) ? &m_space_config : NULL;
+}
+
+READ16_MEMBER( linear_flash_pccard_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_pccard_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_PCCARD_16MB = &device_creator<linear_flash_pccard_16mb_device>;
+
+static ADDRESS_MAP_START(linear_flash_pccard_16mb, AS_0, 16, linear_flash_pccard_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_pccard_16mb_device::linear_flash_pccard_16mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ linear_flash_pccard_device(mconfig, LINEAR_FLASH_PCCARD_16MB, "Linear Flash PCCARD (16MB)", tag, owner, clock, "linearflash16mb", __FILE__)
+{
+ m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, *ADDRESS_MAP_NAME( linear_flash_pccard_16mb ) );
+}
+
+static MACHINE_CONFIG_FRAGMENT( linear_flash_pccard_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_pccard_16mb_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( linear_flash_pccard_16mb );
+}
+
+
+const device_type LINEAR_FLASH_PCCARD_32MB = &device_creator<linear_flash_pccard_32mb_device>;
+
+static ADDRESS_MAP_START(linear_flash_pccard_32mb, AS_0, 16, linear_flash_pccard_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_pccard_32mb_device::linear_flash_pccard_32mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ linear_flash_pccard_device(mconfig, LINEAR_FLASH_PCCARD_32MB, "Linear Flash PCCARD (32MB)", tag, owner, clock, "linearflash32mb", __FILE__)
+{
+ m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, *ADDRESS_MAP_NAME( linear_flash_pccard_32mb ) );
+}
+
+static MACHINE_CONFIG_FRAGMENT( linear_flash_pccard_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_pccard_32mb_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( linear_flash_pccard_32mb );
+}
+
+
+const device_type LINEAR_FLASH_PCCARD_64MB = &device_creator<linear_flash_pccard_64mb_device>;
+
+static ADDRESS_MAP_START(linear_flash_pccard_64mb, AS_0, 16, linear_flash_pccard_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_pccard_64mb_device::linear_flash_pccard_64mb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
+ linear_flash_pccard_device(mconfig, LINEAR_FLASH_PCCARD_64MB, "Linear Flash PCCARD (64MB)", tag, owner, clock, "linearflash64mb", __FILE__)
+{
+ m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, *ADDRESS_MAP_NAME( linear_flash_pccard_64mb ) );
+}
+
+static MACHINE_CONFIG_FRAGMENT( linear_flash_pccard_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_pccard_64mb_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( linear_flash_pccard_64mb );
+}