bbc: clones, floppy formats, softlists, and cleanups.

- Added clone bbcb1770, bbcb now 8271 only.
- Added clone pro128s, Olivetti Prodest PC 128S.
- Added clones Acorn Business Computers and Cambridge Workstation.
- Added clone reutapm, Reuters APM board.
- Improved floppy formats, added dsd and double density formats for ADFS.
- Added speech PHROMs, not yet hooked up correctly.
- Added softlists bbcb_de_cass, bbcb_us_flop and bbcmc_flop.
- Added S11 links (dipswitch) to specify Econet ID.
- Address map cleanups.
This commit is contained in:
Nigel Barnes 2015-09-07 09:46:21 +01:00
parent 3227c85ed6
commit c0e72ea08d
12 changed files with 1370 additions and 1087 deletions

View File

@ -3324,13 +3324,13 @@
<publisher>Visions</publisher>
<info name="usage" value="Load with *RUN" />
<part name="cass1" interface="bbc_cass">
<dataarea name="cass" size="9339">
<rom name="demolator_infinitelives_run(visions).uef" size="9339" crc="8c638151" sha1="85aced0345aec14e7750c5daa290f1cb642b1961" offset="0" />
<dataarea name="cass" size="9319">
<rom name="demolator_run(visions).uef" size="9319" crc="5dc43e5b" sha1="d7d88ca1b651926104c0833e257e967e0d47dfc2" offset="0" />
</dataarea>
</part>
<part name="cass2" interface="bbc_cass">
<dataarea name="cass" size="9319">
<rom name="demolator_run(visions).uef" size="9319" crc="5dc43e5b" sha1="d7d88ca1b651926104c0833e257e967e0d47dfc2" offset="0" />
<dataarea name="cass" size="9339">
<rom name="demolator_infinitelives_run(visions).uef" size="9339" crc="8c638151" sha1="85aced0345aec14e7750c5daa290f1cb642b1961" offset="0" />
</dataarea>
</part>
</software>
@ -5710,17 +5710,6 @@
</part>
</software>
<software name="hopperg" cloneof="hopper">
<description>Hopper (Ger)</description>
<year>1983</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="8112">
<rom name="hopper-german(1983)(acornsoft)(g23).uef" size="8112" crc="3972b897" sha1="b5f7897dcad92b758d0473ac840f2b41e8049ef4" offset="0" />
</dataarea>
</part>
</software>
<software name="hopper21" cloneof="hopper">
<description>Hopper v2.1</description>
<year>1983</year>
@ -7430,17 +7419,6 @@
</part>
</software>
<software name="meteorsg" cloneof="meteors">
<description>Meteors (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="6610">
<rom name="meteors-german(1982)(acornsoft)(g13).uef" size="6610" crc="0bb65e55" sha1="238ba733b0094942dd477ca49754249284741c40" offset="0" />
</dataarea>
</part>
</software>
<software name="meteorssc" cloneof="meteors">
<description>Meteors (The Acornsoft Hits Vol.2)</description>
<year>1987</year>
@ -7745,17 +7723,6 @@
</part>
</software>
<software name="monstersg" cloneof="monsters">
<description>Monsters (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7890">
<rom name="monsters-german(1982)(acornsoft)(g03).uef" size="7890" crc="37838358" sha1="c3c698a8174d0b67d6ee563bcecb9a42354ae3fc" offset="0" />
</dataarea>
</part>
</software>
<software name="monsterspias" cloneof="monsters">
<description>Monsters (Play It Again Sam 11)</description>
<year>1989</year>
@ -8889,17 +8856,6 @@
</part>
</software>
<software name="planetoidg" cloneof="plantoid">
<description>Planetoid (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="8515">
<rom name="planetoid-german(1982)(acornsoft)(g15).uef" size="8515" crc="bfaa94f8" sha1="fc8cb246c19cd717f7684074979ea5cb6d98e4fb" offset="0" />
</dataarea>
</part>
</software>
<software name="plantoidsc" cloneof="plantoid">
<description>Planetoid (The Acornsoft Hits Vol.1)</description>
<year>1987</year>
@ -9828,17 +9784,6 @@
</part>
</software>
<software name="rocketrag" cloneof="rocketra">
<description>Rocket Raid (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7747">
<rom name="rocketraid-german(1982)(acornsoft)(g05).uef" size="7747" crc="3a6ccbd0" sha1="afd7318589bb419606b25b575c7488369acf2c9b" offset="0" />
</dataarea>
</part>
</software>
<software name="rocketrasc" cloneof="rocketra">
<description>Rocket Raid (The Acornsoft Hits Vol.1)</description>
<year>1987</year>
@ -10721,17 +10666,6 @@
</part>
</software>
<software name="snapperg" cloneof="snapper">
<description>Snapper (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7174">
<rom name="snapper-german(1982)(acornsoft)(g04).uef" size="7174" crc="6ffbe578" sha1="0cc295dba1b771475ae8e71340b6ce4f885040e9" offset="0" />
</dataarea>
</part>
</software>
<software name="snapperpias" cloneof="snapper">
<description>Snapper (Play It Again Sam 7)</description>
<year>1988</year>
@ -11902,17 +11836,6 @@
</part>
</software>
<software name="superinvg" cloneof="superinv">
<description>Super Invaders (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7812">
<rom name="superinvaders-german(1982)(acornsoft)(g16).uef" size="7812" crc="382b3412" sha1="4361fba1203b07fb05f62273ac02db403a3f38ce" offset="0" />
</dataarea>
</part>
</software>
<software name="superinv">
<description>Super Invaders</description>
<year>1982</year>
@ -13494,17 +13417,6 @@
</part>
</software>
<software name="welcomeg" cloneof="welcome">
<description>Welcome (Ger)</description>
<year>1981</year>
<publisher>BBC Soft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="48009">
<rom name="welcome-german(1981)(bbc).uef" size="48009" crc="a2d78451" sha1="b0ff9fd8a51412dee878e763fe0aa54deef2c962" offset="0" />
</dataarea>
</part>
</software>
<software name="welcome">
<description>Welcome</description>
<year>1981</year>
@ -14099,17 +14011,6 @@
</part>
</software>
<software name="dskdiaryg" cloneof="dskdiary">
<description>Desk Diary (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="9739">
<rom name="deskdiary-german(198x)(acornsoft)(b01).uef" size="9739" crc="7ef32892" sha1="ec3910be9c7b5c1729586ba88a88173d08dcf34b" offset="0" />
</dataarea>
</part>
</software>
<software name="dskdiary">
<description>Desk Diary</description>
<year>198?</year>
@ -14753,17 +14654,6 @@
</part>
</software>
<software name="numberbag" cloneof="numberba">
<description>Number Balance (Ger)</description>
<year>198?</year>
<publisher>Acornsoft/ESM</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7727">
<rom name="numberbalance-german(acornsoftesm).uef" size="7727" crc="2461e7a8" sha1="7b2ce801a3213fcac582b173d65aaa347555a2c4" offset="0" />
</dataarea>
</part>
</software>
<software name="numberba">
<description>Number Balance</description>
<year>198?</year>
@ -14852,17 +14742,6 @@
</part>
</software>
<software name="sentseqg" cloneof="sentseq">
<description>Sentence Sequencing (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="10769">
<rom name="sentencesequencing-german(198x)(acornsoft)(e07).uef" size="10769" crc="28955bf7" sha1="f6422764589cbe5d1acefca2d90f288b95e84280" offset="0" />
</dataarea>
</part>
</software>
<software name="sentseq">
<description>Sentence Sequencing</description>
<year>198?</year>
@ -14967,17 +14846,6 @@
</part>
</software>
<software name="treeknowg" cloneof="treeknow">
<description>Tree Of Knowledge (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="11319">
<rom name="treeofknowledge-german(198x)(acornsoft)(e04).uef" size="11319" crc="c1b66b33" sha1="53bd97ccc48c5b00a1e57728800e786b6a9d30d9" offset="0" />
</dataarea>
</part>
</software>
<software name="treeknow">
<description>Tree Of Knowledge</description>
<year>198?</year>
@ -15077,17 +14945,6 @@
</part>
</software>
<software name="jars">
<description>Jars (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="8325">
<rom name="jars-german(198x)(acornsoft)(e15).uef" size="8325" crc="943ba245" sha1="5a911796040eb708926d5c9e1aecb3d0e7ea546b" offset="0" />
</dataarea>
</part>
</software>
<software name="spooky">
<description>Spooky Manor</description>
<year>198?</year>

166
hash/bbcb_de_cass.xml Normal file
View File

@ -0,0 +1,166 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!-- BBC Micro Model B (German) Tapes -->
<!-- I believe all the Cassette images here are original, so some require the manuals for additional copy protection -->
<!-- Loading Instructions:
If the system has a disk drive (which the BBC Model B does by default in MESS) you must type *TAPE, then use the relevant command to load the software, usually CHAIN"" or *RUN, though some earlier titles from Micro Power require *LOAD.
To start/stop the tape you must use the MESS menus, so you'll have to turn full keyboard mode off with Scroll Lock, then navigate the menus, turning Scroll Lock back on when you're finished.
-->
<softwarelist name="bbcb_de_cass" description="BBC Micro Model B (German) cassettes">
<!-- Games -->
<software name="hopperg">
<description>Hopper (Ger)</description>
<year>1983</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="8112">
<rom name="hopper-german(1983)(acornsoft)(g23).uef" size="8112" crc="3972b897" sha1="b5f7897dcad92b758d0473ac840f2b41e8049ef4" offset="0" />
</dataarea>
</part>
</software>
<software name="meteorsg">
<description>Meteors (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="6610">
<rom name="meteors-german(1982)(acornsoft)(g13).uef" size="6610" crc="0bb65e55" sha1="238ba733b0094942dd477ca49754249284741c40" offset="0" />
</dataarea>
</part>
</software>
<software name="monstersg">
<description>Monsters (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7890">
<rom name="monsters-german(1982)(acornsoft)(g03).uef" size="7890" crc="37838358" sha1="c3c698a8174d0b67d6ee563bcecb9a42354ae3fc" offset="0" />
</dataarea>
</part>
</software>
<software name="planetoidg">
<description>Planetoid (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="8515">
<rom name="planetoid-german(1982)(acornsoft)(g15).uef" size="8515" crc="bfaa94f8" sha1="fc8cb246c19cd717f7684074979ea5cb6d98e4fb" offset="0" />
</dataarea>
</part>
</software>
<software name="rocketrag">
<description>Rocket Raid (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7747">
<rom name="rocketraid-german(1982)(acornsoft)(g05).uef" size="7747" crc="3a6ccbd0" sha1="afd7318589bb419606b25b575c7488369acf2c9b" offset="0" />
</dataarea>
</part>
</software>
<software name="snapperg">
<description>Snapper (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7174">
<rom name="snapper-german(1982)(acornsoft)(g04).uef" size="7174" crc="6ffbe578" sha1="0cc295dba1b771475ae8e71340b6ce4f885040e9" offset="0" />
</dataarea>
</part>
</software>
<software name="superinvg">
<description>Super Invaders (Ger)</description>
<year>1982</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7812">
<rom name="superinvaders-german(1982)(acornsoft)(g16).uef" size="7812" crc="382b3412" sha1="4361fba1203b07fb05f62273ac02db403a3f38ce" offset="0" />
</dataarea>
</part>
</software>
<software name="welcomeg">
<description>Welcome (Ger)</description>
<year>1981</year>
<publisher>BBC Soft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="48009">
<rom name="welcome-german(1981)(bbc).uef" size="48009" crc="a2d78451" sha1="b0ff9fd8a51412dee878e763fe0aa54deef2c962" offset="0" />
</dataarea>
</part>
</software>
<!-- Business -->
<software name="dskdiaryg">
<description>Desk Diary (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="9739">
<rom name="deskdiary-german(198x)(acornsoft)(b01).uef" size="9739" crc="7ef32892" sha1="ec3910be9c7b5c1729586ba88a88173d08dcf34b" offset="0" />
</dataarea>
</part>
</software>
<!-- Educational -->
<software name="numberbag">
<description>Number Balance (Ger)</description>
<year>198?</year>
<publisher>Acornsoft/ESM</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="7727">
<rom name="numberbalance-german(acornsoftesm).uef" size="7727" crc="2461e7a8" sha1="7b2ce801a3213fcac582b173d65aaa347555a2c4" offset="0" />
</dataarea>
</part>
</software>
<software name="sentseqg">
<description>Sentence Sequencing (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="10769">
<rom name="sentencesequencing-german(198x)(acornsoft)(e07).uef" size="10769" crc="28955bf7" sha1="f6422764589cbe5d1acefca2d90f288b95e84280" offset="0" />
</dataarea>
</part>
</software>
<software name="treeknowg">
<description>Tree Of Knowledge (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="11319">
<rom name="treeofknowledge-german(198x)(acornsoft)(e04).uef" size="11319" crc="c1b66b33" sha1="53bd97ccc48c5b00a1e57728800e786b6a9d30d9" offset="0" />
</dataarea>
</part>
</software>
<software name="jars">
<description>Jars (Ger)</description>
<year>198?</year>
<publisher>Acornsoft</publisher>
<part name="cass" interface="bbc_cass">
<dataarea name="cass" size="8325">
<rom name="jars-german(198x)(acornsoft)(e15).uef" size="8325" crc="943ba245" sha1="5a911796040eb708926d5c9e1aecb3d0e7ea546b" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

25
hash/bbcb_us_flop.xml Normal file
View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!-- BBC Micro Model B (US) Disks -->
<!-- Loading Instructions:
Hold down the SHIFT key and press and release the BREAK key.
-->
<softwarelist name="bbcb_us_flop" description="BBC Micro Model B (US) disks">
<software name="intrutil">
<description>Introductory and Utilities Disk</description>
<year>1983</year>
<publisher>Acorn</publisher>
<info name="protection" value="none" />
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="204800">
<rom name="introductory_utils(1983)(acorn).ssd" size="204800" crc="60612fc2" sha1="037f7c3499547d5ac5f88e812d7765ccaf27d6e1" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

25
hash/bbcmc_flop.xml Normal file
View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<!-- BBC Master Compact Disks -->
<!-- Loading Instructions:
Hold down the SHIFT key and press and release the BREAK key.
-->
<softwarelist name="bbcmc_flop" description="BBC Master Compact disks">
<software name="welcome">
<description>BBC Master Compact Welcome Disc</description>
<year>1986</year>
<publisher>Acorn</publisher>
<info name="protection" value="none" />
<part name="flop1" interface="floppy_3_5">
<dataarea name="flop" size="655360">
<rom name="welcome_compact.adl" size="655360" crc="9d747205" sha1="04cfd6d1e08e8f695befb2948e27d63fd7842b8f" offset="0" />
</dataarea>
</part>
</software>
</softwarelist>

55
hash/pro128_cart.xml Normal file
View File

@ -0,0 +1,55 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="pro128_cart" description="Prodest PC 128 cartridges">
<software name="agenda">
<description>Agenda</description>
<year>1984</year>
<publisher>Answare</publisher>
<part name="cart" interface="mo5_cart">
<dataarea name="rom" size="16384">
<rom name="agenda (1984)(answare)(fr).m5" size="16384" crc="a4460761" sha1="5a77e3709b90f430c0b4c2c282916095e60ee22b" offset="0x0000" />
</dataarea>
</part>
</software>
<software name="clrpaint">
<description>Colorpaint</description>
<year>1985</year>
<publisher>Thomson</publisher>
<part name="cart" interface="mo5_cart">
<dataarea name="rom" size="32768">
<rom name="colorpaint (1985)(thomson)(it).m5" size="32768" crc="8fa1493b" sha1="d27c6db21adb29dc76df33d7a3855f8532d8cc57" offset="0x0000" />
</dataarea>
</part>
</software>
<software name="logo">
<description>LOGO v1.0</description>
<year>1984</year>
<publisher>Soli</publisher>
<part name="cart" interface="mo5_cart">
<dataarea name="rom" size="16384">
<rom name="logo v1.0 (1984)(soli)(fr).m5" size="16384" crc="6e997494" sha1="039f460f00973da9e192691061b37b493028bc35" offset="0x0000" />
</dataarea>
</part>
</software>
<software name="scriptor">
<description>Scriptor</description>
<year>1986</year>
<publisher>To Tek</publisher>
<part name="cart" interface="mo5_cart">
<dataarea name="rom" size="16384">
<rom name="scriptor (1986)(to tek)(it).m5" size="16384" crc="3bb553c9" sha1="b8b4b7618684e0c9331e8759fe13b07d22340fbe" offset="0x0000" />
</dataarea>
</part>
</software>
</softwarelist>

View File

@ -1,53 +1,229 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
// copyright-holders:Dirk Best, Nigel Barnes
/***************************************************************************
BBC Micro
Disk image format
Disk image formats
***************************************************************************/
#include "bbc_dsk.h"
#include "basicdsk.h"
bbc_format::bbc_format() : wd177x_format(formats)
LEGACY_FLOPPY_OPTIONS_START(bbc)
LEGACY_FLOPPY_OPTION( ssd40, "bbc,img,ssd", "BBC 40t SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([1])
TRACKS([40])
SECTORS([10])
SECTOR_LENGTH([256])
FIRST_SECTOR_ID([0]))
LEGACY_FLOPPY_OPTION( ssd80, "bbc,img,ssd", "BBC 80t SSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([1])
TRACKS([80])
SECTORS([10])
SECTOR_LENGTH([256])
FIRST_SECTOR_ID([0]))
LEGACY_FLOPPY_OPTION( dsd40, "dsd", "BBC 40t DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([40])
SECTORS([10])
SECTOR_LENGTH([256])
INTERLEAVE([0])
FIRST_SECTOR_ID([0]))
LEGACY_FLOPPY_OPTION( dsd80, "dsd", "BBC 80t DSD disk image", basicdsk_identify_default, basicdsk_construct_default, NULL,
HEADS([2])
TRACKS([80])
SECTORS([10])
SECTOR_LENGTH([256])
INTERLEAVE([0])
FIRST_SECTOR_ID([0]))
LEGACY_FLOPPY_OPTIONS_END
/********************************************************************/
bbc_ssd_525_format::bbc_ssd_525_format() : wd177x_format(formats)
{
}
const char *bbc_format::name() const
const char *bbc_ssd_525_format::name() const
{
return "bbc";
return "ssd";
}
const char *bbc_format::description() const
const char *bbc_ssd_525_format::description() const
{
return "BBC Micro disk image";
return "BBC Micro 5.25\" disk image";
}
const char *bbc_format::extensions() const
const char *bbc_ssd_525_format::extensions() const
{
return "bbc,img,ssd,dsd";
return "bbc,img,ssd";
}
const bbc_format::format bbc_format::formats[] =
int bbc_ssd_525_format::find_size(io_generic *io, UINT32 form_factor)
{
{ // 100k single sided single density
char cat[8];
io_generic_read(io, cat, 256, 8);
UINT64 sectors = ((cat[6] & 3) << 8) + cat[7]; // sector count from catalogue
UINT64 size = io_generic_size(io);
for(int i=0; formats[i].form_factor; i++) {
const format &f = formats[i];
if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor)
continue;
if((size <= (UINT64)compute_track_size(f) * f.track_count * f.head_count) && (sectors == f.track_count * f.sector_count))
return i;
}
return -1;
}
const bbc_ssd_525_format::format bbc_ssd_525_format::formats[] =
{
{ // 100k 40 track single sided single density
floppy_image::FF_525, floppy_image::SSSD, floppy_image::FM,
4000, 10, 40, 1, 256, {}, 0, {}, 16, 11, 19
4000, 10, 40, 1, 256, {}, 0, {}, 40, 10, 10
},
{ // 200k double sided single density
floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM,
4000, 10, 40, 2, 256, {}, 0, {}, 16, 11, 19
},
{ // 200k single sided double density
{ // 200k 80 track single sided single density
floppy_image::FF_525, floppy_image::SSQD, floppy_image::FM,
4000, 10, 80, 1, 256, {}, 0, {}, 16, 11, 19
4000, 10, 80, 1, 256, {}, 0, {}, 40, 10, 10
},
{ // 400k double sided double density
{ // 200k 40 track double sided single density
floppy_image::FF_525, floppy_image::DSSD, floppy_image::FM,
4000, 10, 40, 2, 256, {}, 0, {}, 40, 10, 10
},
{ // 400k 80 track double sided single density
floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM,
4000, 10, 80, 2, 256, {}, 0, {}, 16, 11, 19
4000, 10, 80, 2, 256, {}, 0, {}, 40, 10, 10
},
{}
};
const floppy_format_type FLOPPY_BBC_FORMAT = &floppy_image_format_creator<bbc_format>;
bbc_dsd_525_format::bbc_dsd_525_format() : wd177x_format(formats)
{
}
const char *bbc_dsd_525_format::name() const
{
return "dsd";
}
const char *bbc_dsd_525_format::description() const
{
return "BBC Micro 5.25\" disk image";
}
const char *bbc_dsd_525_format::extensions() const
{
return "dsd";
}
int bbc_dsd_525_format::find_size(io_generic *io, UINT32 form_factor)
{
char cat[8];
io_generic_read(io, cat, 256, 8);
UINT64 sectors = ((cat[6] & 3) << 8) + cat[7]; // sector count from catalogue
UINT64 size = io_generic_size(io);
for(int i=0; formats[i].form_factor; i++) {
const format &f = formats[i];
if(form_factor != floppy_image::FF_UNKNOWN && form_factor != f.form_factor)
continue;
if((size <= (UINT64)compute_track_size(f) * f.track_count * f.head_count) && (sectors == f.track_count * f.sector_count))
return i;
}
return -1;
}
const bbc_dsd_525_format::format bbc_dsd_525_format::formats[] =
{
{ // 200k 40 track double sided single density
floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM,
4000, 10, 40, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9 }, 40, 10, 10
},
{ // 400k 80 track double sided single density
floppy_image::FF_525, floppy_image::DSQD, floppy_image::FM,
4000, 10, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9 }, 40, 10, 10
},
{}
};
bbc_adf_525_format::bbc_adf_525_format() : wd177x_format(formats)
{
}
const char *bbc_adf_525_format::name() const
{
return "adf";
}
const char *bbc_adf_525_format::description() const
{
return "BBC Micro 5.25\" ADFS disk image";
}
const char *bbc_adf_525_format::extensions() const
{
return "adf,ads,adm,adl,img";
}
const bbc_adf_525_format::format bbc_adf_525_format::formats[] =
{
{ // 160K 40 track single sided double density
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
2000, 16, 40, 1, 256, {}, 0, {}, 60, 22, 43
},
{ // 320K 80 track single sided double density
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
2000, 16, 80, 1, 256, {}, 0, {}, 60, 22, 43
},
{ // 640K 80 track double sided double density
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43
},
{}
};
bbc_adf_35_format::bbc_adf_35_format() : wd177x_format(formats)
{
}
const char *bbc_adf_35_format::name() const
{
return "adf";
}
const char *bbc_adf_35_format::description() const
{
return "BBC Micro 3.5\" ADFS disk image";
}
const char *bbc_adf_35_format::extensions() const
{
return "adf,ads,adm,adl,img";
}
const bbc_adf_35_format::format bbc_adf_35_format::formats[] = {
{ // 160K 3 1/2 inch 40 track single sided double density
floppy_image::FF_35, floppy_image::SSDD, floppy_image::MFM,
2000, 16, 40, 1, 256, {}, 0, {}, 60, 22, 43
},
{ // 320K 3 1/2 inch 80 track single sided double density
floppy_image::FF_35, floppy_image::SSQD, floppy_image::MFM,
2000, 16, 80, 1, 256, {}, 0, {}, 60, 22, 43
},
{ // 640K 3 1/2 inch 80 track double sided double density
floppy_image::FF_35, floppy_image::DSQD, floppy_image::MFM,
2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43
},
{}
};
const floppy_format_type FLOPPY_BBC_SSD_525_FORMAT = &floppy_image_format_creator<bbc_ssd_525_format>;
const floppy_format_type FLOPPY_BBC_DSD_525_FORMAT = &floppy_image_format_creator<bbc_dsd_525_format>;
const floppy_format_type FLOPPY_BBC_ADF_525_FORMAT = &floppy_image_format_creator<bbc_adf_525_format>;
const floppy_format_type FLOPPY_BBC_ADF_35_FORMAT = &floppy_image_format_creator<bbc_adf_35_format>;

View File

@ -1,10 +1,10 @@
// license:GPL-2.0+
// copyright-holders:Dirk Best
// copyright-holders:Dirk Best, Nigel Barnes
/***************************************************************************
BBC Micro
Disk image format
Disk image formats
***************************************************************************/
@ -13,12 +13,47 @@
#ifndef __BBC_DSK_H__
#define __BBC_DSK_H__
#include "flopimg.h"
#include "wd177x_dsk.h"
class bbc_format : public wd177x_format
/**************************************************************************/
LEGACY_FLOPPY_OPTIONS_EXTERN(bbc);
/**************************************************************************/
class bbc_ssd_525_format : public wd177x_format
{
public:
bbc_format();
bbc_ssd_525_format();
virtual int find_size(io_generic *io, UINT32 form_factor);
virtual const char *name() const;
virtual const char *description() const;
virtual const char *extensions() const;
private:
static const format formats[];
};
class bbc_dsd_525_format : public wd177x_format
{
public:
bbc_dsd_525_format();
virtual int find_size(io_generic *io, UINT32 form_factor);
virtual const char *name() const;
virtual const char *description() const;
virtual const char *extensions() const;
private:
static const format formats[];
};
class bbc_adf_525_format : public wd177x_format
{
public:
bbc_adf_525_format();
virtual const char *name() const;
virtual const char *description() const;
@ -28,6 +63,23 @@ private:
static const format formats[];
};
extern const floppy_format_type FLOPPY_BBC_FORMAT;
class bbc_adf_35_format : public wd177x_format
{
public:
bbc_adf_35_format();
virtual const char *name() const;
virtual const char *description() const;
virtual const char *extensions() const;
private:
static const format formats[];
};
extern const floppy_format_type FLOPPY_BBC_SSD_525_FORMAT;
extern const floppy_format_type FLOPPY_BBC_DSD_525_FORMAT;
extern const floppy_format_type FLOPPY_BBC_ADF_525_FORMAT;
extern const floppy_format_type FLOPPY_BBC_ADF_35_FORMAT;
#endif // __BBC_DSK_H__

View File

@ -342,12 +342,17 @@ atomeb // 1979 Acorn Atom
atombb // 1979 Acorn Atom
//prophet2
bbca // 1981 BBC Micro Model A
bbcb // 1981 BBC Micro Model B
bbcb // 1981 BBC Micro Model B w/8271 FDC
bbcb_de // 1981 BBC Micro Model B (German)
bbcb_us // 1981 BBC Micro Model B (US)
bbcb_us // 1983 BBC Micro Model B (US)
electron // 1983 Acorn Electron
bbcb1770 // 1985 BBC Micro Model B w/1770 FDC
bbcbp // 1985 BBC Micro Model B+ 64K
bbcbp128 // 1985 BBC Micro Model B+ 128K
abc110 // 1985 ABC 110
abc210 // 1985 ABC 210/Cambridge Workstation
abc310 // 1985 ABC 310
reutapm // 1985 Reuters APM Board
bbcm // 1986 BBC Master 128
bbcmt // 1986 BBC Master Turbo
bbcmaiv // 1986 BBC Master AIV
@ -355,7 +360,8 @@ bbcmet // 1986 BBC Master ET
bbcm512 // 1986 BBC Master 512
bbcmarm // 1986 ARM Evaluation System
bbcmc // 1986 BBC Master Compact
bbcmc_ar // 1986 BBC Master Comapact (Arabic)
bbcmc_ar // 1986 BBC Master Compact (Arabic)
pro128s // 1987 Olivetti Prodest PC 128S
bbcbc // 1985 BBC Bridge Companion
a310 // 1988 Acorn Archimedes 310
a3010 // 1988 Acorn Archimedes 3010

File diff suppressed because it is too large Load Diff

View File

@ -22,6 +22,7 @@
#include "machine/i8271.h"
#include "machine/wd_fdc.h"
#include "machine/upd7002.h"
#include "machine/mc146818.h"
#include "video/mc6845.h"
#include "video/saa5050.h"
#include "sound/sn76496.h"
@ -52,7 +53,10 @@ public:
m_via6522_0(*this, "via6522_0"),
m_via6522_1(*this, "via6522_1"),
m_upd7002(*this, "upd7002"),
m_rtc(*this, "rtc"),
m_i8271(*this, "i8271"),
m_wd1770(*this, "wd1770"),
m_wd1772(*this, "wd1772"),
m_exp1(*this, "exp_rom1"),
m_exp2(*this, "exp_rom2"),
m_exp3(*this, "exp_rom3"),
@ -64,7 +68,6 @@ public:
m_region_maincpu(*this, "maincpu"),
m_region_os(*this, "os"),
m_region_opt(*this, "option"),
m_region_dfs(*this, "dfs"),
m_bank1(*this, "bank1"),
m_bank2(*this, "bank2"),
m_bank3(*this, "bank3"),
@ -80,7 +83,9 @@ public:
m_palette(*this, "palette")
{ }
DECLARE_FLOPPY_FORMATS(floppy_formats);
DECLARE_FLOPPY_FORMATS(floppy_formats_525sd);
DECLARE_FLOPPY_FORMATS(floppy_formats_525dd);
DECLARE_FLOPPY_FORMATS(floppy_formats_35dd);
DECLARE_WRITE8_MEMBER(bbc_page_selecta_w);
DECLARE_WRITE8_MEMBER(bbc_memorya1_w);
@ -104,40 +109,34 @@ public:
DECLARE_READ8_MEMBER(bbcm_r);
DECLARE_WRITE8_MEMBER(bbcm_w);
DECLARE_WRITE8_MEMBER(bbc_SerialULA_w);
DECLARE_READ8_MEMBER(bbc_i8271_read);
DECLARE_WRITE8_MEMBER(bbc_i8271_write);
DECLARE_WRITE8_MEMBER(bbc_wd177x_status_w);
DECLARE_READ8_MEMBER(bbc_wd1770_read);
DECLARE_WRITE8_MEMBER(bbc_wd1770_write);
DECLARE_WRITE8_MEMBER(bbc_opus_status_w);
DECLARE_READ8_MEMBER(bbc_opus_read);
DECLARE_WRITE8_MEMBER(bbc_opus_write);
DECLARE_READ8_MEMBER(bbcm_wd1770_read);
DECLARE_WRITE8_MEMBER(bbcm_wd1770_write);
DECLARE_READ8_MEMBER(bbcm_wd1770l_read);
DECLARE_WRITE8_MEMBER(bbc_wd1770_status_w);
DECLARE_READ8_MEMBER(bbcm_wd177xl_read);
DECLARE_WRITE8_MEMBER(bbcm_wd1770l_write);
DECLARE_READ8_MEMBER(bbc_disc_r);
DECLARE_WRITE8_MEMBER(bbc_disc_w);
DECLARE_WRITE8_MEMBER(bbcm_wd1772l_write);
DECLARE_WRITE8_MEMBER(bbc_videoULA_w);
DECLARE_WRITE8_MEMBER(bbc_6845_w);
DECLARE_READ8_MEMBER(bbc_6845_r);
DECLARE_READ8_MEMBER(bbc_fe_r);
DECLARE_DIRECT_UPDATE_MEMBER(bbcbp_direct_handler);
DECLARE_DIRECT_UPDATE_MEMBER(bbcm_direct_handler);
DECLARE_DRIVER_INIT(bbc);
DECLARE_DRIVER_INIT(bbcm);
DECLARE_MACHINE_START(bbca);
DECLARE_MACHINE_RESET(bbca);
DECLARE_VIDEO_START(bbca);
DECLARE_MACHINE_START(bbcb);
DECLARE_MACHINE_RESET(bbcb);
DECLARE_VIDEO_START(bbcb);
DECLARE_MACHINE_START(bbcbp);
DECLARE_MACHINE_RESET(bbcbp);
DECLARE_VIDEO_START(bbcbp);
DECLARE_MACHINE_START(bbcm);
DECLARE_MACHINE_RESET(bbcm);
DECLARE_VIDEO_START(bbcm);
DECLARE_PALETTE_INIT(bbc);
UINT32 screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(bbcb_vsync);
@ -197,13 +196,16 @@ public: // HACK FOR MC6845
optional_device<saa5050_device> m_trom;
optional_device<tms5220_device> m_tms;
optional_device<cassette_image_device> m_cassette;
required_device<acia6850_device> m_acia;
required_device<clock_device> m_acia_clock;
optional_device<acia6850_device> m_acia;
optional_device<clock_device> m_acia_clock;
optional_device<rs232_port_device> m_rs232;
required_device<via6522_device> m_via6522_0;
optional_device<via6522_device> m_via6522_1;
optional_device<upd7002_device> m_upd7002;
optional_device<mc146818_device> m_rtc;
optional_device<i8271_device> m_i8271;
optional_device<wd1770_t> m_wd1770;
optional_device<wd1772_t> m_wd1772;
required_device<generic_slot_device> m_exp1;
required_device<generic_slot_device> m_exp2;
optional_device<generic_slot_device> m_exp3;
@ -213,7 +215,6 @@ public: // HACK FOR MC6845
required_memory_region m_region_maincpu;
required_memory_region m_region_os;
required_memory_region m_region_opt;
optional_memory_region m_region_dfs;
required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm
optional_memory_bank m_bank2; // bbcbp bbcbp128 bbcm
optional_memory_bank m_bank3; // bbca bbcb
@ -225,11 +226,8 @@ public: // HACK FOR MC6845
void check_interrupts();
int m_DFSType; // this stores the DIP switch setting for the DFS type being used
int m_SWRAMtype; // this stores the DIP switch setting for the SWRAM type being used
int m_Speech; // this stores the CONF setting for Speech enabled/disabled
int m_Master; // if 0 then we are emulating a BBC B style machine
// if 1 then we are emulating a BBC Master style machine
int m_ACCCON_IRR; // IRQ inputs
@ -347,7 +345,7 @@ public: // HACK FOR MC6845
i8271 disc control
***************************************/
int m_previous_i8271_int_state; // 8271 interupt status
int m_previous_i8271_int_state; // 8271 interrupt status
/**************************************
WD1770 disc control
@ -357,13 +355,7 @@ public: // HACK FOR MC6845
int m_wd177x_irq_state;
int m_wd177x_drq_state;
int m_previous_wd177x_int_state;
int m_1770_IntEnabled;
/**************************************
Opus Challenger Disc control
***************************************/
int m_opusbank;
int m_177x_IntEnabled;
/**************************************
Video Code

File diff suppressed because it is too large Load Diff

View File

@ -99,8 +99,7 @@ static const int width_of_cursor_set[8]={ 0,0,1,2,1,0,2,4 };
this is used by the palette lookup in the video ULA */
void bbc_state::set_pixel_lookup()
{
int i;
for (i=0; i<256; i++)
for (int i=0; i<256; i++)
{
m_pixel_bits[i] = (((i>>7)&1)<<3) | (((i>>5)&1)<<2) | (((i>>3)&1)<<1) | (((i>>1)&1)<<0);
}
@ -254,37 +253,6 @@ WRITE_LINE_MEMBER(bbc_state::bbc_vsync)
m_trom->dew_w(state);
}
/************************************************************************
* memory interface to BBC's 6845
************************************************************************/
WRITE8_MEMBER(bbc_state::bbc_6845_w)
{
switch(offset & 1)
{
case 0 :
m_mc6845->address_w(space,0,data);
break;
case 1 :
m_mc6845->register_w(space,0,data);
break;
}
return;
}
READ8_MEMBER(bbc_state::bbc_6845_r)
{
switch (offset&1)
{
case 0: return m_mc6845->status_r(space,0);
case 1: return m_mc6845->register_r(space,0);
}
return 0;
}
/**** BBC B+ Shadow Ram change ****/
@ -319,7 +287,7 @@ void bbc_state::common_init(int memorySize)
VIDEO_START_MEMBER(bbc_state,bbca)
{
common_init(16);
common_init(m_ram->size()/1024);
}
VIDEO_START_MEMBER(bbc_state,bbcb)