diff options
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" |