mirror of
https://github.com/holub/mame
synced 2025-04-19 23:12:11 +03:00
(MESS) famicom: added support for loading/saving BASIC programs from/to
cassette. wav files supported only. [Fabio Priuli] (MESS) Added software list for BASIC programs saved to tape [Anna Wu, UglyJoe, Fabio Priuli] If anyone has more Family BASIC tapes or other cassettes for Famicom games or add-ons (e.g. Bandai Karaoke or Fukutake Study Box) or for some chinese clones (ABM, or Bridge, or any other), please contact us.
This commit is contained in:
parent
ee99480ea1
commit
4a673c07aa
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -91,6 +91,7 @@ hash/electron_cart.xml svneol=native#text/xml
|
||||
hash/ep64_cart.xml svneol=native#text/xml
|
||||
hash/ep64_cass.xml svneol=native#text/xml
|
||||
hash/ep64_flop.xml svneol=native#text/xml
|
||||
hash/famicom_cass.xml svneol=native#text/xml
|
||||
hash/famicom_flop.xml svneol=native#text/xml
|
||||
hash/fm77av.xml svneol=native#text/xml
|
||||
hash/fm7_cass.xml svneol=native#text/xml
|
||||
|
258
hash/famicom_cass.xml
Normal file
258
hash/famicom_cass.xml
Normal file
@ -0,0 +1,258 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
<softwarelist name="famicom_cass" description="Nintendo Famicom Family BASIC cassettes">
|
||||
|
||||
<!--
|
||||
|
||||
This list is a bit peculiar, since it contains cassette images obtained on a FC
|
||||
by saving BASIC programs typed in from magazines, books, or homebrew
|
||||
|
||||
It's so difficult to find any of these, that they are definitely worth preservation!
|
||||
|
||||
-->
|
||||
|
||||
|
||||
<software name="hero">
|
||||
<description>Hero</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Requires BASIC v3" />
|
||||
<part name="cass" interface="fc_cass">
|
||||
<dataarea name="cass" size="3235916">
|
||||
<rom name="hero.wav" size="3235916" crc="38bad4f5" sha1="696da9274a144cbc5e95b9c92df700014296f211" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="starkill">
|
||||
<description>Starkiller</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Requires BASIC v3" />
|
||||
<part name="cass" interface="fc_cass">
|
||||
<dataarea name="cass" size="3255484">
|
||||
<rom name="starkiller.wav" size="3255484" crc="597e2ab3" sha1="eafa3c0576dbf3ce4991abafd05e4d0bf7b3a8e4" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="urbanchm">
|
||||
<description>Urban Champ</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cass" interface="fc_cass">
|
||||
<dataarea name="cass" size="2318380">
|
||||
<rom name="urbanchamp.wav" size="2318380" crc="1f5d0d6c" sha1="5d24f9cfa28f6cf5ee6c5188d1e9a425af0231ea" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
<!-- These come from a book titled 任天堂のファミリーコンピュータ - ファミリーベーシック - がわかる本
|
||||
(Nintendo Family Computer & Family BASIC ga wakaru hon) and have been typed in and saved to
|
||||
tape by UglyJoe of famicomworld -->
|
||||
|
||||
<software name="kanitori">
|
||||
<description>Kanitori Game</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="カニトリ ゲーム" />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2836972">
|
||||
<rom name="bg1.wav" size="2836972" crc="eecd4278" sha1="12999d07a3cb9784008e51f97fb22543d2ab050a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="1063360">
|
||||
<rom name="prog1.wav" size="1063360" crc="2ef3ed0e" sha1="3a7876bcc84e1d7b10739a4930cc248f853d1803" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="kblesson">
|
||||
<description>Keyboard Lesson</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="キーボード レッスン" />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2856673">
|
||||
<rom name="bg2.wav" size="2856673" crc="4b8cc5ba" sha1="5783bd1e220487e047b98ddc0d9c5a5ea8b3ce41" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="969115">
|
||||
<rom name="prog2.wav" size="969115" crc="2237442b" sha1="956649d436bb4d5ac0d6f47c1c04da1ee75964e6" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="moonbas2">
|
||||
<description>Moon Base 2</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="ムーンベース2" />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2895991">
|
||||
<rom name="bg3.wav" size="2895991" crc="e5dcb41f" sha1="11e0c2265b693861fb2b4f1c411799b8cd3d4be1" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="1019166">
|
||||
<rom name="prog3.wav" size="1019166" crc="3c8ba31c" sha1="efddded189dc5700d3be6113b679f0cfe491e6fd" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="starship">
|
||||
<description>Starship</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="スターシップ " />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2857206">
|
||||
<rom name="bg4.wav" size="2857206" crc="0cf4637e" sha1="9dc1549662335f7b28e661ed86f809eea8c5d8ec" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="1055373">
|
||||
<rom name="prog4.wav" size="1055373" crc="ed38bc5d" sha1="70bbd042e9405f6b75aab5c9e483de272de3665a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sansugok">
|
||||
<description>Sansuu Gokko</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="サンスウゴッコ" />
|
||||
<info name="usage" value="Requires BASIC v2" />
|
||||
<part name="cass" interface="fc_cass">
|
||||
<dataarea name="cass" size="1064957">
|
||||
<rom name="prog5.wav" size="1064957" crc="414aa041" sha1="57be005ead4a02edcf8354dc0e85eec83a150ed7" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="bonbon">
|
||||
<description>Bound Bon-Bon</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="バウンド ボンボン" />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2864660">
|
||||
<rom name="bg6.wav" size="2864660" crc="d2a12690" sha1="467a34dc83f7e0607914cc0944e69c75c4a49498" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="1159735">
|
||||
<rom name="prog6.wav" size="1159735" crc="41e213bd" sha1="baca7c510a57ffaac8a13b5c2140653d151212c2" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="daimajin">
|
||||
<description>Daimajin Attack</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="ダイマジン アタック" />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2912049">
|
||||
<rom name="bg7.wav" size="2912049" crc="998d0408" sha1="9e58958c03d742bd0e38322a399931c768dcea00" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="1014374">
|
||||
<rom name="prog7.wav" size="1014374" crc="217bb5db" sha1="601fdab3d9ad28657b16aa149f08e7880dc8c235" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mariosht">
|
||||
<description>Mario Shooter</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="マリオ シューター" />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2890750">
|
||||
<rom name="bg8.wav" size="2890750" crc="669d942e" sha1="029e6ee88ae890c0072377557f2ddfd3112de57e" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="1105424">
|
||||
<rom name="prog8.wav" size="1105424" crc="efbe8b45" sha1="065b05e8b0fc35580b3afe1c67dd8b8c36601c80" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pingpon1">
|
||||
<description>Ping Pong 1</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="ピンポン1" />
|
||||
<info name="usage" value="Requires BASIC v2; load BG first, then Program" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2847622">
|
||||
<rom name="bg9.wav" size="2847622" crc="0521c342" sha1="ec84d54220e3647df92f02b1e9096ada6c1cf93e" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="972310">
|
||||
<rom name="prog9.wav" size="972310" crc="83f5aa2a" sha1="6d2de9de38d10ca6b55ef2daa86220af656a3768" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pingpon2">
|
||||
<description>Ping Pong 2</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="alt_title" value="ピンポン2" />
|
||||
<info name="usage" value="Requires BASIC v2" />
|
||||
<part name="cass1" interface="fc_cass">
|
||||
<feature name="part_id" value="BG Data" />
|
||||
<dataarea name="cass" size="2847622">
|
||||
<rom name="bg9.wav" size="2847622" crc="0521c342" sha1="ec84d54220e3647df92f02b1e9096ada6c1cf93e" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
|
||||
<part name="cass2" interface="fc_cass">
|
||||
<feature name="part_id" value="Program Data" />
|
||||
<dataarea name="cass" size="1057503">
|
||||
<rom name="prog10.wav" size="1057503" crc="54540a93" sha1="da84c92adb6f7efcff330b629b6166a1d38ec38f" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
</softwarelist>
|
@ -589,6 +589,17 @@ static const nes_cart_interface nes_crt_interface =
|
||||
};
|
||||
|
||||
|
||||
static const cassette_interface fc_cassette_interface =
|
||||
{
|
||||
cassette_default_formats,
|
||||
NULL,
|
||||
(cassette_state)(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED),
|
||||
"fc_cass",
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
|
||||
static MACHINE_CONFIG_START( nes, nes_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", N2A03, NTSC_CLOCK)
|
||||
@ -618,8 +629,8 @@ static MACHINE_CONFIG_START( nes, nes_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.90)
|
||||
|
||||
MCFG_NES_CARTRIDGE_ADD("nes_slot", nes_crt_interface, nes_cart, NULL)
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list","nes")
|
||||
MCFG_SOFTWARE_LIST_ADD("ntb_list","nes_ntbrom") // Nantettate Baseball mini_carts
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list", "nes")
|
||||
MCFG_SOFTWARE_LIST_ADD("ntb_list", "nes_ntbrom") // Nantettate Baseball mini_carts
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( nespal, nes )
|
||||
@ -672,7 +683,10 @@ static MACHINE_CONFIG_DERIVED( famicom, nes )
|
||||
MCFG_NES_CARTRIDGE_NOT_MANDATORY
|
||||
|
||||
MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, nes_floppy_interface)
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list","famicom_flop")
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_list", "famicom_flop")
|
||||
|
||||
MCFG_CASSETTE_ADD( "tape", fc_cassette_interface )
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list", "famicom_cass")
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
|
||||
#include "video/ppu2c0x.h"
|
||||
#include "machine/nes_slot.h"
|
||||
#include "imagedev/cassette.h"
|
||||
|
||||
// official PCBs
|
||||
#include "machine/nes_nxrom.h"
|
||||
@ -456,7 +457,8 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_ppu(*this, "ppu"),
|
||||
m_sound(*this, "nessound"),
|
||||
m_cartslot(*this, "nes_slot")
|
||||
m_cartslot(*this, "nes_slot"),
|
||||
m_cassette(*this, "tape")
|
||||
{ }
|
||||
|
||||
/* input_related - this part has to be cleaned up (e.g. in_2 and in_3 are not really necessary here...) */
|
||||
@ -491,6 +493,7 @@ public:
|
||||
required_device<ppu2c0x_device> m_ppu;
|
||||
required_device<device_t> m_sound;
|
||||
optional_device<nes_cart_slot_device> m_cartslot;
|
||||
optional_device<cassette_image_device> m_cassette;
|
||||
|
||||
int nes_ppu_vidaccess(int address, int data);
|
||||
void ppu_nmi(int *ppu_regs);
|
||||
|
@ -386,8 +386,15 @@ READ8_MEMBER(nes_state::fc_in0_r)
|
||||
|
||||
if ((exp & 0x0f) == 0x02)
|
||||
{
|
||||
// here we should have the tape input
|
||||
ret |= 0;
|
||||
// tape input
|
||||
if ((m_cassette->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_PLAY)
|
||||
{
|
||||
double level = m_cassette->input();
|
||||
if (level < 0)
|
||||
ret |= 0x00;
|
||||
else
|
||||
ret |= 0x02;
|
||||
}
|
||||
}
|
||||
|
||||
ret |= ((m_in_0.i0 >> m_in_0.shift) & 0x01);
|
||||
@ -486,7 +493,9 @@ WRITE8_MEMBER(nes_state::fc_in0_w)
|
||||
|
||||
if ((exp & 0x0f) == 0x02 || (exp & 0x0f) == 0x03)
|
||||
{
|
||||
// here we should also have the tape output
|
||||
// tape output (not fully tested)
|
||||
if ((m_cassette->get_state() & CASSETTE_MASK_UISTATE) == CASSETTE_RECORD)
|
||||
m_cassette->output(((data & 0x07) == 0x07) ? +1.0 : -1.0);
|
||||
|
||||
if (BIT(data, 2)) // keyboard active
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user