mirror of
https://github.com/holub/mame
synced 2025-04-09 18:17:44 +03:00
casio/casloopy.cpp: Promoted system to working. (#11621)
* Emulated most features of the system, with the exception of sound output and the thermal printer. * bus/vboy/slot.cpp: Fixed loading loose software on big Endian hosts. [Vas Crabb] Systems promoted to working --------------------------- Casio Loopy [Phil Bennett, Ryan Holtz] New working software list items (casloopy.xml) ------------------------------- Chakra-kun no Omajinai Paradise [Rachel Simone Weil]
This commit is contained in:
parent
a5b5686970
commit
cbe16a03a8
@ -5,19 +5,32 @@ license:CC0-1.0
|
||||
-->
|
||||
<softwarelist name="casloopy" description="Casio Loopy cartridges">
|
||||
|
||||
<!-- Undumped titles:
|
||||
- Chakura-kun no Omajinai Paradise (チャクラくんのおまじないパラダイス)
|
||||
-->
|
||||
|
||||
<software name="animelnd">
|
||||
<description>Anime Land</description>
|
||||
<year>1994</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-401"/>
|
||||
<info name="alt_title" value="あにめらんど"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="animelnd.bin" size="0x200000" crc="665cd0a2" sha1="8d50867aba721185560fc92bed75c92263a1da39"/>
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="animelnd.bin" size="0x200000" crc="665cd0a2" sha1="8d50867aba721185560fc92bed75c92263a1da39" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="chakrakun">
|
||||
<description>Chakra-kun no Omajinai Paradise</description>
|
||||
<year>1997</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-405"/>
|
||||
<info name="alt_title" value="チャクラくんのおまじないパラダイス"/>
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="chakrakun.bin" size="0x200000" crc="35539985" sha1="96af1630c77ef1008d697cb65efb6c2e0e6e3f81" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -28,9 +41,11 @@ license:CC0-1.0
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-403"/>
|
||||
<info name="alt_title" value="ドリームチェンジ 小金ちゃんのファッションパーティー"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="dreamchg.bin" size="0x200000" crc="0b850185" sha1="b5d73661ea83167d2b07516c7c66a8a85b28415b"/>
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="dreamchg.bin" size="0x200000" crc="0b850185" sha1="b5d73661ea83167d2b07516c7c66a8a85b28415b" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -41,9 +56,11 @@ license:CC0-1.0
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-402"/>
|
||||
<info name="alt_title" value="HARIHARIシールパラダイス"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="harihari.bin" size="0x200000" crc="39a417d6" sha1="1adbd97181b61a1a65e21976b0146e9dd80fbdbf"/>
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="harihari.bin" size="0x200000" crc="39a417d6" sha1="1adbd97181b61a1a65e21976b0146e9dd80fbdbf" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -54,49 +71,12 @@ license:CC0-1.0
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-503"/>
|
||||
<info name="alt_title" value="リトルロマンス"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x300000">
|
||||
<rom name="d23c16000.ic104" size="0x200000" crc="4406ed81" sha1="32ce9fa7f5d3cb6a9de69f0a54fb3a169cec5432" offset="0x000000" />
|
||||
<rom name="d23c8000.ic105" size="0x100000" crc="a868e597" sha1="87226d26dbb3a95ce8f75a595bd874af6e5cb17b" offset="0x200000" />
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x300000">
|
||||
<rom name="d23c16000.ic104" size="0x200000" offset="0x000000" crc="4406ed81" sha1="32ce9fa7f5d3cb6a9de69f0a54fb3a169cec5432" loadflag="load16_word_swap"/>
|
||||
<rom name="d23c8000.ic105" size="0x100000" offset="0x200000" crc="a868e597" sha1="87226d26dbb3a95ce8f75a595bd874af6e5cb17b" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="nigaoart">
|
||||
<description>Nigaoe Artist</description>
|
||||
<year>1995</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-404"/>
|
||||
<info name="alt_title" value="似顔絵アーティスト"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="nigaoart.bin" size="0x200000" crc="63d59881" sha1="d2b830acf8440e4726e851514d609700375b27db"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="wanwanam">
|
||||
<description>Wanwan Aijou Monogatari</description>
|
||||
<year>1995</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-501"/>
|
||||
<info name="alt_title" value="わんわん愛情物語"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="wanwanam.bin" size="0x200000" crc="291ab2bc" sha1="77a63cf194c5b06633e25b43916629b6f3428870"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pccllect">
|
||||
<description>Pasokon Collection</description>
|
||||
<year>1995</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-502"/>
|
||||
<info name="alt_title" value="パソコン・コレクション"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="pccllect.bin" size="0x200000" crc="9cd4d282" sha1="15ac5a8e71fc8371505da8368d04c9634655d1d5"/>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -107,10 +87,12 @@ license:CC0-1.0
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-504"/>
|
||||
<info name="alt_title" value="ルーピータウンのおへやがほしい!"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x300000">
|
||||
<rom name="CHIP1.IC104" size="0x200000" crc="bae71d45" sha1="79628715ccedd9bc3fd72d21fa9ea6513b88cf51" offset="0x000000" />
|
||||
<rom name="CHIP2.IC105" size="0x100000" crc="e0514d03" sha1="4dd02faa1ebf6754da0ade417e488512f3502620" offset="0x200000" />
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x300000">
|
||||
<rom name="chip1.ic104" size="0x200000" offset="0x000000" crc="bae71d45" sha1="79628715ccedd9bc3fd72d21fa9ea6513b88cf51" loadflag="load16_word_swap"/>
|
||||
<rom name="chip2.ic105" size="0x100000" offset="0x200000" crc="e0514d03" sha1="4dd02faa1ebf6754da0ade417e488512f3502620" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -121,22 +103,70 @@ license:CC0-1.0
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-701"/>
|
||||
<info name="alt_title" value="ルピトンのワンダーパレット"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x200000">
|
||||
<rom name="lupiton.bin" size="0x200000" crc="338a5af7" sha1="ddb3e2b363ef0325a1370511f3692ca47031cb46" />
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="lupiton.bin" size="0x200000" crc="338a5af7" sha1="ddb3e2b363ef0325a1370511f3692ca47031cb46" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="vswordp">
|
||||
<software name="nigaoart">
|
||||
<description>Nigaoe Artist</description>
|
||||
<year>1995</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-404"/>
|
||||
<info name="alt_title" value="似顔絵アーティスト"/>
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="nigaoart.bin" size="0x200000" crc="63d59881" sha1="d2b830acf8440e4726e851514d609700375b27db" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pccllect">
|
||||
<description>Pasokon Collection</description>
|
||||
<year>1995</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-502"/>
|
||||
<info name="alt_title" value="パソコン・コレクション"/>
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="pccllect.bin" size="0x200000" crc="9cd4d282" sha1="15ac5a8e71fc8371505da8368d04c9634655d1d5" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x8000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="vswordp" supported="no">
|
||||
<description>Video Seal Wordprocessor</description>
|
||||
<year>1995</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-700"/>
|
||||
<info name="alt_title" value="Magical Shop"/>
|
||||
<part name="cart" interface="loopy_cart">
|
||||
<dataarea name="rom" size="0x100000">
|
||||
<rom name="mx23c8100.lsi102" size="0x100000" crc="5764591f" sha1="16a2ade7e08f16e44d5c74c714840df1b48da4ad" />
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x100000">
|
||||
<rom name="mx23c8100.lsi102" size="0x100000" crc="5764591f" sha1="16a2ade7e08f16e44d5c74c714840df1b48da4ad" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="wanwanam" supported="partial"> <!-- ADPCM chip not supported -->
|
||||
<description>Wanwan Aijou Monogatari</description>
|
||||
<year>1995</year>
|
||||
<publisher>Casio</publisher>
|
||||
<info name="serial" value="XK-501"/>
|
||||
<info name="alt_title" value="わんわん愛情物語"/>
|
||||
<part name="cart" interface="casloopy_cart">
|
||||
<feature name="slot" value="adpcm"/>
|
||||
<dataarea name="rom" width="16" endianness="big" size="0x200000">
|
||||
<rom name="wanwanam.bin" size="0x200000" crc="291ab2bc" sha1="77a63cf194c5b06633e25b43916629b6f3428870" loadflag="load16_word_swap"/>
|
||||
</dataarea>
|
||||
<dataarea name="nvram" size="0x2000">
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
@ -1026,6 +1026,21 @@ if (BUSES["C64"]~=null) then
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/casloopy/slot.h,BUSES["CASLOOPY"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["CASLOOPY"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/casloopy/slot.cpp",
|
||||
MAME_DIR .. "src/devices/bus/casloopy/slot.h",
|
||||
MAME_DIR .. "src/devices/bus/casloopy/rom.cpp",
|
||||
MAME_DIR .. "src/devices/bus/casloopy/rom.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/cbm2/exp.h,BUSES["CBM2"] = true
|
||||
|
117
src/devices/bus/casloopy/rom.cpp
Normal file
117
src/devices/bus/casloopy/rom.cpp
Normal file
@ -0,0 +1,117 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
/***********************************************************************************************************
|
||||
|
||||
Casio Loopy cart emulation
|
||||
|
||||
***********************************************************************************************************/
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "rom.h"
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// casloopy_rom_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
DEFINE_DEVICE_TYPE(CASLOOPY_ROM_STD, casloopy_rom_device, "casloopy_rom", "Casio Loopy Standard Cart")
|
||||
DEFINE_DEVICE_TYPE(CASLOOPY_ROM_ADPCM, casloopy_adpcm_device, "casloopy_adpcm", "Casio Loopy ADPCM Cart")
|
||||
|
||||
|
||||
casloopy_rom_device::casloopy_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock)
|
||||
: device_t(mconfig, type, tag, owner, clock), device_casloopy_cart_interface(mconfig, *this)
|
||||
, m_rom_base(nullptr)
|
||||
, m_nvram_base(nullptr)
|
||||
, m_rom_size(0)
|
||||
, m_nvram_size(0)
|
||||
{
|
||||
}
|
||||
|
||||
casloopy_rom_device::casloopy_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: casloopy_rom_device(mconfig, CASLOOPY_ROM_STD, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
casloopy_adpcm_device::casloopy_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
|
||||
: casloopy_rom_device(mconfig, CASLOOPY_ROM_ADPCM, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
device_t implementation
|
||||
-------------------------------------------------*/
|
||||
|
||||
void casloopy_rom_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
void casloopy_adpcm_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
casloopy_rom_device::device_add_mconfig(config);
|
||||
|
||||
// TODO: Add support for the MSM6653A ADPCM chip, or samples
|
||||
// and route to the speakers
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
load/unload
|
||||
-------------------------------------------------*/
|
||||
|
||||
std::error_condition casloopy_rom_device::load()
|
||||
{
|
||||
memory_region *const romregion = memregion("^rom");
|
||||
m_rom_base = reinterpret_cast<const u16 *>(romregion->base());
|
||||
m_rom_size = romregion->bytes() / 2;
|
||||
|
||||
memory_region *const nvramregion = memregion("^nvram");
|
||||
if (nvramregion)
|
||||
{
|
||||
m_nvram_base = reinterpret_cast<u8 *>(nvramregion->base());
|
||||
m_nvram_size = nvramregion->bytes();
|
||||
|
||||
if (m_nvram_size & (m_nvram_size - 1))
|
||||
return image_error::BADSOFTWARE;
|
||||
|
||||
save_pointer(NAME(m_nvram_base), m_nvram_size);
|
||||
battery_load(m_nvram_base, m_nvram_size, nullptr);
|
||||
}
|
||||
|
||||
return std::error_condition();
|
||||
}
|
||||
|
||||
|
||||
void casloopy_rom_device::unload()
|
||||
{
|
||||
if (m_nvram_base)
|
||||
battery_save(m_nvram_base, m_nvram_size);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
read/write
|
||||
-------------------------------------------------*/
|
||||
|
||||
u16 casloopy_rom_device::rom_r(offs_t offset)
|
||||
{
|
||||
if (offset < m_rom_size)
|
||||
return m_rom_base[offset];
|
||||
else
|
||||
return 0xffff;
|
||||
}
|
||||
|
||||
u8 casloopy_rom_device::ram_r(offs_t offset)
|
||||
{
|
||||
if (m_nvram_base)
|
||||
return m_nvram_base[offset & (m_nvram_size - 1)];
|
||||
else
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void casloopy_rom_device::ram_w(offs_t offset, u8 data)
|
||||
{
|
||||
if (m_nvram_base)
|
||||
m_nvram_base[offset & (m_nvram_size - 1)] = data;
|
||||
}
|
58
src/devices/bus/casloopy/rom.h
Normal file
58
src/devices/bus/casloopy/rom.h
Normal file
@ -0,0 +1,58 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
#ifndef MAME_BUS_CASLOOPY_ROM_H
|
||||
#define MAME_BUS_CASLOOPY_ROM_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "slot.h"
|
||||
|
||||
|
||||
// ======================> casloopy_rom_device
|
||||
|
||||
class casloopy_rom_device : public device_t,
|
||||
public device_casloopy_cart_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
casloopy_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
// load/unload
|
||||
virtual std::error_condition load() override;
|
||||
virtual void unload() override;
|
||||
|
||||
// read/write
|
||||
virtual u16 rom_r(offs_t offset) override;
|
||||
virtual u8 ram_r(offs_t offset) override;
|
||||
virtual void ram_w(offs_t offset, u8 data) override;
|
||||
|
||||
protected:
|
||||
casloopy_rom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
virtual void device_start() override;
|
||||
|
||||
private:
|
||||
const u16 *m_rom_base;
|
||||
u8 *m_nvram_base;
|
||||
u32 m_rom_size;
|
||||
u32 m_nvram_size;
|
||||
};
|
||||
|
||||
|
||||
// ======================> casloopy_adpcm_device
|
||||
|
||||
class casloopy_adpcm_device : public casloopy_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
casloopy_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
|
||||
protected:
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(CASLOOPY_ROM_STD, casloopy_rom_device)
|
||||
DECLARE_DEVICE_TYPE(CASLOOPY_ROM_ADPCM, casloopy_adpcm_device)
|
||||
|
||||
#endif // MAME_BUS_CASLOOPY_ROM_H
|
149
src/devices/bus/casloopy/slot.cpp
Normal file
149
src/devices/bus/casloopy/slot.cpp
Normal file
@ -0,0 +1,149 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
/***********************************************************************************************************
|
||||
|
||||
Casio Loopy cart slot emulation
|
||||
|
||||
***********************************************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "slot.h"
|
||||
|
||||
//**************************************************************************
|
||||
// GLOBAL VARIABLES
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(CASLOOPY_CART_SLOT, casloopy_cart_slot_device, "casloopy_cart_slot", "Casio Loopy Cartridge Slot")
|
||||
|
||||
//**************************************************************************
|
||||
// casloopy Cartridges Interface
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_casloopy_cart_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_casloopy_cart_interface::device_casloopy_cart_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_interface(device, "casloopy_cart")
|
||||
, m_slot(dynamic_cast<casloopy_cart_slot_device *>(device.owner()))
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ~device_casloopy_cart_interface - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_casloopy_cart_interface::~device_casloopy_cart_interface()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void device_casloopy_cart_interface::battery_load(void *buffer, int length, int fill)
|
||||
{
|
||||
assert(m_slot);
|
||||
m_slot->battery_load(buffer, length, fill);
|
||||
}
|
||||
|
||||
void device_casloopy_cart_interface::battery_load(void *buffer, int length, void *def_buffer)
|
||||
{
|
||||
assert(m_slot);
|
||||
m_slot->battery_load(buffer, length, def_buffer);
|
||||
}
|
||||
|
||||
void device_casloopy_cart_interface::battery_save(const void *buffer, int length)
|
||||
{
|
||||
assert(m_slot);
|
||||
m_slot->battery_save(buffer, length);
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// casloopy_cart_slot_device - constructor
|
||||
//-------------------------------------------------
|
||||
casloopy_cart_slot_device::casloopy_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
|
||||
device_t(mconfig, CASLOOPY_CART_SLOT, tag, owner, clock),
|
||||
device_cartrom_image_interface(mconfig, *this),
|
||||
device_single_card_slot_interface<device_casloopy_cart_interface>(mconfig, *this),
|
||||
m_cart(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// casloopy_cart_slot_device - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
casloopy_cart_slot_device::~casloopy_cart_slot_device()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void casloopy_cart_slot_device::device_start()
|
||||
{
|
||||
m_cart = get_card_device();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
call load
|
||||
-------------------------------------------------*/
|
||||
|
||||
std::pair<std::error_condition, std::string> casloopy_cart_slot_device::call_load()
|
||||
{
|
||||
if (!m_cart)
|
||||
return std::make_pair(std::error_condition(), std::string());
|
||||
|
||||
memory_region *romregion = loaded_through_softlist() ? memregion("rom") : nullptr;
|
||||
if (loaded_through_softlist() && !romregion)
|
||||
return std::make_pair(image_error::INVALIDLENGTH, "Software list item has no 'rom' data area");
|
||||
|
||||
const u32 len = loaded_through_softlist() ? romregion->bytes() : length();
|
||||
|
||||
if (!loaded_through_softlist())
|
||||
{
|
||||
romregion = machine().memory().region_alloc(subtag("rom"), len, 2, ENDIANNESS_BIG);
|
||||
u16 *const rombase = reinterpret_cast<u16 *>(romregion->base());
|
||||
const u32 cnt = fread(rombase, len);
|
||||
if (cnt != len)
|
||||
return std::make_pair(std::errc::io_error, "Error reading cartridge file");
|
||||
|
||||
// CPU is big Endian, but conventional ROM dump format is little Endian
|
||||
if (ENDIANNESS_NATIVE != ENDIANNESS_LITTLE)
|
||||
{
|
||||
for (u32 i = 0; (len / 2) > i; ++i)
|
||||
rombase[i] = swapendian_int16(rombase[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_pair(m_cart->load(), std::string());
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
call unload
|
||||
-------------------------------------------------*/
|
||||
|
||||
void casloopy_cart_slot_device::call_unload()
|
||||
{
|
||||
if (m_cart)
|
||||
m_cart->unload();
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
get default card software
|
||||
-------------------------------------------------*/
|
||||
|
||||
std::string casloopy_cart_slot_device::get_default_card_software(get_default_card_software_hook &hook) const
|
||||
{
|
||||
return software_get_default_slot("std");
|
||||
}
|
90
src/devices/bus/casloopy/slot.h
Normal file
90
src/devices/bus/casloopy/slot.h
Normal file
@ -0,0 +1,90 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Vas Crabb
|
||||
#ifndef MAME_BUS_CASLOOPY_SLOT_H
|
||||
#define MAME_BUS_CASLOOPY_SLOT_H
|
||||
|
||||
#include "imagedev/cartrom.h"
|
||||
|
||||
#include <system_error>
|
||||
#include <utility>
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
class casloopy_cart_slot_device;
|
||||
|
||||
|
||||
class device_casloopy_cart_interface : public device_interface
|
||||
{
|
||||
public:
|
||||
virtual ~device_casloopy_cart_interface();
|
||||
|
||||
// load/unload
|
||||
virtual std::error_condition load() = 0;
|
||||
virtual void unload() = 0;
|
||||
|
||||
// read/write
|
||||
virtual u16 rom_r(offs_t offset) = 0;
|
||||
virtual u8 ram_r(offs_t offset) = 0;
|
||||
virtual void ram_w(offs_t offset, u8 data) = 0;
|
||||
|
||||
protected:
|
||||
// construction/destruction
|
||||
device_casloopy_cart_interface(const machine_config &mconfig, device_t &device);
|
||||
|
||||
// helpers for slot stuff
|
||||
void battery_load(void *buffer, int length, int fill);
|
||||
void battery_load(void *buffer, int length, void *def_buffer);
|
||||
void battery_save(const void *buffer, int length);
|
||||
|
||||
private:
|
||||
casloopy_cart_slot_device *const m_slot;
|
||||
};
|
||||
|
||||
|
||||
class casloopy_cart_slot_device : public device_t,
|
||||
public device_cartrom_image_interface,
|
||||
public device_single_card_slot_interface<device_casloopy_cart_interface>
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
template <typename T>
|
||||
casloopy_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock, T &&opts, char const *dflt)
|
||||
: casloopy_cart_slot_device(mconfig, tag, owner, clock)
|
||||
{
|
||||
option_reset();
|
||||
opts(*this);
|
||||
set_default_option(dflt);
|
||||
set_fixed(false);
|
||||
}
|
||||
casloopy_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
|
||||
virtual ~casloopy_cart_slot_device();
|
||||
|
||||
// device_image_interface implementation
|
||||
virtual std::pair<std::error_condition, std::string> call_load() override;
|
||||
virtual void call_unload() override;
|
||||
|
||||
virtual bool is_reset_on_load() const noexcept override { return true; }
|
||||
virtual const char *image_interface() const noexcept override { return "casloopy_cart"; }
|
||||
virtual const char *file_extensions() const noexcept override { return "bin"; }
|
||||
|
||||
// device_slot_interface implementation
|
||||
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
|
||||
|
||||
// reading and writing
|
||||
u16 rom_r(offs_t offset) { return m_cart ? m_cart->rom_r(offset) : 0xffff; }
|
||||
u8 ram_r(offs_t offset) { return m_cart ? m_cart->ram_r(offset) : 0xff; }
|
||||
void ram_w(offs_t offset, u8 data) { if (m_cart) m_cart->ram_w(offset, data); }
|
||||
|
||||
protected:
|
||||
// device_t implementation
|
||||
virtual void device_start() override;
|
||||
|
||||
device_casloopy_cart_interface *m_cart;
|
||||
};
|
||||
|
||||
DECLARE_DEVICE_TYPE(CASLOOPY_CART_SLOT, casloopy_cart_slot_device)
|
||||
|
||||
#endif // MAME_BUS_CASLOOPY_SLOT_H
|
@ -66,9 +66,16 @@ std::pair<std::error_condition, std::string> vboy_cart_slot_device::call_load()
|
||||
{
|
||||
LOG("Allocating %u byte cartridge ROM region\n", len);
|
||||
romregion = machine().memory().region_alloc(subtag("rom"), len, 4, ENDIANNESS_LITTLE);
|
||||
u32 const cnt(fread(romregion->base(), len));
|
||||
u32 *const rombase(reinterpret_cast<u32 *>(romregion->base()));
|
||||
u32 const cnt(fread(rombase, len));
|
||||
if (cnt != len)
|
||||
return std::make_pair(image_error::UNSPECIFIED, "Error reading cartridge file");
|
||||
return std::make_pair(std::errc::io_error, "Error reading cartridge file");
|
||||
|
||||
if (ENDIANNESS_NATIVE != ENDIANNESS_LITTLE)
|
||||
{
|
||||
for (u32 i = 0; (len / 4) > i; ++i)
|
||||
rombase[i] = swapendian_int32(rombase[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return std::make_pair(m_cart->load(), std::string());
|
||||
|
File diff suppressed because it is too large
Load Diff
23070
src/mame/casio/casloopy_tbl.ipp
Normal file
23070
src/mame/casio/casloopy_tbl.ipp
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user