summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--scripts/src/bus.lua27
-rw-r--r--scripts/src/machine.lua50
-rw-r--r--src/devices/bus/pccard/ataflash.cpp (renamed from src/devices/machine/ataflash.cpp)50
-rw-r--r--src/devices/bus/pccard/ataflash.h (renamed from src/devices/machine/ataflash.h)17
-rw-r--r--src/devices/bus/pccard/k573npu.cpp (renamed from src/mame/konami/k573npu.cpp)21
-rw-r--r--src/devices/bus/pccard/k573npu.h (renamed from src/mame/konami/k573npu.h)18
-rw-r--r--src/devices/bus/pccard/konami_dual.cpp93
-rw-r--r--src/devices/bus/pccard/konami_dual.h30
-rw-r--r--src/devices/bus/pccard/linflash.cpp249
-rw-r--r--src/devices/bus/pccard/linflash.h124
-rw-r--r--src/devices/bus/pccard/pccard.cpp (renamed from src/devices/machine/pccard.cpp)100
-rw-r--r--src/devices/bus/pccard/pccard.h87
-rw-r--r--src/devices/bus/pccard/sram.cpp (renamed from src/devices/machine/pccard_sram.cpp)123
-rw-r--r--src/devices/bus/pccard/sram.h (renamed from src/devices/machine/pccard_sram.h)25
-rw-r--r--src/devices/machine/gayle.cpp34
-rw-r--r--src/devices/machine/gayle.h4
-rw-r--r--src/devices/machine/linflash.cpp205
-rw-r--r--src/devices/machine/linflash.h80
-rw-r--r--src/devices/machine/pccard.h85
-rw-r--r--src/devices/machine/rf5c296.h2
-rw-r--r--src/mame/amiga/amiga.cpp21
-rw-r--r--src/mame/amstrad/nc.cpp31
-rw-r--r--src/mame/konami/ksys573.cpp80
-rw-r--r--src/mame/sony/taitogn.cpp2
24 files changed, 877 insertions, 681 deletions
diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua
index 79c00329c85..f0f2e9c0006 100644
--- a/scripts/src/bus.lua
+++ b/scripts/src/bus.lua
@@ -488,10 +488,6 @@ end
--@src/devices/bus/ata/ataintf.h,BUSES["ATA"] = true
---------------------------------------------------
-if (MACHINES["ATAFLASH"]~=null) then
- BUSES["ATA"] = true
-end
-
if (BUSES["ATA"]~=null) then
files {
MAME_DIR .. "src/devices/bus/ata/atadev.cpp",
@@ -2193,6 +2189,29 @@ end
---------------------------------------------------
--
+--@src/devices/bus/pccard/pccard.h,BUSES["PCCARD"] = true
+---------------------------------------------------
+
+if (BUSES["PCCARD"]~=null) then
+ files {
+ MAME_DIR .. "src/devices/bus/pccard/pccard.cpp",
+ MAME_DIR .. "src/devices/bus/pccard/pccard.h",
+ MAME_DIR .. "src/devices/bus/pccard/ataflash.cpp",
+ MAME_DIR .. "src/devices/bus/pccard/ataflash.h",
+ MAME_DIR .. "src/devices/bus/pccard/k573npu.cpp",
+ MAME_DIR .. "src/devices/bus/pccard/k573npu.h",
+ MAME_DIR .. "src/devices/bus/pccard/konami_dual.cpp",
+ MAME_DIR .. "src/devices/bus/pccard/konami_dual.h",
+ MAME_DIR .. "src/devices/bus/pccard/linflash.cpp",
+ MAME_DIR .. "src/devices/bus/pccard/linflash.h",
+ MAME_DIR .. "src/devices/bus/pccard/sram.cpp",
+ MAME_DIR .. "src/devices/bus/pccard/sram.h",
+ }
+end
+
+
+---------------------------------------------------
+--
--@src/devices/bus/pc_kbd/pc_kbdc.h,BUSES["PC_KBD"] = true
---------------------------------------------------
diff --git a/scripts/src/machine.lua b/scripts/src/machine.lua
index 147271a2626..3953786b204 100644
--- a/scripts/src/machine.lua
+++ b/scripts/src/machine.lua
@@ -920,19 +920,6 @@ end
---------------------------------------------------
--
---@src/devices/machine/ataflash.h,MACHINES["ATAFLASH"] = true
----------------------------------------------------
-
-if (MACHINES["ATAFLASH"]~=null) then
- MACHINES["PCCARD"] = true
- files {
- MAME_DIR .. "src/devices/machine/ataflash.cpp",
- MAME_DIR .. "src/devices/machine/ataflash.h",
- }
-end
-
----------------------------------------------------
---
--@src/devices/machine/atastorage.h,MACHINES["ATASTORAGE"] = true
---------------------------------------------------
@@ -2110,18 +2097,6 @@ end
---------------------------------------------------
--
---@src/devices/machine/linflash.h,MACHINES["LINFLASH"] = true
----------------------------------------------------
-
-if (MACHINES["LINFLASH"]~=null) then
- files {
- MAME_DIR .. "src/devices/machine/linflash.cpp",
- MAME_DIR .. "src/devices/machine/linflash.h",
- }
-end
-
----------------------------------------------------
---
--@src/devices/machine/locomo.h,MACHINES["LOCOMO"] = true
---------------------------------------------------
@@ -3067,7 +3042,6 @@ end
---------------------------------------------------
if (MACHINES["RF5C296"]~=null) then
- MACHINES["PCCARD"] = true
files {
MAME_DIR .. "src/devices/machine/rf5c296.cpp",
MAME_DIR .. "src/devices/machine/rf5c296.h",
@@ -4142,18 +4116,6 @@ end
---------------------------------------------------
--
---@src/devices/machine/pccard.h,MACHINES["PCCARD"] = true
----------------------------------------------------
-
-if (MACHINES["PCCARD"]~=null) then
- files {
- MAME_DIR .. "src/devices/machine/pccard.cpp",
- MAME_DIR .. "src/devices/machine/pccard.h",
- }
-end
-
----------------------------------------------------
---
--@src/devices/machine/i8255.h,MACHINES["I8255"] = true
---------------------------------------------------
@@ -5322,18 +5284,6 @@ end
---------------------------------------------------
--
---@src/devices/machine/pccard_sram.h,MACHINES["PCCARD_SRAM"] = true
----------------------------------------------------
-
-if (MACHINES["PCCARD_SRAM"]~=null) then
- files {
- MAME_DIR .. "src/devices/machine/pccard_sram.cpp",
- MAME_DIR .. "src/devices/machine/pccard_sram.h",
- }
-end
-
----------------------------------------------------
---
--@src/devices/machine/tc9223.h,MACHINES["TC9223"] = true
---------------------------------------------------
diff --git a/src/devices/machine/ataflash.cpp b/src/devices/bus/pccard/ataflash.cpp
index 54e7c841ace..6d5268d7c66 100644
--- a/src/devices/machine/ataflash.cpp
+++ b/src/devices/bus/pccard/ataflash.cpp
@@ -3,8 +3,6 @@
#include "emu.h"
#include "ataflash.h"
-DEFINE_DEVICE_TYPE(ATA_FLASH_PCCARD, ata_flash_pccard_device, "ataflash", "ATA Flash PC Card")
-
ata_flash_pccard_device::ata_flash_pccard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ata_flash_pccard_device(mconfig, ATA_FLASH_PCCARD, tag, owner, clock)
{
@@ -16,15 +14,43 @@ ata_flash_pccard_device::ata_flash_pccard_device(const machine_config &mconfig,
{
}
+void ata_flash_pccard_device::device_start()
+{
+ cf_device_base::device_start();
+
+ m_cd1_cb(0);
+ m_cd2_cb(0);
+}
+
void ata_flash_pccard_device::device_reset()
{
cf_device_base::device_reset();
- if (m_image->exists())
+ bool cis = m_image->exists() && !m_image->get_cis_data(m_cis);
+ m_cis.resize(512, 0xff);
+
+ if (!cis)
{
- m_image->get_cis_data(m_cis);
+ m_cis[0] = 0x01; // CISTPL_DEVICE
+ m_cis[1] = 0x04; // TPL_LINK
+ m_cis[2] = 0xdf; // 4:device type/1:WPS/3:device speed
+ m_cis[3] = 0x4a; // extended device speed (1:ext 4:mantissa 3:speed) (if speed==7)
+ m_cis[4] = 0x01; // device size byte (5:# of address units -1 3: size code)
+ m_cis[5] = 0xff; // end of device info field
+ m_cis[6] = 0x1a; // CISTPL_CONFIG
+ m_cis[7] = 0x05; // TPL_LINK
+ m_cis[8] = 0x01; // Size of Fields Byte (2:TPCC_RFSZ 4:TPCC_RMSZ 2:TPCC_RASZ)
+ m_cis[9] = 0x03; // TPCC_LAST (2:RFU 6:Last Index) (count of 0x1b?)
+ m_cis[10] = 0x00; // TPCC_RADR
+ m_cis[11] = 0x02; // TPCC_RADR
+ m_cis[12] = 0x0f; // TPCC_RMSK
+ m_cis[13] = 0x21; // CISTPL_FUNCID
+ m_cis[14] = 0x02; // TPL_LINK
+ m_cis[15] = 0x04; // TPLFID_FUNCTION
+ m_cis[16] = 0x01; // TPLFID_SYSINIT
+ m_cis[17] = 0xff; // CISTPL_END
+ m_cis[18] = 0xff; // TPL_LINK
}
- m_cis.resize(512, 0xff);
m_configuration_option = 0;
m_configuration_and_status = 0;
@@ -110,8 +136,12 @@ void ata_flash_pccard_device::write_reg(offs_t offset, uint16_t data, uint16_t m
}
}
+void ata_flash_pccard_device::ide_build_identify_device()
+{
+ cf_device_base::ide_build_identify_device();
+ m_identify_buffer[0] = 0x848a; /* 0: configuration bits */
+}
-DEFINE_DEVICE_TYPE(TAITO_PCCARD1, taito_pccard1_device, "taito_pccard1", "Taito PC Card (Type 1)")
taito_pccard1_device::taito_pccard1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
ata_flash_pccard_device(mconfig, TAITO_PCCARD1, tag, owner, clock),
@@ -200,8 +230,6 @@ bool taito_pccard1_device::is_ready()
return m_locked == 0;
}
-DEFINE_DEVICE_TYPE(TAITO_PCCARD2, taito_pccard2_device, "taito_pccard2", "Taito PC Card (Type 2)")
-
taito_pccard2_device::taito_pccard2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
ata_flash_pccard_device(mconfig, TAITO_PCCARD2, tag, owner, clock),
m_locked(false)
@@ -297,7 +325,6 @@ bool taito_pccard2_device::is_ready()
return !m_locked;
}
-DEFINE_DEVICE_TYPE(TAITO_COMPACT_FLASH, taito_compact_flash_device, "taito_cf", "Taito Compact Flash")
taito_compact_flash_device::taito_compact_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
ata_flash_pccard_device(mconfig, TAITO_COMPACT_FLASH, tag, owner, clock),
@@ -364,3 +391,8 @@ bool taito_compact_flash_device::is_ready()
{
return !m_locked;
}
+
+DEFINE_DEVICE_TYPE(ATA_FLASH_PCCARD, ata_flash_pccard_device, "ataflash", "ATA Flash PC Card")
+DEFINE_DEVICE_TYPE(TAITO_PCCARD1, taito_pccard1_device, "taito_pccard1", "Taito PC Card (Type 1)")
+DEFINE_DEVICE_TYPE(TAITO_PCCARD2, taito_pccard2_device, "taito_pccard2", "Taito PC Card (Type 2)")
+DEFINE_DEVICE_TYPE(TAITO_COMPACT_FLASH, taito_compact_flash_device, "taito_cf", "Taito Compact Flash")
diff --git a/src/devices/machine/ataflash.h b/src/devices/bus/pccard/ataflash.h
index 036c76b7909..08c00237c1b 100644
--- a/src/devices/machine/ataflash.h
+++ b/src/devices/bus/pccard/ataflash.h
@@ -6,9 +6,7 @@
#pragma once
#include "pccard.h"
-#include "atastorage.h"
-
-DECLARE_DEVICE_TYPE(ATA_FLASH_PCCARD, ata_flash_pccard_device)
+#include "machine/atastorage.h"
class ata_flash_pccard_device : public cf_device_base, public device_pccard_interface
{
@@ -24,10 +22,12 @@ protected:
ata_flash_pccard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device_t implementation
+ virtual void device_start() override;
virtual void device_reset() override;
private:
// ata_hle_device_base implementation
+ virtual void ide_build_identify_device() override;
virtual void set_irq_out(int state) override { }
virtual void set_dmarq_out(int state) override { }
virtual void set_dasp_out(int state) override { }
@@ -39,8 +39,6 @@ private:
uint8_t m_pin_replacement;
};
-DECLARE_DEVICE_TYPE(TAITO_PCCARD1, taito_pccard1_device)
-
class taito_pccard1_device : public ata_flash_pccard_device
{
public:
@@ -60,8 +58,6 @@ private:
uint16_t m_locked;
};
-DECLARE_DEVICE_TYPE(TAITO_PCCARD2, taito_pccard2_device)
-
class taito_pccard2_device : public ata_flash_pccard_device
{
public:
@@ -82,8 +78,6 @@ private:
bool m_locked;
};
-DECLARE_DEVICE_TYPE(TAITO_COMPACT_FLASH, taito_compact_flash_device)
-
class taito_compact_flash_device : public ata_flash_pccard_device
{
public:
@@ -102,4 +96,9 @@ private:
bool m_locked;
};
+DECLARE_DEVICE_TYPE(TAITO_PCCARD1, taito_pccard1_device)
+DECLARE_DEVICE_TYPE(TAITO_PCCARD2, taito_pccard2_device)
+DECLARE_DEVICE_TYPE(TAITO_COMPACT_FLASH, taito_compact_flash_device)
+DECLARE_DEVICE_TYPE(ATA_FLASH_PCCARD, ata_flash_pccard_device)
+
#endif // MAME_MACHINE_ATAFLASH_H
diff --git a/src/mame/konami/k573npu.cpp b/src/devices/bus/pccard/k573npu.cpp
index 5d06644ae29..f7109fee4f2 100644
--- a/src/mame/konami/k573npu.cpp
+++ b/src/devices/bus/pccard/k573npu.cpp
@@ -73,17 +73,14 @@
*/
k573npu_device::k573npu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, KONAMI_573_NETWORK_PCB_UNIT, tag, owner, clock)
-{
-}
-
-void k573npu_device::device_start()
+ device_t(mconfig, KONAMI_573_NETWORK_PCB_UNIT, tag, owner, clock),
+ device_pccard_interface(mconfig, *this)
{
}
ROM_START( k573npu )
- ROM_REGION( 0x080000, "tmpr3927", 0 )
- ROM_LOAD( "29f400.24e", 0x000000, 0x080000, CRC(8dcf294b) SHA1(efac79e18db22c30886463ec1bc448187da7a95a) )
+ ROM_REGION( 0x080000, "maincpu", 0 )
+ ROM_LOAD16_WORD_SWAP( "29f400.24e", 0x000000, 0x080000, CRC(8dcf294b) SHA1(efac79e18db22c30886463ec1bc448187da7a95a) )
ROM_END
const tiny_rom_entry *k573npu_device::device_rom_region() const
@@ -91,4 +88,14 @@ const tiny_rom_entry *k573npu_device::device_rom_region() const
return ROM_NAME( k573npu );
}
+void k573npu_device::device_start()
+{
+}
+
+void k573npu_device::maincpu_program_map(address_map &map)
+{
+ map(0x00000000, 0x007fffff).ram();
+ map(0x1fc00000, 0x1fc7ffff).rom().region("maincpu", 0);
+}
+
DEFINE_DEVICE_TYPE(KONAMI_573_NETWORK_PCB_UNIT, k573npu_device, "k573npu", "Konami 573 Network PCB Unit")
diff --git a/src/mame/konami/k573npu.h b/src/devices/bus/pccard/k573npu.h
index 3f89c518f02..dadff15298d 100644
--- a/src/mame/konami/k573npu.h
+++ b/src/devices/bus/pccard/k573npu.h
@@ -4,24 +4,26 @@
* Konami 573 Network PCB Unit
*
*/
-#ifndef MAME_KONAMI_K573NPU_H
-#define MAME_KONAMI_K573NPU_H
+#ifndef MAME_BUS_PCCARD_K573NPU_H
+#define MAME_BUS_PCCARD_K573NPU_H
#pragma once
+#include "pccard.h"
-
-DECLARE_DEVICE_TYPE(KONAMI_573_NETWORK_PCB_UNIT, k573npu_device)
-
-class k573npu_device : public device_t
+class k573npu_device : public device_t,
+ public device_pccard_interface
{
public:
k573npu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
+ virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_start() override;
- virtual const tiny_rom_entry *device_rom_region() const override;
+ void maincpu_program_map(address_map &map);
};
-#endif // MAME_KONAMI_K573NPU_H
+DECLARE_DEVICE_TYPE(KONAMI_573_NETWORK_PCB_UNIT, k573npu_device)
+
+#endif // MAME_BUS_PCCARD_K573NPU_H
diff --git a/src/devices/bus/pccard/konami_dual.cpp b/src/devices/bus/pccard/konami_dual.cpp
new file mode 100644
index 00000000000..e141fd71b21
--- /dev/null
+++ b/src/devices/bus/pccard/konami_dual.cpp
@@ -0,0 +1,93 @@
+// license:GPL-2.0+
+// copyright-holders:smf
+/*
+ |--|-------------------------|--|
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | PC Card slot 3 (bottom) | |
+ | | PC Card slot 4 (top) | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | | | |
+ | |-------------------------| |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | 74LS245 74LS245 74LS245 |
+ | |
+ | 74LS245 74LS245 74LS245 |
+ | |
+ | |
+ | BD-8 BD-8 BD-8 BD-8 BD-8 BD-8 |
+ | |
+ | |
+ | |
+ | |
+ | |
+ | CN1 CN2 |
+ |-------------------------------|
+ Notes:
+ CN1 68 pin VHDCI connector
+ CN2 (unpopulated)
+
+ Requires ADAPTER PC Card PN 0000088797 & cable
+*/
+
+#include "emu.h"
+#include "konami_dual.h"
+#include "linflash.h"
+
+konami_dual_pccard_device::konami_dual_pccard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ device_t(mconfig, KONAMI_DUAL_PCCARD, tag, owner, clock),
+ device_pccard_interface(mconfig, *this),
+ m_slot(*this, "slot%u", 3U)
+{
+}
+
+void konami_dual_pccard_device::device_add_mconfig(machine_config &config)
+{
+ for (size_t i = 0; i < m_slot.size(); i++)
+ {
+ PCCARD_SLOT(config, m_slot[i]);
+ m_slot[i]->option_add("16mb", FUJITSU_16MB_FLASH_CARD);
+ m_slot[i]->option_add("32mb", FUJITSU_32MB_FLASH_CARD);
+ m_slot[i]->option_add("id245p01", ID245P01);
+ m_slot[i]->option_add("pm24276", PM24276);
+ m_slot[i]->set_default_option("32mb");
+ }
+}
+
+void konami_dual_pccard_device::device_start()
+{
+ m_cd1_cb(0);
+ m_cd2_cb(0);
+}
+
+uint16_t konami_dual_pccard_device::read_memory(offs_t offset, uint16_t mem_mask)
+{
+ return m_slot[BIT(offset, 24)]->read_memory(BIT(offset, 0, 24), mem_mask);
+}
+
+void konami_dual_pccard_device::write_memory(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ m_slot[BIT(offset, 24)]->write_memory(BIT(offset, 0, 24), data, mem_mask);
+}
+
+DEFINE_DEVICE_TYPE(KONAMI_DUAL_PCCARD, konami_dual_pccard_device, "konami_dual_pccard", "Konami Dual PC Card Adapter (PWB0000085455)")
diff --git a/src/devices/bus/pccard/konami_dual.h b/src/devices/bus/pccard/konami_dual.h
new file mode 100644
index 00000000000..d88e397e8b7
--- /dev/null
+++ b/src/devices/bus/pccard/konami_dual.h
@@ -0,0 +1,30 @@
+// license:GPL-2.0+
+// copyright-holders:smf
+#ifndef MAME_BUS_PCCARD_KONAMI_DUAL_PCCARD_H
+#define MAME_BUS_PCCARD_KONAMI_DUAL_PCCARD_H
+
+#pragma once
+
+#include "pccard.h"
+
+class konami_dual_pccard_device :
+ public device_t,
+ public device_pccard_interface
+{
+public:
+ konami_dual_pccard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ virtual uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0) override;
+ virtual void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+
+protected:
+ // device_t
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+
+ required_device_array<pccard_slot_device, 2> m_slot;
+};
+
+DECLARE_DEVICE_TYPE(KONAMI_DUAL_PCCARD, konami_dual_pccard_device)
+
+#endif // MAME_BUS_PCCARD_KONAMI_DUAL_PCCARD_H
diff --git a/src/devices/bus/pccard/linflash.cpp b/src/devices/bus/pccard/linflash.cpp
new file mode 100644
index 00000000000..13b4f9c3317
--- /dev/null
+++ b/src/devices/bus/pccard/linflash.cpp
@@ -0,0 +1,249 @@
+// license:GPL-2.0+
+// copyright-holders:smf
+/*
+ Fujitsu 32MB Flash Card
+ -----------------------
+
+ Front
+
+ |----PCMCIA CONNECTOR-----|
+ | |
+ | HT04A MB624018 MB624019 |
+ | AT28C16 |
+ | |
+ | 29F017A.1L 29F017A.1U |
+ | 90PFTR 90PFTN |
+ | |
+ | 29F017A.2L 29F017A.2U |
+ | 90PFTN 90PFTR |
+ | |
+ | 29F017A.3L 29F017A.3U |
+ | 90PFTR 90PFTN |
+ | |
+ | 29F017A.4L 29F017A.4U |
+ | 90PFTN 90PFTR |
+ | |
+ |------------------SWITCH-|
+
+ Back
+
+ |----PCMCIA CONNECTOR-----|
+ | |
+ | |
+ | |
+ | |
+ | 29F017A.5U 29F017A.5L |
+ | 90PFTR 90PFTN |
+ | |
+ | 29F017A.6U 29F017A.6L |
+ | 90PFTN 90PFTR |
+ | |
+ | 29F017A.7U 29F017A.7L |
+ | 90PFTR 90PFTN |
+ | |
+ | 29F017A.8U 29F017A.8L |
+ | 90PFTN 90PFTR |
+ | |
+ |-SWITCH------------------|
+
+ Texas Instruments HT04A
+ Fujitsu MB624018 CMOS GATE ARRAY
+ Fujitsu MB624019 CMOS GATE ARRAY
+ Atmel AT28C16 16K (2K x 8) Parallel EEPROM
+ Fujitsu 29F017A-90PFTR 16M (2M x 8) BIT Flash Memory Reverse Pinout (Gachaga Champ card used 29F017-12PFTR instead)
+ Fujitsu 29F017A-90PFTN 16M (2M x 8) BIT Flash Memory Standard Pinout
+
+*/
+
+#include "emu.h"
+#include "linflash.h"
+
+#define LOG_READ (1U << 1)
+#define LOG_WRITE (1U << 2)
+
+//#define VERBOSE (LOG_READ | LOG_WRITE)
+//#define LOG_OUTPUT_FUNC osd_printf_info
+#include "logmacro.h"
+
+#define LOGREAD(...) LOGMASKED(LOG_READ, __VA_ARGS__)
+#define LOGWRITE(...) LOGMASKED(LOG_WRITE, __VA_ARGS__)
+
+linear_flash_pccard_device::linear_flash_pccard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor amap) :
+ device_t(mconfig, type, tag, owner, clock),
+ device_pccard_interface(mconfig, *this),
+ device_memory_interface(mconfig, *this),
+ m_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, amap),
+ m_wp(0)
+{
+}
+
+namespace {
+
+static INPUT_PORTS_START(linflash)
+ PORT_START("CONF")
+ PORT_CONFNAME(0x01, 0x00, "Write Protect") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, linear_flash_pccard_device, update_wp)
+ PORT_CONFSETTING( 0x01, DEF_STR(Yes))
+ PORT_CONFSETTING( 0x00, DEF_STR(No))
+INPUT_PORTS_END
+
+}; // anonymous namespace
+
+ioport_constructor linear_flash_pccard_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(linflash);
+}
+
+void linear_flash_pccard_device::device_start()
+{
+ m_space = &space(0);
+ m_cd1_cb(0);
+ m_cd2_cb(0);
+
+ // Correct for ID245P01, TODO: check other cards
+ m_bvd1_cb(1);
+ m_bvd2_cb(1);
+
+ save_item(NAME(m_wp));
+
+ m_wp_cb(m_wp);
+}
+
+device_memory_interface::space_config_vector linear_flash_pccard_device::memory_space_config() const
+{
+ return space_config_vector{ std::make_pair(0, &m_space_config) };
+}
+
+uint16_t linear_flash_pccard_device::read_memory(offs_t offset, uint16_t mem_mask)
+{
+ uint16_t data = m_space->read_word(offset * 2, mem_mask);
+ LOGREAD("%s read_memory(%08x, %08x) %08x\n", machine().describe_context(), offset, mem_mask, data);
+ return data;
+}
+
+void linear_flash_pccard_device::write_memory(offs_t offset, uint16_t data, uint16_t mem_mask)
+{
+ LOGWRITE("%s write_memory(%08x, %08x, %08x)%s\n", machine().describe_context(), offset, data, mem_mask, m_wp ? " (write protected)" : "");
+ if (!m_wp)
+ m_space->write_word(offset * 2, data, mem_mask);
+}
+
+void linear_flash_pccard_device::update_wp(int state)
+{
+ if (m_wp != state)
+ {
+ m_wp = state;
+ m_wp_cb(m_wp);
+ }
+}
+
+
+template<unsigned N>
+linear_flash_pccard_8bit_device<N>::linear_flash_pccard_8bit_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_device(mconfig, type, tag, owner, clock, address_map_constructor(FUNC(linear_flash_pccard_8bit_device<N>::amap), this)),
+ m_l(*this, "%ul", 1U),
+ m_u(*this, "%uu", 1U)
+{
+}
+
+template<unsigned N>
+void linear_flash_pccard_8bit_device<N>::amap(address_map &map)
+{
+ map.global_mask((N * 0x00400000) - 1);
+
+ for (size_t i = 0; i < N; i++)
+ {
+ map(0x00400000 * i, (0x00400000 * (i + 1)) - 1).rw(m_l[i], FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
+ map(0x00400000 * i, (0x00400000 * (i + 1)) - 1).rw(m_u[i], FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
+ }
+}
+
+
+template<unsigned N>
+linear_flash_pccard_16bit_device<N>::linear_flash_pccard_16bit_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_device(mconfig, type, tag, owner, clock, address_map_constructor(FUNC(linear_flash_pccard_16bit_device<N>::amap), this)),
+ m_flash(*this, "flash.%u", 1U)
+{
+}
+
+template<unsigned N>
+void linear_flash_pccard_16bit_device<N>::amap(address_map &map)
+{
+ map.global_mask((m_flash.size() * 0x00800000) - 1);
+
+ for (size_t i = 0; i < N; i++)
+ map(0x00800000 * i, (0x00800000 * (i + 1)) - 1).rw(m_flash[i], FUNC(intelfsh16_device::read), FUNC(intelfsh16_device::write));
+}
+
+
+template<unsigned N>
+linear_flash_pccard_29f017a_device<N>::linear_flash_pccard_29f017a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_8bit_device<N>(mconfig, type, tag, owner, clock)
+{
+}
+
+template<unsigned N>
+void linear_flash_pccard_29f017a_device<N>::device_add_mconfig(machine_config &config)
+{
+ for (size_t i = 0; i < N; i++)
+ {
+ FUJITSU_29F016A(config, linear_flash_pccard_8bit_device<N>::m_l[i]);
+ FUJITSU_29F016A(config, linear_flash_pccard_8bit_device<N>::m_u[i]);
+ }
+}
+
+
+template<unsigned N>
+linear_flash_pccard_lh28f016s_device<N>::linear_flash_pccard_lh28f016s_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_8bit_device<N>(mconfig, type, tag, owner, clock)
+{
+}
+
+
+template<unsigned N>
+void linear_flash_pccard_lh28f016s_device<N>::device_add_mconfig(machine_config &config)
+{
+ for (size_t i = 0; i < N; i++)
+ {
+ SHARP_LH28F016S(config, linear_flash_pccard_8bit_device<N>::m_l[i]);
+ SHARP_LH28F016S(config, linear_flash_pccard_8bit_device<N>::m_u[i]);
+ }
+}
+
+
+template<unsigned N>
+linear_flash_pccard_28f640j5_device<N>::linear_flash_pccard_28f640j5_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_16bit_device<N>(mconfig, type, tag, owner, clock)
+{
+}
+
+template<unsigned N>
+void linear_flash_pccard_28f640j5_device<N>::device_add_mconfig(machine_config &config)
+{
+ for (size_t i = 0; i < N; i++)
+ INTEL_28F640J5(config, linear_flash_pccard_16bit_device<N>::m_flash[i]);
+}
+
+fujitsu_16mb_flash_card_device::fujitsu_16mb_flash_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_29f017a_device(mconfig, FUJITSU_16MB_FLASH_CARD, tag, owner, clock)
+{
+}
+
+fujitsu_32mb_flash_card_device::fujitsu_32mb_flash_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_29f017a_device(mconfig, FUJITSU_32MB_FLASH_CARD, tag, owner, clock)
+{
+}
+
+id245p01_device::id245p01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_lh28f016s_device(mconfig, ID245P01, tag, owner, clock)
+{
+}
+
+pm24276_device::pm24276_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
+ linear_flash_pccard_28f640j5_device(mconfig, PM24276, tag, owner, clock)
+{
+}
+
+DEFINE_DEVICE_TYPE(FUJITSU_16MB_FLASH_CARD, fujitsu_16mb_flash_card_device, "fujitsu_16mb_flash_card", "Fujitsu 16MB Flash Card")
+DEFINE_DEVICE_TYPE(FUJITSU_32MB_FLASH_CARD, fujitsu_32mb_flash_card_device, "fujitsu_32mb_flash_card", "Fujitsu 32MB Flash Card")
+DEFINE_DEVICE_TYPE(ID245P01, id245p01_device, "id245p01", "Sharp ID245P01 32MB Linear Flash Memory Card")
+DEFINE_DEVICE_TYPE(PM24276, pm24276_device, "pm24276", "PM24276 32MB Linear Flash Memory Card")
diff --git a/src/devices/bus/pccard/linflash.h b/src/devices/bus/pccard/linflash.h
new file mode 100644
index 00000000000..fb214b68d85
--- /dev/null
+++ b/src/devices/bus/pccard/linflash.h
@@ -0,0 +1,124 @@
+// license:GPL-2.0+
+// copyright-holders:smf
+#ifndef MAME_BUS_PCCARD_LINFLASH_H
+#define MAME_BUS_PCCARD_LINFLASH_H
+
+#pragma once
+
+#include "machine/intelfsh.h"
+#include "pccard.h"
+
+class linear_flash_pccard_device :
+ public device_t,
+ public device_pccard_interface,
+ public device_memory_interface
+{
+public:
+ virtual uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0) override;
+ virtual void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+
+ void update_wp(int state);
+
+protected:
+ linear_flash_pccard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, address_map_constructor amap);
+
+ // device_t
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+
+ // device_memory_interface
+ virtual space_config_vector memory_space_config() const override;
+
+ address_space_config m_space_config;
+ address_space *m_space;
+ int8_t m_wp;
+};
+
+template<unsigned N>
+class linear_flash_pccard_8bit_device :
+ public linear_flash_pccard_device
+{
+protected:
+ linear_flash_pccard_8bit_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ void amap(address_map &map);
+
+ required_device_array<intelfsh8_device, N> m_l;
+ required_device_array<intelfsh8_device, N> m_u;
+};
+
+template<unsigned N>
+class linear_flash_pccard_16bit_device :
+ public linear_flash_pccard_device
+{
+protected:
+ linear_flash_pccard_16bit_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ void amap(address_map &map);
+
+ required_device_array<intelfsh16_device, N> m_flash;
+};
+
+template<unsigned N>
+class linear_flash_pccard_29f017a_device :
+ public linear_flash_pccard_8bit_device<N>
+{
+protected:
+ linear_flash_pccard_29f017a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device_t
+ virtual void device_add_mconfig(machine_config &config) override;
+};
+
+template<unsigned N>
+class linear_flash_pccard_lh28f016s_device :
+ public linear_flash_pccard_8bit_device<N>
+{
+protected:
+ linear_flash_pccard_lh28f016s_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device_t
+ virtual void device_add_mconfig(machine_config &config) override;
+};
+
+template<unsigned N>
+class linear_flash_pccard_28f640j5_device :
+ public linear_flash_pccard_16bit_device<N>
+{
+protected:
+ linear_flash_pccard_28f640j5_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ // device_t
+ virtual void device_add_mconfig(machine_config &config) override;
+};
+
+class fujitsu_16mb_flash_card_device : public linear_flash_pccard_29f017a_device<4>
+{
+public:
+ fujitsu_16mb_flash_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+class fujitsu_32mb_flash_card_device : public linear_flash_pccard_29f017a_device<8>
+{
+public:
+ fujitsu_32mb_flash_card_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+class id245p01_device : public linear_flash_pccard_lh28f016s_device<8>
+{
+public:
+ id245p01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+class pm24276_device : public linear_flash_pccard_28f640j5_device<4>
+{
+public:
+ pm24276_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
+DECLARE_DEVICE_TYPE(FUJITSU_16MB_FLASH_CARD, fujitsu_16mb_flash_card_device)
+DECLARE_DEVICE_TYPE(FUJITSU_32MB_FLASH_CARD, fujitsu_32mb_flash_card_device)
+DECLARE_DEVICE_TYPE(ID245P01, id245p01_device)
+DECLARE_DEVICE_TYPE(PM24276, pm24276_device)
+
+#endif // MAME_BUS_PCCARD_LINFLASH_H
diff --git a/src/devices/machine/pccard.cpp b/src/devices/bus/pccard/pccard.cpp
index 3171e85e68d..f90d01510da 100644
--- a/src/devices/machine/pccard.cpp
+++ b/src/devices/bus/pccard/pccard.cpp
@@ -1,4 +1,4 @@
-// license:BSD-3-Clause
+// license:GPL-2.0+
// copyright-holders:smf
#include "emu.h"
#include "pccard.h"
@@ -6,10 +6,13 @@
//#define VERBOSE 1
#include "logmacro.h"
-
device_pccard_interface::device_pccard_interface(const machine_config &mconfig, device_t &device) :
device_interface(device, "pccard"),
- m_slot(dynamic_cast<pccard_slot_device *>(device.owner()))
+ m_cd1_cb(*this),
+ m_cd2_cb(*this),
+ m_bvd1_cb(*this),
+ m_bvd2_cb(*this),
+ m_wp_cb(*this)
{
}
@@ -39,100 +42,81 @@ void device_pccard_interface::write_reg(offs_t offset, uint16_t data, uint16_t m
device().logerror("unhandled register write %08x %04x %04x\n", offset, data, mem_mask);
}
-DEFINE_DEVICE_TYPE(PCCARD_SLOT, pccard_slot_device, "pccard", "PC Card Slot")
-
pccard_slot_device::pccard_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, PCCARD_SLOT, tag, owner, clock),
device_single_card_slot_interface<device_pccard_interface>(mconfig, *this),
- m_card_detect_cb(*this),
- m_battery_voltage_1_cb(*this),
- m_battery_voltage_2_cb(*this),
- m_write_protect_cb(*this),
- m_pccard(nullptr)
+ device_pccard_interface(mconfig, *this)
+{
+}
+
+void pccard_slot_device::device_config_complete()
{
+ m_dev = get_card_device();
+ if (m_dev)
+ {
+ m_dev->cd1().set(*this, FUNC(pccard_slot_device::update_cd1));
+ m_dev->cd2().set(*this, FUNC(pccard_slot_device::update_cd2));
+ m_dev->bvd1().set(*this, FUNC(pccard_slot_device::update_bvd1));
+ m_dev->bvd2().set(*this, FUNC(pccard_slot_device::update_bvd2));
+ m_dev->wp().set(*this, FUNC(pccard_slot_device::update_wp));
+ }
}
void pccard_slot_device::device_start()
{
- m_pccard = get_card_device();
}
uint16_t pccard_slot_device::read_memory(offs_t offset, uint16_t mem_mask)
{
- if (m_pccard)
- return m_pccard->read_memory(offset, mem_mask);
+ if (m_dev)
+ return m_dev->read_memory(offset, mem_mask);
else
return 0xffff;
}
void pccard_slot_device::write_memory(offs_t offset, uint16_t data, uint16_t mem_mask)
{
- if (m_pccard)
- m_pccard->write_memory(offset, data, mem_mask);
+ if (m_dev)
+ m_dev->write_memory(offset, data, mem_mask);
}
uint16_t pccard_slot_device::read_reg(offs_t offset, uint16_t mem_mask)
{
- if (m_pccard)
- return m_pccard->read_reg(offset, mem_mask);
+ if (m_dev)
+ return m_dev->read_reg(offset, mem_mask);
else
return 0xffff;
}
void pccard_slot_device::write_reg(offs_t offset, uint16_t data, uint16_t mem_mask)
{
- if (m_pccard)
- m_pccard->write_reg(offset, data, mem_mask);
+ if (m_dev)
+ m_dev->write_reg(offset, data, mem_mask);
}
-uint8_t pccard_slot_device::read_memory_byte(offs_t offset)
+void pccard_slot_device::update_cd1(int state)
{
- uint8_t data = 0xff;
-
- if (m_pccard)
- {
- if (BIT(offset, 0))
- data = m_pccard->read_memory(offset / 2, 0xff00) >> 8;
- else
- data = m_pccard->read_memory(offset / 2, 0x00ff) >> 0;
- }
-
- return data;
+ m_cd1_cb(state);
}
-uint8_t pccard_slot_device::read_reg_byte(offs_t offset)
+void pccard_slot_device::update_cd2(int state)
{
- uint8_t data = 0xff;
-
- if (m_pccard)
- {
- if (BIT(offset, 0))
- data = m_pccard->read_reg(offset / 2, 0xff00) >> 8;
- else
- data = m_pccard->read_reg(offset / 2, 0x00ff) >> 0;
- }
+ m_cd2_cb(state);
+}
- return data;
+void pccard_slot_device::update_bvd1(int state)
+{
+ m_bvd1_cb(state);
}
-void pccard_slot_device::write_memory_byte(offs_t offset, uint8_t data)
+void pccard_slot_device::update_bvd2(int state)
{
- if (m_pccard)
- {
- if (BIT(offset, 0))
- m_pccard->write_memory(offset / 2, data << 8, 0xff00);
- else
- m_pccard->write_memory(offset / 2, data << 0, 0x00ff);
- }
+ m_bvd2_cb(state);
}
-void pccard_slot_device::write_reg_byte(offs_t offset, uint8_t data)
+void pccard_slot_device::update_wp(int state)
{
- if (m_pccard)
- {
- if (BIT(offset, 0))
- m_pccard->write_reg(offset / 2, data << 8, 0xff00);
- else
- m_pccard->write_reg(offset / 2, data << 0, 0x00ff);
- }
+ m_wp_cb(state);
}
+
+DEFINE_DEVICE_TYPE(PCCARD_SLOT, pccard_slot_device, "pccard", "PC Card Slot")
diff --git a/src/devices/bus/pccard/pccard.h b/src/devices/bus/pccard/pccard.h
new file mode 100644
index 00000000000..c36e99bf9f1
--- /dev/null
+++ b/src/devices/bus/pccard/pccard.h
@@ -0,0 +1,87 @@
+// license:GPL-2.0+
+// copyright-holders:smf
+#ifndef MAME_BUS_PCCARD_PCCARD_H
+#define MAME_BUS_PCCARD_PCCARD_H
+
+#pragma once
+
+class pccard_slot_device;
+
+class device_pccard_interface :
+ public device_interface
+{
+public:
+ virtual ~device_pccard_interface() {}
+
+ virtual uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0);
+ virtual uint16_t read_reg(offs_t offset, uint16_t mem_mask = ~0);
+ virtual void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+ virtual void write_reg(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
+
+ // 16-bit byte swapped trampolines
+ uint16_t read_memory_swap(offs_t offset, uint16_t mem_mask = 0xffff) { return swapendian_int16(read_memory(offset, swapendian_int16(mem_mask))); }
+ uint16_t read_reg_swap(offs_t offset, uint16_t mem_mask = 0xffff) { return swapendian_int16(read_reg(offset, swapendian_int16(mem_mask))); }
+ void write_memory_swap(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff) { write_memory(offset, swapendian_int16(data), swapendian_int16(mem_mask)); }
+ void write_reg_swap(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff) { write_reg(offset, swapendian_int16(data), swapendian_int16(mem_mask)); }
+
+ // 8-bit trampolines
+ uint8_t read_memory_byte(offs_t offset) { return read_memory(offset >> 1, 0xff << (BIT(offset, 0) * 8)) >> (BIT(offset, 0) * 8); }
+ uint8_t read_reg_byte(offs_t offset) { return read_reg(offset >> 1, 0xff << (BIT(offset, 0) * 8)) >> (BIT(offset, 0) * 8); }
+ void write_memory_byte(offs_t offset, uint8_t data) { write_memory(offset >> 1, data << (BIT(offset, 0) * 8), 0xff << (BIT(offset, 0) * 8)); }
+ void write_reg_byte(offs_t offset, uint8_t data) { write_reg(offset >> 1, data << (BIT(offset, 0) * 8), 0xff << (BIT(offset, 0) * 8)); }
+
+ auto cd1() { return m_cd1_cb.bind(); }
+ auto cd2() { return m_cd2_cb.bind(); }
+ auto bvd1() { return m_bvd1_cb.bind(); }
+ auto bvd2() { return m_bvd2_cb.bind(); }
+ auto wp() { return m_wp_cb.bind(); }
+
+protected:
+ device_pccard_interface(const machine_config &mconfig, device_t &device);
+
+ devcb_write_line m_cd1_cb;
+ devcb_write_line m_cd2_cb;
+ devcb_write_line m_bvd1_cb;
+ devcb_write_line m_bvd2_cb;
+ devcb_write_line m_wp_cb;
+};
+
+class pccard_slot_device :
+ public device_t,
+ public device_single_card_slot_interface<device_pccard_interface>,
+ public device_pccard_interface
+{
+public:
+ pccard_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ template <typename T>
+ pccard_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
+ : pccard_slot_device(mconfig, tag, owner, (uint32_t)0)
+ {
+ option_reset();
+ opts(*this);
+ set_default_option(dflt);
+ set_fixed(false);
+ }
+
+ virtual uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0) override;
+ virtual uint16_t read_reg(offs_t offset, uint16_t mem_mask = ~0) override;
+ virtual void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+ virtual void write_reg(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
+
+protected:
+ virtual void device_config_complete() override;
+ virtual void device_start() override;
+
+ void update_cd1(int state);
+ void update_cd2(int state);
+ void update_bvd1(int state);
+ void update_bvd2(int state);
+ void update_wp(int state);
+
+ device_pccard_interface *m_dev;
+};
+
+DECLARE_DEVICE_TYPE(PCCARD_SLOT, pccard_slot_device)
+
+#endif // MAME_BUS_PCCARD_PCCARD_H
diff --git a/src/devices/machine/pccard_sram.cpp b/src/devices/bus/pccard/sram.cpp
index 5275b4367ce..7ae74e13abe 100644
--- a/src/devices/machine/pccard_sram.cpp
+++ b/src/devices/bus/pccard/sram.cpp
@@ -7,7 +7,7 @@
***************************************************************************/
#include "emu.h"
-#include "pccard_sram.h"
+#include "sram.h"
#include "machine/nvram.h"
#define LOG_ATTRIBUTE (1U << 1)
@@ -34,15 +34,15 @@ DEFINE_DEVICE_TYPE(PCCARD_SRAM_CENTENNIAL_4M, pccard_centennial_sl04m_15_11194_d
static INPUT_PORTS_START( card )
PORT_START("switches")
- PORT_CONFNAME(0x01, 0x00, "Battery Failed") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, pccard_sram_device, battery_voltage_1_w)
- PORT_CONFSETTING( 0x01, DEF_STR(Yes))
- PORT_CONFSETTING( 0x00, DEF_STR(No))
- PORT_CONFNAME(0x02, 0x00, "Battery Low") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, pccard_sram_device, battery_voltage_2_w)
- PORT_CONFSETTING( 0x02, DEF_STR(Yes))
- PORT_CONFSETTING( 0x00, DEF_STR(No))
- PORT_CONFNAME(0x04, 0x04, "Write Protect") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, pccard_sram_device, write_protect_w)
- PORT_CONFSETTING( 0x04, DEF_STR(No))
+ PORT_CONFNAME(0x01, 0x01, "Battery Failed") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, pccard_sram_device, battery_voltage_1_w)
PORT_CONFSETTING( 0x00, DEF_STR(Yes))
+ PORT_CONFSETTING( 0x01, DEF_STR(No))
+ PORT_CONFNAME(0x02, 0x02, "Battery Low") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, pccard_sram_device, battery_voltage_2_w)
+ PORT_CONFSETTING( 0x00, DEF_STR(Yes))
+ PORT_CONFSETTING( 0x02, DEF_STR(No))
+ PORT_CONFNAME(0x04, 0x00, "Write Protect") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, pccard_sram_device, write_protect_w)
+ PORT_CONFSETTING( 0x04, DEF_STR(Yes))
+ PORT_CONFSETTING( 0x00, DEF_STR(No))
INPUT_PORTS_END
ioport_constructor pccard_sram_device::device_input_ports() const
@@ -64,8 +64,10 @@ pccard_sram_device::pccard_sram_device(const machine_config &mconfig, device_typ
device_memory_interface(mconfig, *this),
device_image_interface(mconfig, *this),
device_pccard_interface(mconfig, *this),
- m_card_detect(false),
- m_switches(*this, "switches")
+ m_cd(1),
+ m_bvd1(1),
+ m_bvd2(1),
+ m_wp(0)
{
}
@@ -75,27 +77,12 @@ pccard_sram_device::pccard_sram_device(const machine_config &mconfig, device_typ
void pccard_sram_device::device_start()
{
-}
-
-//-------------------------------------------------
-// device_reset - device-specific reset
-//-------------------------------------------------
+ save_item(NAME(m_cd));
+ save_item(NAME(m_bvd1));
+ save_item(NAME(m_bvd2));
+ save_item(NAME(m_wp));
-void pccard_sram_device::device_reset()
-{
- // forward initial state of battery/write protect to slot
- if (m_card_detect)
- {
- m_slot->battery_voltage_1_w(BIT(m_switches->read(), 0));
- m_slot->battery_voltage_2_w(BIT(m_switches->read(), 1));
- m_slot->write_protect_w(BIT(m_switches->read(), 2));
- }
- else
- {
- m_slot->battery_voltage_1_w(0);
- m_slot->battery_voltage_2_w(0);
- m_slot->write_protect_w(0);
- }
+ set_cd(m_cd);
}
//-------------------------------------------------
@@ -119,7 +106,7 @@ uint16_t pccard_sram_device::read_memory(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
- if (m_card_detect)
+ if (!m_cd)
data = space(0).read_word(offset * 2, mem_mask);
return data;
@@ -127,7 +114,7 @@ uint16_t pccard_sram_device::read_memory(offs_t offset, uint16_t mem_mask)
void pccard_sram_device::write_memory(offs_t offset, uint16_t data, uint16_t mem_mask)
{
- if (m_card_detect && BIT(m_switches->read(), 2))
+ if (!m_cd && !m_wp)
space(0).write_word(offset * 2, data, mem_mask);
}
@@ -135,7 +122,7 @@ uint16_t pccard_sram_device::read_reg(offs_t offset, uint16_t mem_mask)
{
uint16_t data = 0xffff;
- if (has_configured_map(1) && m_card_detect)
+ if (!m_cd && has_configured_map(1))
data = space(1).read_word(offset * 2, mem_mask);
LOGMASKED(LOG_ATTRIBUTE, "attribute memory r: %06x = %04x & %04x\n", offset, data, mem_mask);
@@ -147,16 +134,52 @@ void pccard_sram_device::write_reg(offs_t offset, uint16_t data, uint16_t mem_ma
{
LOGMASKED(LOG_ATTRIBUTE, "attribute memory w: %06x = %04x & %04x\n", offset, data, mem_mask);
- if (has_configured_map(1) && m_card_detect && BIT(m_switches->read(), 2))
+ if (!m_cd && !m_wp && has_configured_map(1))
space(1).write_word(offset * 2, data & 0x00ff, mem_mask);
}
-void pccard_sram_device::card_inserted(bool state)
+void pccard_sram_device::set_cd(bool state)
+{
+ m_cd = state;
+ m_cd1_cb(m_cd);
+ m_cd2_cb(m_cd);
+ m_bvd1_cb(m_bvd1 || m_cd);
+ m_bvd2_cb(m_bvd2 || m_cd);
+ m_wp_cb(m_wp || m_cd);
+}
+
+void pccard_sram_device::battery_voltage_1_w(int state)
{
- m_card_detect = state;
- m_slot->card_detect_w(state ? 1 : 0);
+ if (m_bvd1 != state)
+ {
+ m_bvd1 = state;
+
+ if (!m_cd)
+ m_bvd1_cb(m_bvd1);
+ }
}
+void pccard_sram_device::battery_voltage_2_w(int state)
+{
+ if (m_bvd2 != state)
+ {
+ m_bvd2 = state;
+
+ if (!m_cd)
+ m_bvd2_cb(m_bvd2);
+ }
+}
+
+void pccard_sram_device::write_protect_w(int state)
+{
+ if (m_wp != state)
+ {
+ m_wp = state;
+
+ if (!m_cd)
+ m_wp_cb(m_wp);
+ }
+}
/***************************************************************************
@@ -174,7 +197,7 @@ pccard_mitsubishi_sram_device::pccard_mitsubishi_sram_device(const machine_confi
std::pair<std::error_condition, std::string> pccard_mitsubishi_sram_device::call_load()
{
- card_inserted(false);
+ set_cd(1);
if (length() != m_sram.bytes())
return std::make_pair(image_error::INVALIDLENGTH, std::string());
@@ -182,14 +205,14 @@ std::pair<std::error_condition, std::string> pccard_mitsubishi_sram_device::call
if (fread(&m_sram[0], m_sram.bytes()) != m_sram.bytes())
return std::make_pair(image_error::UNSPECIFIED, std::string());
- card_inserted(true);
+ set_cd(0);
return std::make_pair(std::error_condition(), std::string());
}
std::pair<std::error_condition, std::string> pccard_mitsubishi_sram_device::call_create(int format_type, util::option_resolution *format_options)
{
- card_inserted(false);
+ set_cd(1);
// clear ram
std::fill_n(&m_sram[0], m_sram.length(), 0);
@@ -197,14 +220,14 @@ std::pair<std::error_condition, std::string> pccard_mitsubishi_sram_device::call
if (fwrite(&m_sram[0], m_sram.bytes()) != m_sram.bytes())
return std::make_pair(image_error::UNSPECIFIED, std::string());
- card_inserted(true);
+ set_cd(0);
return std::make_pair(std::error_condition(), std::string());
}
void pccard_mitsubishi_sram_device::call_unload()
{
- if (m_card_detect && !is_readonly())
+ if (!m_cd && !is_readonly())
{
fseek(0, SEEK_SET);
fwrite(&m_sram[0], m_sram.bytes());
@@ -212,7 +235,7 @@ void pccard_mitsubishi_sram_device::call_unload()
std::fill_n(&m_sram[0], m_sram.length(), 0);
- card_inserted(false);
+ set_cd(1);
}
pccard_mitsubishi_mf31m1_lycat01_device::pccard_mitsubishi_mf31m1_lycat01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
@@ -256,7 +279,7 @@ pccard_centennial_sram_device::pccard_centennial_sram_device(const machine_confi
std::pair<std::error_condition, std::string> pccard_centennial_sram_device::call_load()
{
- card_inserted(false);
+ set_cd(1);
if (length() != m_sram.bytes() + m_eeprom.bytes())
return std::make_pair(image_error::INVALIDLENGTH, std::string());
@@ -267,14 +290,14 @@ std::pair<std::error_condition, std::string> pccard_centennial_sram_device::call
if (fread(&m_eeprom[0], m_eeprom.bytes()) != m_eeprom.bytes())
return std::make_pair(image_error::UNSPECIFIED, std::string());
- card_inserted(true);
+ set_cd(0);
return std::make_pair(std::error_condition(), std::string());
}
std::pair<std::error_condition, std::string> pccard_centennial_sram_device::call_create(int format_type, util::option_resolution *format_options)
{
- card_inserted(false);
+ set_cd(1);
// clear ram
std::fill_n(&m_sram[0], m_sram.length(), 0);
@@ -288,14 +311,14 @@ std::pair<std::error_condition, std::string> pccard_centennial_sram_device::call
if (fwrite(&m_eeprom[0], m_eeprom.bytes()) != m_eeprom.bytes())
return std::make_pair(image_error::UNSPECIFIED, std::string());
- card_inserted(true);
+ set_cd(0);
return std::make_pair(std::error_condition(), std::string());
}
void pccard_centennial_sram_device::call_unload()
{
- if (m_card_detect && !is_readonly())
+ if (!m_cd && !is_readonly())
{
fseek(0, SEEK_SET);
fwrite(&m_sram[0], m_sram.bytes());
@@ -305,7 +328,7 @@ void pccard_centennial_sram_device::call_unload()
std::fill_n(&m_sram[0], m_sram.length(), 0);
std::fill_n(&m_eeprom[0], m_eeprom.length(), 0);
- card_inserted(false);
+ set_cd(1);
}
pccard_centennial_sl01m_15_11194_device::pccard_centennial_sl01m_15_11194_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
diff --git a/src/devices/machine/pccard_sram.h b/src/devices/bus/pccard/sram.h
index f51e21798cb..1cd30a07224 100644
--- a/src/devices/machine/pccard_sram.h
+++ b/src/devices/bus/pccard/sram.h
@@ -6,12 +6,12 @@
***************************************************************************/
-#ifndef MAME_MACHINE_PCCARD_SRAM_H
-#define MAME_MACHINE_PCCARD_SRAM_H
+#ifndef MAME_BUS_PCCARD_SRAM_H
+#define MAME_BUS_PCCARD_SRAM_H
#pragma once
-#include "machine/pccard.h"
+#include "pccard.h"
//**************************************************************************
@@ -27,9 +27,9 @@ class pccard_sram_device :
public device_pccard_interface
{
public:
- void battery_voltage_1_w(int state) { m_slot->battery_voltage_1_w(state); }
- void battery_voltage_2_w(int state) { m_slot->battery_voltage_2_w(state); }
- void write_protect_w(int state) { m_slot->write_protect_w(state); }
+ void battery_voltage_1_w(int state);
+ void battery_voltage_2_w(int state);
+ void write_protect_w(int state);
protected:
// construction/destruction
@@ -38,7 +38,6 @@ protected:
// device_t overrides
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
- virtual void device_reset() override;
// device_memory_interface overrides
virtual space_config_vector memory_space_config() const override;
@@ -59,15 +58,15 @@ protected:
virtual void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
virtual void write_reg(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
- void card_inserted(bool state);
+ void set_cd(bool state);
address_space_config m_memory_space_config;
address_space_config m_attribute_space_config;
- bool m_card_detect;
-
-private:
- required_ioport m_switches;
+ int8_t m_cd;
+ int8_t m_bvd1;
+ int8_t m_bvd2;
+ int8_t m_wp;
};
class pccard_mitsubishi_sram_device : public pccard_sram_device
@@ -163,4 +162,4 @@ DECLARE_DEVICE_TYPE(PCCARD_SRAM_CENTENNIAL_1M, pccard_centennial_sl01m_15_11194_
DECLARE_DEVICE_TYPE(PCCARD_SRAM_CENTENNIAL_2M, pccard_centennial_sl02m_15_11194_device)
DECLARE_DEVICE_TYPE(PCCARD_SRAM_CENTENNIAL_4M, pccard_centennial_sl04m_15_11194_device)
-#endif // MAME_MACHINE_PCCARD_SRAM_H
+#endif // MAME_BUS_PCCARD_SRAM_H
diff --git a/src/devices/machine/gayle.cpp b/src/devices/machine/gayle.cpp
index bb43e8d5188..96aeafacec9 100644
--- a/src/devices/machine/gayle.cpp
+++ b/src/devices/machine/gayle.cpp
@@ -57,7 +57,9 @@ gayle_device::gayle_device(const machine_config &mconfig, const char *tag, devic
m_ide_cs_r_cb(*this, 0xffff),
m_ide_cs_w_cb(*this),
m_gayle_id(0xff),
- m_gayle_id_count(0)
+ m_gayle_id_count(0),
+ m_line_state(0),
+ m_cd{1,1}
{
}
@@ -70,6 +72,7 @@ void gayle_device::device_start()
save_item(NAME(m_gayle_id_count));
save_item(NAME(m_gayle_reg));
save_item(NAME(m_line_state));
+ save_item(NAME(m_cd));
}
//-------------------------------------------------
@@ -205,10 +208,11 @@ void gayle_device::status_w(uint16_t data)
// pcmcia interface re-enabled?
if (BIT(previous, 0) == 1 && BIT(data, 0) == 0)
{
- cc_cd_w(BIT(m_line_state, 6));
- cc_bvd1_w(BIT(m_line_state, 5));
- cc_bvd2_w(BIT(m_line_state, 4));
- cc_wp_w(BIT(m_line_state, 3));
+ cc_cd1_w(m_cd[0]);
+ cc_cd2_w(m_cd[1]);
+ cc_bvd1_w(!BIT(m_line_state, 5));
+ cc_bvd2_w(!BIT(m_line_state, 4));
+ cc_wp_w(!BIT(m_line_state, 3));
}
}
@@ -364,28 +368,36 @@ void gayle_device::ide_interrupt_w(int state)
// CREDIT CARD
//**************************************************************************
-void gayle_device::cc_cd_w(int state)
+void gayle_device::cc_cd1_w(int state)
{
- LOGMASKED(LOG_CC, "cc_cd_w: %d\n", state);
- line_change(LINE_CC_DET, state, 6);
+ LOGMASKED(LOG_CC, "cc1_cd1_w: %d\n", state);
+ m_cd[0] = state;
+ line_change(LINE_CC_DET, !(m_cd[0] || m_cd[1]), 6);
+}
+
+void gayle_device::cc_cd2_w(int state)
+{
+ LOGMASKED(LOG_CC, "cc1_cd2_w: %d\n", state);
+ m_cd[1] = state;
+ line_change(LINE_CC_DET, !(m_cd[0] || m_cd[1]), 6);
}
void gayle_device::cc_bvd1_w(int state)
{
LOGMASKED(LOG_CC, "cc_bvd1_w: %d\n", state);
- line_change(LINE_CC_BVD1_SC, state, BIT(m_gayle_reg[REG_INT], 1) ? 6 : 2);
+ line_change(LINE_CC_BVD1_SC, !state, BIT(m_gayle_reg[REG_INT], 1) ? 6 : 2);
}
void gayle_device::cc_bvd2_w(int state)
{
LOGMASKED(LOG_CC, "cc_bvd2_w: %d\n", state);
- line_change(LINE_CC_BVD2_DA, state, BIT(m_gayle_reg[REG_INT], 1) ? 6 : 2);
+ line_change(LINE_CC_BVD2_DA, !state, BIT(m_gayle_reg[REG_INT], 1) ? 6 : 2);
}
void gayle_device::cc_wp_w(int state)
{
LOGMASKED(LOG_CC, "cc_wp_w: %d\n", state);
- line_change(LINE_CC_WP, state, 2);
+ line_change(LINE_CC_WP, !state, 2);
}
diff --git a/src/devices/machine/gayle.h b/src/devices/machine/gayle.h
index b4c6bbf2b41..fad91716214 100644
--- a/src/devices/machine/gayle.h
+++ b/src/devices/machine/gayle.h
@@ -82,7 +82,8 @@ public:
void ide_interrupt_w(int state);
// credit card signals
- void cc_cd_w(int state);
+ void cc_cd1_w(int state);
+ void cc_cd2_w(int state);
void cc_bvd1_w(int state);
void cc_bvd2_w(int state);
void cc_wp_w(int state);
@@ -148,6 +149,7 @@ private:
// internal latched line state
uint8_t m_line_state;
+ std::array<int8_t, 2> m_cd;
};
// device type definition
diff --git a/src/devices/machine/linflash.cpp b/src/devices/machine/linflash.cpp
deleted file mode 100644
index dcb87a685ba..00000000000
--- a/src/devices/machine/linflash.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:smf
-#include "emu.h"
-#include "linflash.h"
-
-DEFINE_DEVICE_TYPE(LINEAR_FLASH_PCCARD_16MB, linear_flash_pccard_16mb_device, "linearflash16mb", "Linear Flash PC Card (16MB)")
-DEFINE_DEVICE_TYPE(LINEAR_FLASH_PCCARD_32MB, linear_flash_pccard_32mb_device, "linearflash32mb", "Linear Flash PC Card (32MB)")
-DEFINE_DEVICE_TYPE(LINEAR_FLASH_PCCARD_64MB, linear_flash_pccard_64mb_device, "linearflash64mb", "Linear Flash PC Card (64MB)")
-
-
-linear_flash_pccard_device::linear_flash_pccard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
- device_t(mconfig, type, tag, owner, clock),
- device_pccard_interface(mconfig, *this),
- device_memory_interface(mconfig, *this),
- m_space(nullptr)
-{
-}
-
-void linear_flash_pccard_device::device_start()
-{
- m_space = &space(0);
-}
-
-void linear_flash_pccard_device::device_reset()
-{
- m_slot->card_detect_w(1);
-}
-
-device_memory_interface::space_config_vector linear_flash_pccard_device::memory_space_config() const
-{
- return space_config_vector{ std::make_pair(0, &m_space_config) };
-}
-
-uint16_t linear_flash_pccard_device::read_memory(offs_t offset, uint16_t mem_mask)
-{
- uint16_t data = m_space->read_word(offset * 2, mem_mask);
- //printf( "<%08x %04x %04x\n", offset, data, mem_mask );
- return data;
-}
-
-void linear_flash_pccard_device::write_memory(offs_t offset, uint16_t data, uint16_t mem_mask)
-{
- //printf( ">%08x %04x %04x\n", offset, data, mem_mask );
- m_space->write_word(offset * 2, data, mem_mask);
-}
-
-
-void linear_flash_pccard_16mb_device::linear_flash_pccard_16mb(address_map &map)
-{
- map.unmap_value_high();
- map(0x00000000, 0x003fffff).rw("1l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00000000, 0x003fffff).rw("1u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00400000, 0x007fffff).rw("2l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00400000, 0x007fffff).rw("2u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00800000, 0x00bfffff).rw("3l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00800000, 0x00bfffff).rw("3u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00c00000, 0x00ffffff).rw("4l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00c00000, 0x00ffffff).rw("4u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
-}
-
-linear_flash_pccard_16mb_device::linear_flash_pccard_16mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- linear_flash_pccard_device(mconfig, LINEAR_FLASH_PCCARD_16MB, tag, owner, clock)
-{
- m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, address_map_constructor(FUNC(linear_flash_pccard_16mb_device::linear_flash_pccard_16mb), this));
-}
-
-void linear_flash_pccard_16mb_device::device_add_mconfig(machine_config &config)
-{
- FUJITSU_29F016A(config, "1l");
- FUJITSU_29F016A(config, "1u");
- FUJITSU_29F016A(config, "2l");
- FUJITSU_29F016A(config, "2u");
- FUJITSU_29F016A(config, "3l");
- FUJITSU_29F016A(config, "3u");
- FUJITSU_29F016A(config, "4l");
- FUJITSU_29F016A(config, "4u");
-}
-
-
-void linear_flash_pccard_32mb_device::linear_flash_pccard_32mb(address_map &map)
-{
- map.unmap_value_high();
- map(0x00000000, 0x003fffff).rw("1l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00000000, 0x003fffff).rw("1u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00400000, 0x007fffff).rw("2l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00400000, 0x007fffff).rw("2u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00800000, 0x00bfffff).rw("3l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00800000, 0x00bfffff).rw("3u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00c00000, 0x00ffffff).rw("4l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00c00000, 0x00ffffff).rw("4u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01000000, 0x013fffff).rw("5l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01000000, 0x013fffff).rw("5u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01400000, 0x017fffff).rw("6l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01400000, 0x017fffff).rw("6u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01800000, 0x01bfffff).rw("7l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01800000, 0x01bfffff).rw("7u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01c00000, 0x01ffffff).rw("8l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01c00000, 0x01ffffff).rw("8u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
-}
-
-linear_flash_pccard_32mb_device::linear_flash_pccard_32mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- linear_flash_pccard_device(mconfig, LINEAR_FLASH_PCCARD_32MB, tag, owner, clock)
-{
- m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, address_map_constructor(FUNC(linear_flash_pccard_32mb_device::linear_flash_pccard_32mb), this));
-}
-
-void linear_flash_pccard_32mb_device::device_add_mconfig(machine_config &config)
-{
- FUJITSU_29F016A(config, "1l");
- FUJITSU_29F016A(config, "1u");
- FUJITSU_29F016A(config, "2l");
- FUJITSU_29F016A(config, "2u");
- FUJITSU_29F016A(config, "3l");
- FUJITSU_29F016A(config, "3u");
- FUJITSU_29F016A(config, "4l");
- FUJITSU_29F016A(config, "4u");
- FUJITSU_29F016A(config, "5l");
- FUJITSU_29F016A(config, "5u");
- FUJITSU_29F016A(config, "6l");
- FUJITSU_29F016A(config, "6u");
- FUJITSU_29F016A(config, "7l");
- FUJITSU_29F016A(config, "7u");
- FUJITSU_29F016A(config, "8l");
- FUJITSU_29F016A(config, "8u");
-}
-
-
-void linear_flash_pccard_64mb_device::linear_flash_pccard_64mb(address_map &map)
-{
- map.unmap_value_high();
- map(0x00000000, 0x003fffff).rw("1l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00000000, 0x003fffff).rw("1u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00400000, 0x007fffff).rw("2l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00400000, 0x007fffff).rw("2u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00800000, 0x00bfffff).rw("3l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00800000, 0x00bfffff).rw("3u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x00c00000, 0x00ffffff).rw("4l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x00c00000, 0x00ffffff).rw("4u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01000000, 0x013fffff).rw("5l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01000000, 0x013fffff).rw("5u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01400000, 0x017fffff).rw("6l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01400000, 0x017fffff).rw("6u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01800000, 0x01bfffff).rw("7l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01800000, 0x01bfffff).rw("7u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x01c00000, 0x01ffffff).rw("8l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x01c00000, 0x01ffffff).rw("8u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x02000000, 0x023fffff).rw("9l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x02000000, 0x023fffff).rw("9u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x02400000, 0x027fffff).rw("10l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x02400000, 0x027fffff).rw("10u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x02800000, 0x02bfffff).rw("11l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x02800000, 0x02bfffff).rw("11u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x02c00000, 0x02ffffff).rw("12l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x02c00000, 0x02ffffff).rw("12u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x03000000, 0x033fffff).rw("13l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x03000000, 0x033fffff).rw("13u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x03400000, 0x037fffff).rw("14l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x03400000, 0x037fffff).rw("14u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x03800000, 0x03bfffff).rw("15l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x03800000, 0x03bfffff).rw("15u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
- map(0x03c00000, 0x03ffffff).rw("16l", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0x00ff);
- map(0x03c00000, 0x03ffffff).rw("16u", FUNC(intelfsh8_device::read), FUNC(intelfsh8_device::write)).umask16(0xff00);
-}
-
-linear_flash_pccard_64mb_device::linear_flash_pccard_64mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
- linear_flash_pccard_device(mconfig, LINEAR_FLASH_PCCARD_64MB, tag, owner, clock)
-{
- m_space_config = address_space_config("memory", ENDIANNESS_LITTLE, 16, 26, 0, address_map_constructor(FUNC(linear_flash_pccard_64mb_device::linear_flash_pccard_64mb), this));
-}
-
-void linear_flash_pccard_64mb_device::device_add_mconfig(machine_config &config)
-{
- FUJITSU_29F016A(config, "1l");
- FUJITSU_29F016A(config, "1u");
- FUJITSU_29F016A(config, "2l");
- FUJITSU_29F016A(config, "2u");
- FUJITSU_29F016A(config, "3l");
- FUJITSU_29F016A(config, "3u");
- FUJITSU_29F016A(config, "4l");
- FUJITSU_29F016A(config, "4u");
- FUJITSU_29F016A(config, "5l");
- FUJITSU_29F016A(config, "5u");
- FUJITSU_29F016A(config, "6l");
- FUJITSU_29F016A(config, "6u");
- FUJITSU_29F016A(config, "7l");
- FUJITSU_29F016A(config, "7u");
- FUJITSU_29F016A(config, "8l");
- FUJITSU_29F016A(config, "8u");
- FUJITSU_29F016A(config, "9l");
- FUJITSU_29F016A(config, "9u");
- FUJITSU_29F016A(config, "10l");
- FUJITSU_29F016A(config, "10u");
- FUJITSU_29F016A(config, "11l");
- FUJITSU_29F016A(config, "11u");
- FUJITSU_29F016A(config, "12l");
- FUJITSU_29F016A(config, "12u");
- FUJITSU_29F016A(config, "13l");
- FUJITSU_29F016A(config, "13u");
- FUJITSU_29F016A(config, "14l");
- FUJITSU_29F016A(config, "14u");
- FUJITSU_29F016A(config, "15l");
- FUJITSU_29F016A(config, "15u");
- FUJITSU_29F016A(config, "16l");
- FUJITSU_29F016A(config, "16u");
-}
diff --git a/src/devices/machine/linflash.h b/src/devices/machine/linflash.h
deleted file mode 100644
index 5cc489af25f..00000000000
--- a/src/devices/machine/linflash.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:smf
-#ifndef MAME_MACHINE_LINFLASH_H
-#define MAME_MACHINE_LINFLASH_H
-
-#pragma once
-
-#include "intelfsh.h"
-#include "machine/pccard.h"
-
-class linear_flash_pccard_device : public device_t,
- public device_pccard_interface,
- public device_memory_interface
-{
-public:
- virtual uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0) override;
- virtual void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0) override;
-
-protected:
- linear_flash_pccard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
-
- // device-level overrides
- virtual void device_start() override;
- virtual void device_reset() override;
-
- // device_memory_interface overrides
- virtual space_config_vector memory_space_config() const override;
-
- address_space_config m_space_config;
- address_space *m_space;
-};
-
-
-class linear_flash_pccard_16mb_device : public linear_flash_pccard_device
-{
-public:
- linear_flash_pccard_16mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
-protected:
- // device-level overrides
- virtual void device_add_mconfig(machine_config &config) override;
-
-private:
- void linear_flash_pccard_16mb(address_map &map);
-};
-
-
-class linear_flash_pccard_32mb_device : public linear_flash_pccard_device
-{
-public:
- linear_flash_pccard_32mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
-protected:
- // device-level overrides
- virtual void device_add_mconfig(machine_config &config) override;
-
-private:
- void linear_flash_pccard_32mb(address_map &map);
-};
-
-
-class linear_flash_pccard_64mb_device : public linear_flash_pccard_device
-{
-public:
- linear_flash_pccard_64mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
-protected:
- // device-level overrides
- virtual void device_add_mconfig(machine_config &config) override;
-
-private:
- void linear_flash_pccard_64mb(address_map &map);
-};
-
-
-DECLARE_DEVICE_TYPE(LINEAR_FLASH_PCCARD_16MB, linear_flash_pccard_16mb_device)
-DECLARE_DEVICE_TYPE(LINEAR_FLASH_PCCARD_32MB, linear_flash_pccard_32mb_device)
-DECLARE_DEVICE_TYPE(LINEAR_FLASH_PCCARD_64MB, linear_flash_pccard_64mb_device)
-
-#endif // MAME_MACHINE_LINFLASH_H
diff --git a/src/devices/machine/pccard.h b/src/devices/machine/pccard.h
deleted file mode 100644
index be60e8465b6..00000000000
--- a/src/devices/machine/pccard.h
+++ /dev/null
@@ -1,85 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:smf
-#ifndef MAME_MACHINE_PCCARD_H
-#define MAME_MACHINE_PCCARD_H
-
-#pragma once
-
-class pccard_slot_device;
-
-class device_pccard_interface : public device_interface
-{
-public:
- virtual uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0);
- virtual uint16_t read_reg(offs_t offset, uint16_t mem_mask = ~0);
- virtual void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- virtual void write_reg(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
-
- virtual ~device_pccard_interface() {}
-
-protected:
- device_pccard_interface(const machine_config &mconfig, device_t &device);
-
- pccard_slot_device *const m_slot;
-};
-
-DECLARE_DEVICE_TYPE(PCCARD_SLOT, pccard_slot_device)
-
-class pccard_slot_device : public device_t, public device_single_card_slot_interface<device_pccard_interface>
-{
-public:
- template <typename T>
- pccard_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
- : pccard_slot_device(mconfig, tag, owner, (uint32_t)0)
- {
- option_reset();
- opts(*this);
- set_default_option(dflt);
- set_fixed(false);
- }
- pccard_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- // callbacks
- auto card_detect_cb() { return m_card_detect_cb.bind(); }
- auto battery_voltage_1_cb() { return m_battery_voltage_1_cb.bind(); }
- auto battery_voltage_2_cb() { return m_battery_voltage_2_cb.bind(); }
- auto write_protect_cb() { return m_write_protect_cb.bind(); }
-
- // called from card device
- void card_detect_w(int state) { m_card_detect_cb(state); }
- void battery_voltage_1_w(int state) { m_battery_voltage_1_cb(state); }
- void battery_voltage_2_w(int state) { m_battery_voltage_2_cb(state); }
- void write_protect_w(int state) { m_write_protect_cb(state); }
-
- // 16-bit access
- uint16_t read_memory(offs_t offset, uint16_t mem_mask = ~0);
- uint16_t read_reg(offs_t offset, uint16_t mem_mask = ~0);
- void write_memory(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
- void write_reg(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
-
- // 16-bit access, even/odd swapped
- uint16_t read_memory_swap(offs_t offset, uint16_t mem_mask = 0xffff) { return swapendian_int16(read_memory(offset, swapendian_int16(mem_mask))); }
- uint16_t read_reg_swap(offs_t offset, uint16_t mem_mask = 0xffff) { return swapendian_int16(read_reg(offset, swapendian_int16(mem_mask))); }
- void write_memory_swap(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff) { write_memory(offset, swapendian_int16(data), swapendian_int16(mem_mask)); }
- void write_reg_swap(offs_t offset, uint16_t data, uint16_t mem_mask = 0xffff) { write_reg(offset, swapendian_int16(data), swapendian_int16(mem_mask)); }
-
- // 8-bit access
- uint8_t read_memory_byte(offs_t offset);
- uint8_t read_reg_byte(offs_t offset);
- void write_memory_byte(offs_t offset, uint8_t data);
- void write_reg_byte(offs_t offset, uint8_t data);
-
-protected:
- virtual void device_start() override;
-
-private:
- devcb_write_line m_card_detect_cb;
- devcb_write_line m_battery_voltage_1_cb;
- devcb_write_line m_battery_voltage_2_cb;
- devcb_write_line m_write_protect_cb;
-
- // internal state
- device_pccard_interface *m_pccard;
-};
-
-#endif // MAME_MACHINE_PCCARD_H
diff --git a/src/devices/machine/rf5c296.h b/src/devices/machine/rf5c296.h
index b5f3beea7fc..936b67f728f 100644
--- a/src/devices/machine/rf5c296.h
+++ b/src/devices/machine/rf5c296.h
@@ -5,7 +5,7 @@
#pragma once
-#include "pccard.h"
+#include "bus/pccard/pccard.h"
class rf5c296_device : public device_t
diff --git a/src/mame/amiga/amiga.cpp b/src/mame/amiga/amiga.cpp
index 30d6dcb9610..b85916308c9 100644
--- a/src/mame/amiga/amiga.cpp
+++ b/src/mame/amiga/amiga.cpp
@@ -18,14 +18,13 @@
#include "bus/amiga/keyboard/keyboard.h"
#include "bus/amiga/zorro/zorro.h"
#include "bus/ata/ataintf.h"
+#include "bus/pccard/sram.h"
#include "cpu/m68000/m68000.h"
#include "cpu/m6502/m6502.h"
#include "machine/6525tpi.h"
#include "machine/mos6526.h"
#include "machine/gayle.h"
#include "machine/dmac.h"
-#include "machine/pccard.h"
-#include "machine/pccard_sram.h"
#include "machine/nvram.h"
#include "machine/i2cmem.h"
#include "machine/amigafdc.h"
@@ -2037,10 +2036,11 @@ void a600_state::a600(machine_config &config)
ata.irq_handler().set("gayle", FUNC(gayle_device::ide_interrupt_w));
PCCARD_SLOT(config, m_pcmcia, pcmcia_devices, nullptr);
- m_pcmcia->card_detect_cb().set("gayle", FUNC(gayle_device::cc_cd_w));
- m_pcmcia->battery_voltage_1_cb().set("gayle", FUNC(gayle_device::cc_bvd1_w));
- m_pcmcia->battery_voltage_2_cb().set("gayle", FUNC(gayle_device::cc_bvd2_w));
- m_pcmcia->write_protect_cb().set("gayle", FUNC(gayle_device::cc_wp_w));
+ m_pcmcia->cd1().set("gayle", FUNC(gayle_device::cc_cd1_w));
+ m_pcmcia->cd2().set("gayle", FUNC(gayle_device::cc_cd2_w));
+ m_pcmcia->bvd1().set("gayle", FUNC(gayle_device::cc_bvd1_w));
+ m_pcmcia->bvd2().set("gayle", FUNC(gayle_device::cc_bvd2_w));
+ m_pcmcia->wp().set("gayle", FUNC(gayle_device::cc_wp_w));
// software
SOFTWARE_LIST(config, "ecs_list").set_original("amigaecs_flop");
@@ -2104,10 +2104,11 @@ void a1200_state::a1200(machine_config &config)
#endif
PCCARD_SLOT(config, m_pcmcia, pcmcia_devices, nullptr);
- m_pcmcia->card_detect_cb().set("gayle", FUNC(gayle_device::cc_cd_w));
- m_pcmcia->battery_voltage_1_cb().set("gayle", FUNC(gayle_device::cc_bvd1_w));
- m_pcmcia->battery_voltage_2_cb().set("gayle", FUNC(gayle_device::cc_bvd2_w));
- m_pcmcia->write_protect_cb().set("gayle", FUNC(gayle_device::cc_wp_w));
+ m_pcmcia->cd1().set("gayle", FUNC(gayle_device::cc_cd1_w));
+ m_pcmcia->cd2().set("gayle", FUNC(gayle_device::cc_cd2_w));
+ m_pcmcia->bvd1().set("gayle", FUNC(gayle_device::cc_bvd1_w));
+ m_pcmcia->bvd2().set("gayle", FUNC(gayle_device::cc_bvd2_w));
+ m_pcmcia->wp().set("gayle", FUNC(gayle_device::cc_wp_w));
// software
SOFTWARE_LIST(config, "aga_list").set_original("amigaaga_flop");
diff --git a/src/mame/amstrad/nc.cpp b/src/mame/amstrad/nc.cpp
index 63e333e2870..87a4af82840 100644
--- a/src/mame/amstrad/nc.cpp
+++ b/src/mame/amstrad/nc.cpp
@@ -44,14 +44,13 @@
#include "bus/centronics/ctronics.h"
#include "bus/rs232/rs232.h"
+#include "bus/pccard/sram.h"
#include "cpu/z80/z80.h"
#include "imagedev/floppy.h"
#include "machine/clock.h"
#include "machine/i8251.h"
#include "machine/mc146818.h"
#include "machine/nvram.h"
-#include "machine/pccard.h"
-#include "machine/pccard_sram.h"
#include "machine/ram.h"
#include "machine/rp5c01.h"
#include "machine/timer.h"
@@ -98,13 +97,17 @@ public:
m_mem_view2(*this, "block2"),
m_mem_view3(*this, "block3"),
m_keyboard(*this, "line%d", 0U),
- m_battery(*this, "battery")
+ m_battery(*this, "battery"),
+ m_pcmcia_card_detect(1),
+ m_pcmcia_write_protect(1),
+ m_pcmcia_battery_voltage_1(1),
+ m_pcmcia_battery_voltage_2(1)
{
}
int pcmcia_card_detect_r() { return m_pcmcia_card_detect; }
int pcmcia_write_protect_r() { return m_pcmcia_write_protect; }
- int pcmcia_battery_voltage_r() { return m_pcmcia_battery_voltage_1 | m_pcmcia_battery_voltage_2; }
+ int pcmcia_battery_voltage_r() { return m_pcmcia_battery_voltage_1 && m_pcmcia_battery_voltage_2; }
void nc_base(machine_config &config);
@@ -449,10 +452,10 @@ static INPUT_PORTS_START( nc100 )
PORT_CONFNAME(0x08, 0x00, "Main Battery")
PORT_CONFSETTING( 0x00, "Good")
PORT_CONFSETTING( 0x08, "Bad")
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc100_state, pcmcia_battery_voltage_r)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc100_state, pcmcia_battery_voltage_r)
PORT_BIT(0x20, 0x00, IPT_UNKNOWN) // input voltage?
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc100_state, pcmcia_write_protect_r)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc100_state, pcmcia_card_detect_r)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc100_state, pcmcia_write_protect_r)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc100_state, pcmcia_card_detect_r)
INPUT_PORTS_END
static INPUT_PORTS_START( nc100de )
@@ -744,12 +747,12 @@ static INPUT_PORTS_START( nc200 )
PORT_CONFSETTING( 0x00, "Good")
PORT_CONFSETTING( 0x04, "Bad")
PORT_BIT(0x08, 0x00, IPT_UNKNOWN)
- PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc200_state, pcmcia_battery_voltage_r)
+ PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc200_state, pcmcia_battery_voltage_r)
PORT_CONFNAME(0x20, 0x00, "Lithium Battery")
PORT_CONFSETTING( 0x00, "Good")
PORT_CONFSETTING( 0x20, "Bad")
- PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc200_state, pcmcia_write_protect_r)
- PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc200_state, pcmcia_card_detect_r)
+ PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc200_state, pcmcia_write_protect_r)
+ PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(nc200_state, pcmcia_card_detect_r)
INPUT_PORTS_END
@@ -1344,10 +1347,10 @@ void nc_state::nc_base(machine_config &config)
rs232.dsr_handler().set(m_uart, FUNC(i8251_device::write_dsr));
PCCARD_SLOT(config, m_pcmcia, pcmcia_devices, nullptr);
- m_pcmcia->card_detect_cb().set(FUNC(nc_state::pcmcia_card_detect_w));
- m_pcmcia->write_protect_cb().set(FUNC(nc_state::pcmcia_write_protect_w));
- m_pcmcia->battery_voltage_1_cb().set(FUNC(nc_state::pcmcia_battery_voltage_1_w));
- m_pcmcia->battery_voltage_2_cb().set(FUNC(nc_state::pcmcia_battery_voltage_2_w));
+ m_pcmcia->cd1().set(FUNC(nc_state::pcmcia_card_detect_w));
+ m_pcmcia->wp().set(FUNC(nc_state::pcmcia_write_protect_w));
+ m_pcmcia->bvd1().set(FUNC(nc_state::pcmcia_battery_voltage_1_w));
+ m_pcmcia->bvd2().set(FUNC(nc_state::pcmcia_battery_voltage_2_w));
}
void nc100_state::nc100(machine_config &config)
diff --git a/src/mame/konami/ksys573.cpp b/src/mame/konami/ksys573.cpp
index c799309ad5f..5a71ecfbd88 100644
--- a/src/mame/konami/ksys573.cpp
+++ b/src/mame/konami/ksys573.cpp
@@ -334,60 +334,7 @@ Notes: (all ICs shown)
U20 - (unpopulated SOIC16)
U21 - (unpopulated SOIC16)
-
- PCMCIA Flash Card
- -----------------
-
- Front
-
- |----PCMCIA CONNECTOR-----|
- | |
- | HT04A MB624018 MB624019 |
- | AT28C16 |
- | |
- | 29F017A.1L 29F017A.1U |
- | 90PFTR 90PFTN |
- | |
- | 29F017A.2L 29F017A.2U |
- | 90PFTN 90PFTR |
- | |
- | 29F017A.3L 29F017A.3U |
- | 90PFTR 90PFTN |
- | |
- | 29F017A.4L 29F017A.4U |
- | 90PFTN 90PFTR |
- | |
- |------------------SWITCH-|
-
- Back
-
- |----PCMCIA CONNECTOR-----|
- | |
- | |
- | |
- | |
- | 29F017A.5U 29F017A.5L |
- | 90PFTR 90PFTN |
- | |
- | 29F017A.6U 29F017A.6L |
- | 90PFTN 90PFTR |
- | |
- | 29F017A.7U 29F017A.7L |
- | 90PFTR 90PFTN |
- | |
- | 29F017A.8U 29F017A.8L |
- | 90PFTN 90PFTR |
- | |
- |-SWITCH------------------|
-
- Texas Instruments HT04A
- Fujitsu MB624018 CMOS GATE ARRAY
- Fujitsu MB624019 CMOS GATE ARRAY
- Atmel AT28C16 16K (2K x 8) Parallel EEPROM
- Fujitsu 29F017A-90PFTR 16M (2M x 8) BIT Flash Memory Reverse Pinout (Gachaga Champ card used 29F017-12PFTR instead)
- Fujitsu 29F017A-90PFTN 16M (2M x 8) BIT Flash Memory Standard Pinout
-
- */
+*/
#include "emu.h"
@@ -397,16 +344,17 @@ Notes: (all ICs shown)
#include "k573mcal.h"
#include "k573mcr.h"
#include "k573msu.h"
-#include "k573npu.h"
#include "cpu/psx/psx.h"
#include "bus/ata/ataintf.h"
#include "bus/ata/cr589.h"
+#include "bus/pccard/k573npu.h"
+#include "bus/pccard/konami_dual.h"
+#include "bus/pccard/linflash.h"
#include "machine/adc083x.h"
#include "machine/bankdev.h"
#include "machine/ds2401.h"
#include "machine/jvshost.h"
-#include "machine/linflash.h"
#include "machine/mb89371.h"
#include "machine/ram.h"
#include "machine/timekpr.h"
@@ -2488,10 +2436,10 @@ void ksys573_state::konami573(machine_config &config, bool no_cdrom)
FUJITSU_29F016A(config, "29f016a.27h");
PCCARD_SLOT(config, m_pccard1, 0);
- m_pccard1->card_detect_cb().set([this](int state) { m_pccard_cd[0] = state; });
+ m_pccard1->cd1().set([this](int state) { m_pccard_cd[0] = state; });
PCCARD_SLOT(config, m_pccard2, 0);
- m_pccard2->card_detect_cb().set([this](int state) { m_pccard_cd[1] = state; });
+ m_pccard2->cd1().set([this](int state) { m_pccard_cd[1] = state; });
ADDRESS_MAP_BANK(config, m_flashbank ).set_map( &ksys573_state::flashbank_map ).set_options( ENDIANNESS_LITTLE, 16, 32, 0x400000);
@@ -2551,26 +2499,28 @@ void ksys573_state::k573ak(machine_config &config)
void ksys573_state::pccard1_16mb(machine_config &config)
{
- m_pccard1->option_add("16mb", LINEAR_FLASH_PCCARD_16MB);
+ m_pccard1->option_add("16mb", FUJITSU_16MB_FLASH_CARD);
m_pccard1->set_default_option("16mb");
}
void ksys573_state::pccard1_32mb(machine_config &config)
{
- m_pccard1->option_add("32mb", LINEAR_FLASH_PCCARD_32MB);
+ m_pccard1->option_add("32mb", FUJITSU_32MB_FLASH_CARD);
+ m_pccard1->option_add("id245p01", ID245P01);
m_pccard1->set_default_option("32mb");
}
void ksys573_state::pccard2_32mb(machine_config &config)
{
- m_pccard2->option_add("32mb", LINEAR_FLASH_PCCARD_32MB);
+ m_pccard2->option_add("32mb", FUJITSU_32MB_FLASH_CARD);
+ m_pccard2->option_add("id245p01", ID245P01);
m_pccard2->set_default_option("32mb");
}
void ksys573_state::pccard2_64mb(machine_config &config)
{
- m_pccard2->option_add("64mb", LINEAR_FLASH_PCCARD_64MB);
- m_pccard2->set_default_option("64mb");
+ m_pccard2->option_add("konami_dual", KONAMI_DUAL_PCCARD);
+ m_pccard2->set_default_option("konami_dual");
}
// Security eeprom variants
@@ -3095,8 +3045,8 @@ static INPUT_PORTS_START( konami573 )
// PORT_BIT( 0x00800000, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x01000000, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02000000, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_BIT( 0x04000000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER( DEVICE_SELF, ksys573_state, pccard_cd_r<0> )
- PORT_BIT( 0x08000000, IP_ACTIVE_LOW, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER( DEVICE_SELF, ksys573_state, pccard_cd_r<1> )
+ PORT_BIT( 0x04000000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER( DEVICE_SELF, ksys573_state, pccard_cd_r<0> )
+ PORT_BIT( 0x08000000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER( DEVICE_SELF, ksys573_state, pccard_cd_r<1> )
PORT_BIT( 0x10000000, IP_ACTIVE_LOW, IPT_SERVICE1 )
// PORT_BIT( 0x20000000, IP_ACTIVE_LOW, IPT_UNKNOWN )
// PORT_BIT( 0x40000000, IP_ACTIVE_LOW, IPT_UNKNOWN )
diff --git a/src/mame/sony/taitogn.cpp b/src/mame/sony/taitogn.cpp
index 504c18f291f..70aad35d05d 100644
--- a/src/mame/sony/taitogn.cpp
+++ b/src/mame/sony/taitogn.cpp
@@ -332,7 +332,7 @@ Type 3 (PCMCIA Compact Flash Adaptor + Compact Flash card, sealed together with
#include "emu.h"
#include "zn.h"
-#include "machine/ataflash.h"
+#include "bus/pccard/ataflash.h"
#include "machine/intelfsh.h"
#include "machine/rf5c296.h"