Skip to content

Commit

Permalink
casio/casloopy.cpp: Promoted system to working. (#11621)
Browse files Browse the repository at this point in the history
* 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]
  • Loading branch information
philipjbennett committed Oct 17, 2023
1 parent a5b5686 commit cbe16a0
Show file tree
Hide file tree
Showing 9 changed files with 25,443 additions and 377 deletions.
152 changes: 91 additions & 61 deletions hash/casloopy.xml
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand All @@ -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>
Expand All @@ -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>
Expand All @@ -54,36 +71,58 @@ 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>
<dataarea name="nvram" size="0x2000">
</dataarea>
</part>
</software>

<software name="nigaoart">
<description>Nigaoe Artist</description>
<software name="loopytwn">
<description>Loopy Town no Oheya ga Hoshii!</description>
<year>1996</year>
<publisher>Casio</publisher>
<info name="serial" value="XK-504"/>
<info name="alt_title" value="ルーピータウンのおへやがほしい!"/>
<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>

<software name="lupiton">
<description>Lupiton no Wonder Palette</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"/>
<info name="serial" value="XK-701"/>
<info name="alt_title" value="ルピトンのワンダーパレット"/>
<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="wanwanam">
<description>Wanwan Aijou Monogatari</description>
<software name="nigaoart">
<description>Nigaoe Artist</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"/>
<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>
Expand All @@ -94,49 +133,40 @@ license:CC0-1.0
<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"/>
<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>
</part>
</software>

<software name="loopytwn">
<description>Loopy Town no Oheya ga Hoshii!</description>
<year>1996</year>
<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" />
<dataarea name="nvram" size="0x8000">
</dataarea>
</part>
</software>

<software name="lupiton">
<description>Lupiton no Wonder Palette</description>
<software name="vswordp" supported="no">
<description>Video Seal Wordprocessor</description>
<year>1995</year>
<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" />
<info name="serial" value="XK-700"/>
<info name="alt_title" value="Magical Shop"/>
<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="vswordp">
<description>Video Seal Wordprocessor</description>
<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-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" />
<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>
Expand Down
15 changes: 15 additions & 0 deletions scripts/src/bus.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
117 changes: 117 additions & 0 deletions src/devices/bus/casloopy/rom.cpp
Original file line number Diff line number Diff line change
@@ -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;
}
Loading

0 comments on commit cbe16a0

Please sign in to comment.