casio/fp1100.cpp: hookup cassette SW list

New software list items marked not working
------------------------------------------
fp1100_cass: Alien No Gyakushu, Attack Sea Monster, Backgammon, Golf Game, Kalah Game, Moo Game, Renga Kuzushi, Vegetable Crush [archive.org]
This commit is contained in:
angelosa 2024-07-12 17:53:10 +02:00
parent 82dda44b7a
commit 1a3ec953a0
2 changed files with 173 additions and 17 deletions

150
hash/fp1100_cass.xml Normal file
View File

@ -0,0 +1,150 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!--
license:CC0-1.0
TODO:
- verify type-in patterns, convert to usage node (took from instruction sheets)
- None of the Compac releases have any copyright year on packages
-->
<softwarelist name="fp1100_cass" description="Casio FP-1100 cassettes">
<software name="aliengya" supported="no">
<description>Alien No Gyakushu</description>
<year>1983?</year>
<publisher>Compac</publisher>
<!-- TODO: Denoting wrong snippet -->
<notes><![CDATA[
LOAD"CAS0:(F)
CLEAR,&HEF00
LOADM"CAS0:(F)
RUN
]]></notes>
<info name="alt_title" value="エイリアンの逆襲"/>
<info name="serial" value="FP11-785"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="5038983">
<rom name="alien_no_gyakushu.flac" size="5038983" crc="d811a8bd" sha1="f0526965f2eca20cf4f00a75871965840e5e5d10"/>
</dataarea>
</part>
</software>
<software name="atkseam" supported="no">
<description>Attack Sea Monster</description>
<year>1983</year>
<publisher>Hudson Soft</publisher>
<notes><![CDATA[
WIDTH 40
LOADM "CAS0:",R
]]></notes>
<info name="alt_title" value="アタックシーモンスタ"/>
<info name="serial" value="C-1001"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="6191452">
<rom name="attack_sea_monster.flac" size="6191452" crc="b141ff99" sha1="79fe0d17dd834becb812576e2d675dd545d826fe"/>
</dataarea>
</part>
</software>
<software name="backgamn" supported="no">
<description>Backgammon</description>
<year>1983?</year>
<publisher>Compac</publisher>
<notes><![CDATA[
RUN "CAS0:(F)"
]]></notes>
<info name="alt_title" value="バックギャモン"/>
<info name="serial" value="FP11-753"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="10143410">
<rom name="backgammon.flac" size="10143410" crc="c7a0198c" sha1="1951b7b2c3a859e1911148c1e11d022058dcf6a8"/>
</dataarea>
</part>
</software>
<software name="golf" supported="no">
<description>Golf Game</description>
<year>1983?</year>
<publisher>Compac</publisher>
<!-- TODO: Denoting wrong snippet -->
<notes><![CDATA[
LAD"CAS0:(F)"
RAN
]]></notes>
<info name="alt_title" value="ゴルフゲーム"/>
<info name="serial" value="FP11-789"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="11912054">
<rom name="golf_game.flac" size="11912054" crc="6b0873d5" sha1="422df8742ad60a69188e2b9c56b6f67f7c7515d9"/>
</dataarea>
</part>
</software>
<software name="kalah" supported="no">
<description>Kalah Game</description>
<year>1983?</year>
<publisher>Compac</publisher>
<notes><![CDATA[
LOAD"CAS0:(F)"
RUN
]]></notes>
<info name="alt_title" value="カラーゲーム"/>
<info name="serial" value="FP11-787"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="6293088">
<rom name="kalah_game.flac" size="6293088" crc="ca9ecf9e" sha1="09510eb05330aa9d803e895f544720c1cf3195ef"/>
</dataarea>
</part>
</software>
<software name="moo" supported="no">
<description>Moo Game</description>
<year>1983?</year>
<publisher>Compac</publisher>
<notes><![CDATA[
LOAD "CAS0:(F)"
RUN
]]></notes>
<info name="alt_title" value="ムーゲーム"/>
<info name="serial" value="FP11-786"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="3209415">
<rom name="moo_game.flac" size="3209415" crc="c2c4826e" sha1="3cf2953fb9f5caf8afef49cc2b801ffa529fa21f"/>
</dataarea>
</part>
</software>
<software name="renkuzu" supported="no">
<description>Renga Kuzushi</description>
<year>1983?</year>
<publisher>Compac</publisher>
<notes><![CDATA[
LOADM "CAS0:(F)",R
]]></notes>
<info name="alt_title" value="レンガくずし"/>
<info name="serial" value="FP11-752"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="1971347">
<rom name="renga_kuzushi.flac" size="1971347" crc="942819ed" sha1="4734622300f3b694ac739aea7be3d4a7229051a4"/>
</dataarea>
</part>
</software>
<software name="vegcrush" supported="no">
<description>Vegetable Crush</description>
<year>1983</year>
<publisher>Hudson Soft</publisher>
<notes><![CDATA[
WIDTH 40
LOADM"CAS0:(S)"
]]></notes>
<info name="alt_title" value="ベジタブルクラッシュ"/>
<info name="serial" value="C-1002"/>
<part name="cass1" interface="fp1100_cass">
<dataarea name="cass" size="21642009">
<rom name="vegetable_crush.flac" size="21642009" crc="5b1ab7b0" sha1="84c0f1b5c823fb8aa6ff46fbb3cc48bfacde3a26"/>
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -55,6 +55,8 @@ The keyboard is a separate unit. It contains a beeper.
#include "screen.h"
#include "speaker.h"
#include "softlist_dev.h"
#define VERBOSE 0
#include "logmacro.h"
@ -78,7 +80,7 @@ public:
, m_keyboard(*this, "KEY.%u", 0)
, m_beep(*this, "beeper")
, m_centronics(*this, "centronics")
, m_cass(*this, "cassette")
, m_cassette(*this, "cassette")
{ }
void fp1100(machine_config &config);
@ -98,7 +100,7 @@ private:
required_ioport_array<16> m_keyboard;
required_device<beep_device> m_beep;
required_device<centronics_device> m_centronics;
required_device<cassette_image_device> m_cass;
required_device<cassette_image_device> m_cassette;
void main_map(address_map &map);
void io_map(address_map &map);
@ -125,11 +127,11 @@ private:
u8 m_col_cursor = 0;
u8 m_col_display = 0;
u8 m_centronics_busy = 0;
u8 m_cass_data[4]{};
u8 m_cassette_data[4]{};
bool m_bank_sel = false;
bool m_sub_irq_status = false;
bool m_cassbit = false;
bool m_cassold = false;
bool m_cassettebit = false;
bool m_cassetteold = false;
// TODO: descramble
struct {
@ -410,7 +412,7 @@ void fp1100_state::portc_w(u8 data)
m_upd7801.portc = data;
if (BIT(bits, 5))
m_cass->change_state(BIT(data, 5) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
m_cassette->change_state(BIT(data, 5) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MASK_MOTOR);
if (BIT(bits, 6))
m_centronics->write_strobe(BIT(data, 6));
}
@ -641,18 +643,18 @@ void fp1100_state::centronics_busy_w(int state)
TIMER_DEVICE_CALLBACK_MEMBER( fp1100_state::kansas_w )
{
m_cass_data[3]++;
m_cassette_data[3]++;
if (m_cassbit != m_cassold)
if (m_cassettebit != m_cassetteold)
{
m_cass_data[3] = 0;
m_cassold = m_cassbit;
m_cassette_data[3] = 0;
m_cassetteold = m_cassettebit;
}
if (m_cassbit)
m_cass->output(BIT(m_cass_data[3], 0) ? -1.0 : +1.0); // 2400Hz
if (m_cassettebit)
m_cassette->output(BIT(m_cassette_data[3], 0) ? -1.0 : +1.0); // 2400Hz
else
m_cass->output(BIT(m_cass_data[3], 1) ? -1.0 : +1.0); // 1200Hz
m_cassette->output(BIT(m_cassette_data[3], 1) ? -1.0 : +1.0); // 1200Hz
}
void fp1100_state::machine_start()
@ -695,7 +697,7 @@ void fp1100_state::fp1100(machine_config &config)
m_subcpu->pb_out_cb().set("cent_data_out", FUNC(output_latch_device::write));
m_subcpu->pc_in_cb().set(FUNC(fp1100_state::portc_r));
m_subcpu->pc_out_cb().set(FUNC(fp1100_state::portc_w));
m_subcpu->txd_func().set([this] (bool state) { m_cassbit = state; });
m_subcpu->txd_func().set([this] (bool state) { m_cassettebit = state; });
GENERIC_LATCH_8(config, "main2sub");
GENERIC_LATCH_8(config, "sub2main");
@ -709,11 +711,15 @@ void fp1100_state::fp1100(machine_config &config)
output_latch_device &latch(OUTPUT_LATCH(config, "cent_data_out"));
m_centronics->set_output_latch(latch);
CASSETTE(config, m_cass);
m_cass->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
m_cass->add_route(ALL_OUTPUTS, "mono", 0.05);
CASSETTE(config, m_cassette);
m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
m_cassette->add_route(ALL_OUTPUTS, "mono", 0.05);
m_cassette->set_interface("fp1100_cass");
TIMER(config, "kansas_w").configure_periodic(FUNC(fp1100_state::kansas_w), attotime::from_hz(4800));
SOFTWARE_LIST(config, "cass_list").set_original("fp1100_cass");
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
// doesn't matter, will be reset by 6845 anyway
screen.set_refresh_hz(60);