mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
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:
parent
3227c85ed6
commit
c0e72ea08d
@ -3324,13 +3324,13 @@
|
|||||||
<publisher>Visions</publisher>
|
<publisher>Visions</publisher>
|
||||||
<info name="usage" value="Load with *RUN" />
|
<info name="usage" value="Load with *RUN" />
|
||||||
<part name="cass1" interface="bbc_cass">
|
<part name="cass1" interface="bbc_cass">
|
||||||
<dataarea name="cass" size="9339">
|
<dataarea name="cass" size="9319">
|
||||||
<rom name="demolator_infinitelives_run(visions).uef" size="9339" crc="8c638151" sha1="85aced0345aec14e7750c5daa290f1cb642b1961" offset="0" />
|
<rom name="demolator_run(visions).uef" size="9319" crc="5dc43e5b" sha1="d7d88ca1b651926104c0833e257e967e0d47dfc2" offset="0" />
|
||||||
</dataarea>
|
</dataarea>
|
||||||
</part>
|
</part>
|
||||||
<part name="cass2" interface="bbc_cass">
|
<part name="cass2" interface="bbc_cass">
|
||||||
<dataarea name="cass" size="9319">
|
<dataarea name="cass" size="9339">
|
||||||
<rom name="demolator_run(visions).uef" size="9319" crc="5dc43e5b" sha1="d7d88ca1b651926104c0833e257e967e0d47dfc2" offset="0" />
|
<rom name="demolator_infinitelives_run(visions).uef" size="9339" crc="8c638151" sha1="85aced0345aec14e7750c5daa290f1cb642b1961" offset="0" />
|
||||||
</dataarea>
|
</dataarea>
|
||||||
</part>
|
</part>
|
||||||
</software>
|
</software>
|
||||||
@ -5710,17 +5710,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="hopper21" cloneof="hopper">
|
||||||
<description>Hopper v2.1</description>
|
<description>Hopper v2.1</description>
|
||||||
<year>1983</year>
|
<year>1983</year>
|
||||||
@ -7430,17 +7419,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="meteorssc" cloneof="meteors">
|
||||||
<description>Meteors (The Acornsoft Hits Vol.2)</description>
|
<description>Meteors (The Acornsoft Hits Vol.2)</description>
|
||||||
<year>1987</year>
|
<year>1987</year>
|
||||||
@ -7745,17 +7723,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="monsterspias" cloneof="monsters">
|
||||||
<description>Monsters (Play It Again Sam 11)</description>
|
<description>Monsters (Play It Again Sam 11)</description>
|
||||||
<year>1989</year>
|
<year>1989</year>
|
||||||
@ -8889,17 +8856,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="plantoidsc" cloneof="plantoid">
|
||||||
<description>Planetoid (The Acornsoft Hits Vol.1)</description>
|
<description>Planetoid (The Acornsoft Hits Vol.1)</description>
|
||||||
<year>1987</year>
|
<year>1987</year>
|
||||||
@ -9828,17 +9784,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="rocketrasc" cloneof="rocketra">
|
||||||
<description>Rocket Raid (The Acornsoft Hits Vol.1)</description>
|
<description>Rocket Raid (The Acornsoft Hits Vol.1)</description>
|
||||||
<year>1987</year>
|
<year>1987</year>
|
||||||
@ -10721,17 +10666,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="snapperpias" cloneof="snapper">
|
||||||
<description>Snapper (Play It Again Sam 7)</description>
|
<description>Snapper (Play It Again Sam 7)</description>
|
||||||
<year>1988</year>
|
<year>1988</year>
|
||||||
@ -11902,17 +11836,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="superinv">
|
||||||
<description>Super Invaders</description>
|
<description>Super Invaders</description>
|
||||||
<year>1982</year>
|
<year>1982</year>
|
||||||
@ -13494,17 +13417,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="welcome">
|
||||||
<description>Welcome</description>
|
<description>Welcome</description>
|
||||||
<year>1981</year>
|
<year>1981</year>
|
||||||
@ -14099,17 +14011,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="dskdiary">
|
||||||
<description>Desk Diary</description>
|
<description>Desk Diary</description>
|
||||||
<year>198?</year>
|
<year>198?</year>
|
||||||
@ -14753,17 +14654,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="numberba">
|
||||||
<description>Number Balance</description>
|
<description>Number Balance</description>
|
||||||
<year>198?</year>
|
<year>198?</year>
|
||||||
@ -14852,17 +14742,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="sentseq">
|
||||||
<description>Sentence Sequencing</description>
|
<description>Sentence Sequencing</description>
|
||||||
<year>198?</year>
|
<year>198?</year>
|
||||||
@ -14967,17 +14846,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="treeknow">
|
||||||
<description>Tree Of Knowledge</description>
|
<description>Tree Of Knowledge</description>
|
||||||
<year>198?</year>
|
<year>198?</year>
|
||||||
@ -15077,17 +14945,6 @@
|
|||||||
</part>
|
</part>
|
||||||
</software>
|
</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">
|
<software name="spooky">
|
||||||
<description>Spooky Manor</description>
|
<description>Spooky Manor</description>
|
||||||
<year>198?</year>
|
<year>198?</year>
|
||||||
|
166
hash/bbcb_de_cass.xml
Normal file
166
hash/bbcb_de_cass.xml
Normal 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
25
hash/bbcb_us_flop.xml
Normal 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
25
hash/bbcmc_flop.xml
Normal 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
55
hash/pro128_cart.xml
Normal 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>
|
@ -1,53 +1,229 @@
|
|||||||
// license:GPL-2.0+
|
// license:GPL-2.0+
|
||||||
// copyright-holders:Dirk Best
|
// copyright-holders:Dirk Best, Nigel Barnes
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
BBC Micro
|
BBC Micro
|
||||||
|
|
||||||
Disk image format
|
Disk image formats
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "bbc_dsk.h"
|
#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,
|
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
|
{ // 200k 80 track single 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
|
|
||||||
floppy_image::FF_525, floppy_image::SSQD, floppy_image::FM,
|
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,
|
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>;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
// license:GPL-2.0+
|
// license:GPL-2.0+
|
||||||
// copyright-holders:Dirk Best
|
// copyright-holders:Dirk Best, Nigel Barnes
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
BBC Micro
|
BBC Micro
|
||||||
|
|
||||||
Disk image format
|
Disk image formats
|
||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
@ -13,12 +13,47 @@
|
|||||||
#ifndef __BBC_DSK_H__
|
#ifndef __BBC_DSK_H__
|
||||||
#define __BBC_DSK_H__
|
#define __BBC_DSK_H__
|
||||||
|
|
||||||
|
#include "flopimg.h"
|
||||||
#include "wd177x_dsk.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:
|
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 *name() const;
|
||||||
virtual const char *description() const;
|
virtual const char *description() const;
|
||||||
@ -28,6 +63,23 @@ private:
|
|||||||
static const format formats[];
|
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__
|
#endif // __BBC_DSK_H__
|
||||||
|
@ -342,12 +342,17 @@ atomeb // 1979 Acorn Atom
|
|||||||
atombb // 1979 Acorn Atom
|
atombb // 1979 Acorn Atom
|
||||||
//prophet2
|
//prophet2
|
||||||
bbca // 1981 BBC Micro Model A
|
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_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
|
electron // 1983 Acorn Electron
|
||||||
|
bbcb1770 // 1985 BBC Micro Model B w/1770 FDC
|
||||||
bbcbp // 1985 BBC Micro Model B+ 64K
|
bbcbp // 1985 BBC Micro Model B+ 64K
|
||||||
bbcbp128 // 1985 BBC Micro Model B+ 128K
|
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
|
bbcm // 1986 BBC Master 128
|
||||||
bbcmt // 1986 BBC Master Turbo
|
bbcmt // 1986 BBC Master Turbo
|
||||||
bbcmaiv // 1986 BBC Master AIV
|
bbcmaiv // 1986 BBC Master AIV
|
||||||
@ -355,7 +360,8 @@ bbcmet // 1986 BBC Master ET
|
|||||||
bbcm512 // 1986 BBC Master 512
|
bbcm512 // 1986 BBC Master 512
|
||||||
bbcmarm // 1986 ARM Evaluation System
|
bbcmarm // 1986 ARM Evaluation System
|
||||||
bbcmc // 1986 BBC Master Compact
|
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
|
bbcbc // 1985 BBC Bridge Companion
|
||||||
a310 // 1988 Acorn Archimedes 310
|
a310 // 1988 Acorn Archimedes 310
|
||||||
a3010 // 1988 Acorn Archimedes 3010
|
a3010 // 1988 Acorn Archimedes 3010
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -22,6 +22,7 @@
|
|||||||
#include "machine/i8271.h"
|
#include "machine/i8271.h"
|
||||||
#include "machine/wd_fdc.h"
|
#include "machine/wd_fdc.h"
|
||||||
#include "machine/upd7002.h"
|
#include "machine/upd7002.h"
|
||||||
|
#include "machine/mc146818.h"
|
||||||
#include "video/mc6845.h"
|
#include "video/mc6845.h"
|
||||||
#include "video/saa5050.h"
|
#include "video/saa5050.h"
|
||||||
#include "sound/sn76496.h"
|
#include "sound/sn76496.h"
|
||||||
@ -52,7 +53,10 @@ public:
|
|||||||
m_via6522_0(*this, "via6522_0"),
|
m_via6522_0(*this, "via6522_0"),
|
||||||
m_via6522_1(*this, "via6522_1"),
|
m_via6522_1(*this, "via6522_1"),
|
||||||
m_upd7002(*this, "upd7002"),
|
m_upd7002(*this, "upd7002"),
|
||||||
|
m_rtc(*this, "rtc"),
|
||||||
m_i8271(*this, "i8271"),
|
m_i8271(*this, "i8271"),
|
||||||
|
m_wd1770(*this, "wd1770"),
|
||||||
|
m_wd1772(*this, "wd1772"),
|
||||||
m_exp1(*this, "exp_rom1"),
|
m_exp1(*this, "exp_rom1"),
|
||||||
m_exp2(*this, "exp_rom2"),
|
m_exp2(*this, "exp_rom2"),
|
||||||
m_exp3(*this, "exp_rom3"),
|
m_exp3(*this, "exp_rom3"),
|
||||||
@ -64,7 +68,6 @@ public:
|
|||||||
m_region_maincpu(*this, "maincpu"),
|
m_region_maincpu(*this, "maincpu"),
|
||||||
m_region_os(*this, "os"),
|
m_region_os(*this, "os"),
|
||||||
m_region_opt(*this, "option"),
|
m_region_opt(*this, "option"),
|
||||||
m_region_dfs(*this, "dfs"),
|
|
||||||
m_bank1(*this, "bank1"),
|
m_bank1(*this, "bank1"),
|
||||||
m_bank2(*this, "bank2"),
|
m_bank2(*this, "bank2"),
|
||||||
m_bank3(*this, "bank3"),
|
m_bank3(*this, "bank3"),
|
||||||
@ -80,7 +83,9 @@ public:
|
|||||||
m_palette(*this, "palette")
|
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_page_selecta_w);
|
||||||
DECLARE_WRITE8_MEMBER(bbc_memorya1_w);
|
DECLARE_WRITE8_MEMBER(bbc_memorya1_w);
|
||||||
@ -104,40 +109,34 @@ public:
|
|||||||
DECLARE_READ8_MEMBER(bbcm_r);
|
DECLARE_READ8_MEMBER(bbcm_r);
|
||||||
DECLARE_WRITE8_MEMBER(bbcm_w);
|
DECLARE_WRITE8_MEMBER(bbcm_w);
|
||||||
DECLARE_WRITE8_MEMBER(bbc_SerialULA_w);
|
DECLARE_WRITE8_MEMBER(bbc_SerialULA_w);
|
||||||
DECLARE_READ8_MEMBER(bbc_i8271_read);
|
|
||||||
DECLARE_WRITE8_MEMBER(bbc_i8271_write);
|
DECLARE_WRITE8_MEMBER(bbc_wd1770_status_w);
|
||||||
DECLARE_WRITE8_MEMBER(bbc_wd177x_status_w);
|
DECLARE_READ8_MEMBER(bbcm_wd177xl_read);
|
||||||
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(bbcm_wd1770l_write);
|
DECLARE_WRITE8_MEMBER(bbcm_wd1770l_write);
|
||||||
DECLARE_READ8_MEMBER(bbc_disc_r);
|
DECLARE_WRITE8_MEMBER(bbcm_wd1772l_write);
|
||||||
DECLARE_WRITE8_MEMBER(bbc_disc_w);
|
|
||||||
DECLARE_WRITE8_MEMBER(bbc_videoULA_w);
|
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_READ8_MEMBER(bbc_fe_r);
|
||||||
DECLARE_DIRECT_UPDATE_MEMBER(bbcbp_direct_handler);
|
DECLARE_DIRECT_UPDATE_MEMBER(bbcbp_direct_handler);
|
||||||
DECLARE_DIRECT_UPDATE_MEMBER(bbcm_direct_handler);
|
DECLARE_DIRECT_UPDATE_MEMBER(bbcm_direct_handler);
|
||||||
|
|
||||||
DECLARE_DRIVER_INIT(bbc);
|
DECLARE_DRIVER_INIT(bbc);
|
||||||
DECLARE_DRIVER_INIT(bbcm);
|
|
||||||
DECLARE_MACHINE_START(bbca);
|
DECLARE_MACHINE_START(bbca);
|
||||||
DECLARE_MACHINE_RESET(bbca);
|
DECLARE_MACHINE_RESET(bbca);
|
||||||
DECLARE_VIDEO_START(bbca);
|
DECLARE_VIDEO_START(bbca);
|
||||||
|
|
||||||
DECLARE_MACHINE_START(bbcb);
|
DECLARE_MACHINE_START(bbcb);
|
||||||
DECLARE_MACHINE_RESET(bbcb);
|
DECLARE_MACHINE_RESET(bbcb);
|
||||||
DECLARE_VIDEO_START(bbcb);
|
DECLARE_VIDEO_START(bbcb);
|
||||||
|
|
||||||
DECLARE_MACHINE_START(bbcbp);
|
DECLARE_MACHINE_START(bbcbp);
|
||||||
DECLARE_MACHINE_RESET(bbcbp);
|
DECLARE_MACHINE_RESET(bbcbp);
|
||||||
DECLARE_VIDEO_START(bbcbp);
|
DECLARE_VIDEO_START(bbcbp);
|
||||||
|
|
||||||
DECLARE_MACHINE_START(bbcm);
|
DECLARE_MACHINE_START(bbcm);
|
||||||
DECLARE_MACHINE_RESET(bbcm);
|
DECLARE_MACHINE_RESET(bbcm);
|
||||||
DECLARE_VIDEO_START(bbcm);
|
DECLARE_VIDEO_START(bbcm);
|
||||||
|
|
||||||
DECLARE_PALETTE_INIT(bbc);
|
DECLARE_PALETTE_INIT(bbc);
|
||||||
UINT32 screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update_bbc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
INTERRUPT_GEN_MEMBER(bbcb_vsync);
|
INTERRUPT_GEN_MEMBER(bbcb_vsync);
|
||||||
@ -197,13 +196,16 @@ public: // HACK FOR MC6845
|
|||||||
optional_device<saa5050_device> m_trom;
|
optional_device<saa5050_device> m_trom;
|
||||||
optional_device<tms5220_device> m_tms;
|
optional_device<tms5220_device> m_tms;
|
||||||
optional_device<cassette_image_device> m_cassette;
|
optional_device<cassette_image_device> m_cassette;
|
||||||
required_device<acia6850_device> m_acia;
|
optional_device<acia6850_device> m_acia;
|
||||||
required_device<clock_device> m_acia_clock;
|
optional_device<clock_device> m_acia_clock;
|
||||||
optional_device<rs232_port_device> m_rs232;
|
optional_device<rs232_port_device> m_rs232;
|
||||||
required_device<via6522_device> m_via6522_0;
|
required_device<via6522_device> m_via6522_0;
|
||||||
optional_device<via6522_device> m_via6522_1;
|
optional_device<via6522_device> m_via6522_1;
|
||||||
optional_device<upd7002_device> m_upd7002;
|
optional_device<upd7002_device> m_upd7002;
|
||||||
|
optional_device<mc146818_device> m_rtc;
|
||||||
optional_device<i8271_device> m_i8271;
|
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_exp1;
|
||||||
required_device<generic_slot_device> m_exp2;
|
required_device<generic_slot_device> m_exp2;
|
||||||
optional_device<generic_slot_device> m_exp3;
|
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_maincpu;
|
||||||
required_memory_region m_region_os;
|
required_memory_region m_region_os;
|
||||||
required_memory_region m_region_opt;
|
required_memory_region m_region_opt;
|
||||||
optional_memory_region m_region_dfs;
|
|
||||||
required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm
|
required_memory_bank m_bank1; // bbca bbcb bbcbp bbcbp128 bbcm
|
||||||
optional_memory_bank m_bank2; // bbcbp bbcbp128 bbcm
|
optional_memory_bank m_bank2; // bbcbp bbcbp128 bbcm
|
||||||
optional_memory_bank m_bank3; // bbca bbcb
|
optional_memory_bank m_bank3; // bbca bbcb
|
||||||
@ -225,11 +226,8 @@ public: // HACK FOR MC6845
|
|||||||
|
|
||||||
void check_interrupts();
|
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_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_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
|
int m_ACCCON_IRR; // IRQ inputs
|
||||||
|
|
||||||
@ -347,7 +345,7 @@ public: // HACK FOR MC6845
|
|||||||
i8271 disc control
|
i8271 disc control
|
||||||
***************************************/
|
***************************************/
|
||||||
|
|
||||||
int m_previous_i8271_int_state; // 8271 interupt status
|
int m_previous_i8271_int_state; // 8271 interrupt status
|
||||||
|
|
||||||
/**************************************
|
/**************************************
|
||||||
WD1770 disc control
|
WD1770 disc control
|
||||||
@ -357,13 +355,7 @@ public: // HACK FOR MC6845
|
|||||||
int m_wd177x_irq_state;
|
int m_wd177x_irq_state;
|
||||||
int m_wd177x_drq_state;
|
int m_wd177x_drq_state;
|
||||||
int m_previous_wd177x_int_state;
|
int m_previous_wd177x_int_state;
|
||||||
int m_1770_IntEnabled;
|
int m_177x_IntEnabled;
|
||||||
|
|
||||||
/**************************************
|
|
||||||
Opus Challenger Disc control
|
|
||||||
***************************************/
|
|
||||||
|
|
||||||
int m_opusbank;
|
|
||||||
|
|
||||||
/**************************************
|
/**************************************
|
||||||
Video Code
|
Video Code
|
||||||
|
@ -51,19 +51,11 @@ Model B memory handling functions
|
|||||||
*************************/
|
*************************/
|
||||||
|
|
||||||
/* the model B address all 16 of the ROM sockets */
|
/* the model B address all 16 of the ROM sockets */
|
||||||
/* I have set bank 1 as a special case to load different DFS roms selectable from MESS's CONF settings var:bbc_DFSTypes */
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_page_selectb_w)
|
WRITE8_MEMBER(bbc_state::bbc_page_selectb_w)
|
||||||
{
|
{
|
||||||
m_rombank = data & 0x0f;
|
m_rombank = data & 0x0f;
|
||||||
if (m_rombank != 1)
|
|
||||||
{
|
|
||||||
m_bank4->set_entry(m_rombank);
|
m_bank4->set_entry(m_rombank);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
m_bank4->set_entry(0x10 + m_DFSType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_memoryb3_w)
|
WRITE8_MEMBER(bbc_state::bbc_memoryb3_w)
|
||||||
@ -89,13 +81,6 @@ static const unsigned short bbc_SWRAMtype2[16]={0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0}
|
|||||||
static const unsigned short bbc_SWRAMtype3[16]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
|
static const unsigned short bbc_SWRAMtype3[16]={0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1};
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_memoryb4_w)
|
WRITE8_MEMBER(bbc_state::bbc_memoryb4_w)
|
||||||
{
|
|
||||||
if (m_rombank == 1)
|
|
||||||
{
|
|
||||||
// special DFS case for Acorn DFS E00 Hack that can write to the DFS RAM Bank;
|
|
||||||
if (m_DFSType == 3) m_region_dfs->base()[((m_DFSType) << 14) + offset] = data;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
switch (m_SWRAMtype)
|
switch (m_SWRAMtype)
|
||||||
{
|
{
|
||||||
@ -104,7 +89,6 @@ WRITE8_MEMBER(bbc_state::bbc_memoryb4_w)
|
|||||||
case 3: if (bbc_SWRAMtype3[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data;
|
case 3: if (bbc_SWRAMtype3[m_rombank]) m_region_opt->base()[(m_rombank << 14) + offset] = data;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************/
|
/****************************************/
|
||||||
/* BBC B Plus memory handling function */
|
/* BBC B Plus memory handling function */
|
||||||
@ -377,7 +361,7 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write)
|
|||||||
m_bank2->set_base(m_region_maincpu->base() + 0x3000);
|
m_bank2->set_base(m_region_maincpu->base() + 0x3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF reigon */
|
/* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF region */
|
||||||
/* if 0 the I/O is paged for both reads and writes */
|
/* if 0 the I/O is paged for both reads and writes */
|
||||||
/* if 1 the ROM is paged in for reads but writes still go to I/O */
|
/* if 1 the ROM is paged in for reads but writes still go to I/O */
|
||||||
if (m_ACCCON_TST)
|
if (m_ACCCON_TST)
|
||||||
@ -538,7 +522,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm7_w)
|
|||||||
&FE18-&FE1F uPD7002 A to D converter A to D converter 8 ( 4 bytes x 2 )
|
&FE18-&FE1F uPD7002 A to D converter A to D converter 8 ( 4 bytes x 2 )
|
||||||
&FE20-&FE23 Video ULA - Video system chip 4 ( 2 bytes x 2 )
|
&FE20-&FE23 Video ULA - Video system chip 4 ( 2 bytes x 2 )
|
||||||
&FE24-&FE27 FDC Latch 1770 Control latch 1770 Control latch 4 ( 1 byte x 4 )
|
&FE24-&FE27 FDC Latch 1770 Control latch 1770 Control latch 4 ( 1 byte x 4 )
|
||||||
&FE28-&FE2F 1770 registers 1770 Disc Controller 1170 Disc Controller 8 ( 4 bytes x 2 )
|
&FE28-&FE2F 1770 registers 1770 Disc Controller 1770 Disc Controller 8 ( 4 bytes x 2 )
|
||||||
&FE30-&FE33 ROMSEL - ROM Select 4 ( 1 byte x 4 )
|
&FE30-&FE33 ROMSEL - ROM Select 4 ( 1 byte x 4 )
|
||||||
&FE34-&3FE7 ACCCON ACCCON select reg. ACCCON select reg 4 ( 1 byte x 4 )
|
&FE34-&3FE7 ACCCON ACCCON select reg. ACCCON select reg 4 ( 1 byte x 4 )
|
||||||
&FE38-&FE3F NC - -
|
&FE38-&FE3F NC - -
|
||||||
@ -554,12 +538,6 @@ READ8_MEMBER(bbc_state::bbcm_r)
|
|||||||
{
|
{
|
||||||
long myo;
|
long myo;
|
||||||
|
|
||||||
/* Now handled in bbcm_ACCCON_write PHS - 2008-10-11 */
|
|
||||||
// if ( m_ACCCON_TST )
|
|
||||||
// {
|
|
||||||
// return m_region_os->base()[offset + 0x3c00];
|
|
||||||
// };
|
|
||||||
|
|
||||||
if (offset<=0x0ff) /* FRED */
|
if (offset<=0x0ff) /* FRED */
|
||||||
{
|
{
|
||||||
return 0xff;
|
return 0xff;
|
||||||
@ -573,30 +551,27 @@ READ8_MEMBER(bbc_state::bbcm_r)
|
|||||||
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
||||||
{
|
{
|
||||||
myo = offset-0x200;
|
myo = offset-0x200;
|
||||||
if ((myo>=0x00) && (myo<=0x07)) return bbc_6845_r(space, myo-0x00); /* Video Controller */
|
if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) return m_mc6845->status_r(space, myo-0x00); /* Video controller */
|
||||||
if ((myo>=0x08) && (myo<=0x0f))
|
if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) return m_mc6845->register_r(space, myo-0x01);
|
||||||
{
|
if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) return m_acia ? m_acia->status_r(space, myo-0x08) : 0xfe; /* Serial controller */
|
||||||
if ((myo - 0x08) & 1)
|
if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) return m_acia ? m_acia->data_r(space, myo-0x09) : 0xfe;
|
||||||
return m_acia->status_r(space,0);
|
|
||||||
else
|
|
||||||
return m_acia->data_r(space,0);
|
|
||||||
}
|
|
||||||
if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */
|
if ((myo>=0x10) && (myo<=0x17)) return 0xfe; /* Serial System Chip */
|
||||||
if ((myo>=0x18) && (myo<=0x1f)) return m_upd7002->read(space, myo-0x18); /* A to D converter */
|
if ((myo>=0x18) && (myo<=0x1f)) return m_upd7002 ? m_upd7002->read(space, myo-0x18) : 0xfe; /* A to D converter */
|
||||||
if ((myo>=0x20) && (myo<=0x23)) return 0xfe; /* VideoULA */
|
if ((myo>=0x20) && (myo<=0x23)) return 0xfe; /* VideoULA */
|
||||||
if ((myo>=0x24) && (myo<=0x27)) return bbcm_wd1770l_read(space, myo-0x24); /* 1770 */
|
if ((myo>=0x24) && (myo<=0x27)) return bbcm_wd177xl_read(space, myo - 0x24); /* 177x Control Latch */
|
||||||
if ((myo>=0x28) && (myo<=0x2f)) return bbcm_wd1770_read(space, myo-0x28); /* disc control latch */
|
if ((myo>=0x28) && (myo<=0x2f) && (m_wd1770)) return m_wd1770->read(space, myo-0x28); /* 1770 Controller */
|
||||||
if ((myo>=0x30) && (myo<=0x33)) return 0xfe; /* page select */
|
if ((myo>=0x28) && (myo<=0x2f) && (m_wd1772)) return m_wd1772->read(space, myo-0x28); /* 1772 Controller */
|
||||||
|
if ((myo>=0x28) && (myo<=0x2f)) return 0xfe; /* No Controller */
|
||||||
|
if ((myo>=0x30) && (myo<=0x33)) return 0xfe;
|
||||||
if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34); /* ACCCON */
|
if ((myo>=0x34) && (myo<=0x37)) return bbcm_ACCCON_read(space, myo-0x34); /* ACCCON */
|
||||||
if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */
|
if ((myo>=0x38) && (myo<=0x3f)) return 0xfe; /* NC ?? */
|
||||||
if ((myo>=0x40) && (myo<=0x5f)) return m_via6522_0->read(space, myo-0x40);
|
if ((myo>=0x40) && (myo<=0x5f)) return m_via6522_0->read(space, myo-0x40);
|
||||||
if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1->read(space, myo-0x60);
|
if ((myo>=0x60) && (myo<=0x7f)) return m_via6522_1 ? m_via6522_1->read(space, myo-0x60) : 0xfe;
|
||||||
if ((myo>=0x80) && (myo<=0x9f)) return 0xfe;
|
if ((myo>=0x80) && (myo<=0x9f)) return 0xfe;
|
||||||
if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc->read(space, myo & 0x03);
|
if ((myo>=0xa0) && (myo<=0xbf)) return m_adlc ? m_adlc->read(space, myo & 0x03) : 0xfe;
|
||||||
if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe;
|
if ((myo>=0xc0) && (myo<=0xdf)) return 0xfe;
|
||||||
if ((myo>=0xe0) && (myo<=0xff)) return 0xfe;
|
if ((myo>=0xe0) && (myo<=0xff)) return 0xfe;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0xfe;
|
return 0xfe;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -607,26 +582,24 @@ WRITE8_MEMBER(bbc_state::bbcm_w)
|
|||||||
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
if ((offset>=0x200) && (offset<=0x2ff)) /* SHEILA */
|
||||||
{
|
{
|
||||||
myo=offset-0x200;
|
myo=offset-0x200;
|
||||||
if ((myo>=0x00) && (myo<=0x07)) bbc_6845_w(space, myo-0x00, data); /* Video Controller */
|
if ((myo>=0x00) && (myo<=0x06) && (myo+0x01) & 1) m_mc6845->address_w(space, myo-0x00, data); /* Video Controller */
|
||||||
if ((myo>=0x08) && (myo<=0x0f))
|
if ((myo>=0x01) && (myo<=0x07) && (myo & 1)) m_mc6845->register_w(space, myo-0x01, data);
|
||||||
{
|
if ((myo>=0x08) && (myo<=0x0e) && (myo+0x01) & 1) if (m_acia) m_acia->control_w(space, myo-0x08, data); /* Serial controller */
|
||||||
if ((myo - 0x08) & 1)
|
if ((myo>=0x09) && (myo<=0x0f) && (myo & 1)) if (m_acia) m_acia->data_w(space, myo-0x09, data);
|
||||||
m_acia->control_w(space, 0, data);
|
|
||||||
else
|
|
||||||
m_acia->data_w(space, 0, data);
|
|
||||||
}
|
|
||||||
if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */
|
if ((myo>=0x10) && (myo<=0x17)) bbc_SerialULA_w(space, myo-0x10, data); /* Serial System Chip */
|
||||||
if ((myo>=0x18) && (myo<=0x1f)) m_upd7002->write(space, myo-0x18, data); /* A to D converter */
|
if ((myo>=0x18) && (myo<=0x1f) && (m_upd7002)) m_upd7002->write(space, myo-0x18, data); /* A to D converter */
|
||||||
if ((myo>=0x20) && (myo<=0x23)) bbc_videoULA_w(space, myo-0x20, data); /* VideoULA */
|
if ((myo>=0x20) && (myo<=0x23)) bbc_videoULA_w(space, myo-0x20, data); /* VideoULA */
|
||||||
if ((myo>=0x24) && (myo<=0x27)) bbcm_wd1770l_write(space, myo-0x24, data); /* 1770 */
|
if ((myo>=0x24) && (myo<=0x27) && (m_wd1770)) bbcm_wd1770l_write(space, myo-0x24, data); /* disc control latch */
|
||||||
if ((myo>=0x28) && (myo<=0x2f)) bbcm_wd1770_write(space, myo-0x28, data); /* disc control latch */
|
if ((myo>=0x28) && (myo<=0x2f) && (m_wd1770)) m_wd1770->write(space, myo-0x28, data); /* 1770 Controller */
|
||||||
if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30, data); /* page select */
|
if ((myo>=0x24) && (myo<=0x27) && (m_wd1772)) bbcm_wd1772l_write(space, myo-0x24, data); /* disc control latch */
|
||||||
|
if ((myo>=0x28) && (myo<=0x2f) && (m_wd1772)) m_wd1772->write(space, myo-0x28, data); /* 1772 Controller */
|
||||||
|
if ((myo>=0x30) && (myo<=0x33)) page_selectbm_w(space, myo-0x30, data); /* ROMSEL */
|
||||||
if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34, data); /* ACCCON */
|
if ((myo>=0x34) && (myo<=0x37)) bbcm_ACCCON_write(space, myo-0x34, data); /* ACCCON */
|
||||||
//if ((myo>=0x38) && (myo<=0x3f)) /* NC ?? */
|
//if ((myo>=0x38) && (myo<=0x3f)) /* NC ?? */
|
||||||
if ((myo>=0x40) && (myo<=0x5f)) m_via6522_0->write(space, myo-0x40, data);
|
if ((myo>=0x40) && (myo<=0x5f)) m_via6522_0->write(space, myo-0x40, data);
|
||||||
if ((myo>=0x60) && (myo<=0x7f)) m_via6522_1->write(space, myo-0x60, data);
|
if ((myo>=0x60) && (myo<=0x7f) && (m_via6522_1)) m_via6522_1->write(space, myo-0x60, data);
|
||||||
//if ((myo>=0x80) && (myo<=0x9f))
|
//if ((myo>=0x80) && (myo<=0x9f))
|
||||||
if ((myo>=0xa0) && (myo<=0xbf)) m_adlc->write(space, myo & 0x03, data);
|
if ((myo>=0xa0) && (myo<=0xbf) && (m_adlc)) m_adlc->write(space, myo & 0x03, data);
|
||||||
//if ((myo>=0xc0) && (myo<=0xdf))
|
//if ((myo>=0xc0) && (myo<=0xdf))
|
||||||
//if ((myo>=0xe0) && (myo<=0xff))
|
//if ((myo>=0xe0) && (myo<=0xff))
|
||||||
}
|
}
|
||||||
@ -665,18 +638,23 @@ These are the inputs from the joystick FIRE buttons. They are
|
|||||||
normally at logic 1 with no button pressed and change to 0
|
normally at logic 1 with no button pressed and change to 0
|
||||||
when a button is pressed.
|
when a button is pressed.
|
||||||
|
|
||||||
PB6 and PB7 inputs from the speech processor
|
PB6 and PB7 inputs from the speech processor (model B and B+)
|
||||||
--------------------------------------------
|
-------------------------------------------------------------
|
||||||
PB6 is the speech processor 'ready' output and PB7 is from the
|
PB6 is the speech processor 'ready' output and PB7 is from the
|
||||||
speech processor 'interrupt' output.
|
speech processor 'interrupt' output.
|
||||||
|
|
||||||
|
PB6 and PB7 outputs to Master CMOS RAM/RTC
|
||||||
|
------------------------------------------
|
||||||
|
PB6 operates the 146818 chip enable when set to '1'. PB7 operates
|
||||||
|
the 146818 address strobe line.
|
||||||
|
|
||||||
CA1 input
|
CA1 input
|
||||||
---------
|
---------
|
||||||
This is the vertical sync input from the 6845. CA1 is set up to
|
This is the vertical sync input from the 6845. CA1 is set up to
|
||||||
interrupt the 6502 every 20ms (50Hz) as a vertical sync from
|
interrupt the 6502 every 20ms (50Hz) as a vertical sync from
|
||||||
the video circuity is detected. The operation system changes
|
the video circuitry is detected. The operation system changes
|
||||||
the flash colours on the display in this interrupt time so that
|
the display flash colours on this interrupt so that they occur
|
||||||
they maintain synchronisation with the rest of the picture.
|
during the screen blanking period.
|
||||||
----------------------------------------------------------------
|
----------------------------------------------------------------
|
||||||
This is required for a lot of time function within the machine
|
This is required for a lot of time function within the machine
|
||||||
and must be triggered every 20ms. (Should check at some point
|
and must be triggered every 20ms. (Should check at some point
|
||||||
@ -830,8 +808,8 @@ void bbc_state::bbcb_IC32_initialise(bbc_state *state)
|
|||||||
/* This the BBC Masters Real Time Clock and NVRAM IC */
|
/* This the BBC Masters Real Time Clock and NVRAM IC */
|
||||||
void bbc_state::MC146818_set(address_space &space)
|
void bbc_state::MC146818_set(address_space &space)
|
||||||
{
|
{
|
||||||
logerror ("146181 WR=%d DS=%d AS=%d CE=%d \n",m_MC146818_WR,m_MC146818_DS,m_MC146818_AS,m_MC146818_CE);
|
//logerror ("146181 WR=%d DS=%d AS=%d CE=%d \n",m_MC146818_WR,m_MC146818_DS,m_MC146818_AS,m_MC146818_CE);
|
||||||
mc146818_device *rtc = space.machine().device<mc146818_device>("rtc");
|
//mc146818_device *rtc = space.machine().device<mc146818_device>("rtc");
|
||||||
|
|
||||||
// if chip enabled
|
// if chip enabled
|
||||||
if (m_MC146818_CE)
|
if (m_MC146818_CE)
|
||||||
@ -841,12 +819,12 @@ void bbc_state::MC146818_set(address_space &space)
|
|||||||
{
|
{
|
||||||
if (m_MC146818_WR)
|
if (m_MC146818_WR)
|
||||||
{
|
{
|
||||||
m_via_system_porta=rtc->read(space, 1);
|
m_via_system_porta = m_rtc->read(space, 1);
|
||||||
//logerror("read 146818 data %d \n",m_via_system_porta);
|
//logerror("read 146818 data %d \n",m_via_system_porta);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
rtc->write(space, 1, m_via_system_porta);
|
m_rtc->write(space, 1, m_via_system_porta);
|
||||||
//logerror("write 146818 data %d \n",m_via_system_porta);
|
//logerror("write 146818 data %d \n",m_via_system_porta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -854,7 +832,7 @@ void bbc_state::MC146818_set(address_space &space)
|
|||||||
// if address select is set then set the address in the 146818
|
// if address select is set then set the address in the 146818
|
||||||
if (m_MC146818_AS)
|
if (m_MC146818_AS)
|
||||||
{
|
{
|
||||||
rtc->write(space, 0, m_via_system_porta);
|
m_rtc->write(space, 0, m_via_system_porta);
|
||||||
//logerror("write 146818 address %d \n",m_via_system_porta);
|
//logerror("write 146818 address %d \n",m_via_system_porta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -869,14 +847,24 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_porta)
|
|||||||
if (m_b0_sound == 0)
|
if (m_b0_sound == 0)
|
||||||
{
|
{
|
||||||
//logerror("Doing an unsafe write to the sound chip %d \n",data);
|
//logerror("Doing an unsafe write to the sound chip %d \n",data);
|
||||||
m_sn->write(space, 0, m_via_system_porta);
|
if (m_sn) m_sn->write(space, 0, m_via_system_porta);
|
||||||
|
}
|
||||||
|
if (m_b1_speech_read == 0)
|
||||||
|
{
|
||||||
|
if (m_tms) m_via_system_porta = m_tms->status_r(space, 0);
|
||||||
|
//logerror("Doing an unsafe read to the speech chip %d \n",m_via_system_porta);
|
||||||
|
}
|
||||||
|
if (m_b2_speech_write == 0)
|
||||||
|
{
|
||||||
|
//logerror("Doing an unsafe write to the speech chip %d \n",data);
|
||||||
|
if (m_tms) m_tms->data_w(space, 0, m_via_system_porta);
|
||||||
}
|
}
|
||||||
if (m_b3_keyboard == 0)
|
if (m_b3_keyboard == 0)
|
||||||
{
|
{
|
||||||
//logerror("Doing an unsafe write to the keyboard %d \n",data);
|
//logerror("Doing an unsafe write to the keyboard %d \n",data);
|
||||||
m_via_system_porta = bbc_keyboard(space, m_via_system_porta);
|
m_via_system_porta = bbc_keyboard(space, m_via_system_porta);
|
||||||
}
|
}
|
||||||
if (m_Master) MC146818_set(space);
|
if (m_rtc) MC146818_set(space);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -899,40 +887,38 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (m_Master)
|
if (m_rtc && m_MC146818_WR == 0)
|
||||||
{
|
{
|
||||||
if (m_MC146818_WR == 0)
|
/* BBC Master has NVRAM Here */
|
||||||
{
|
|
||||||
/* BBC MASTER has NVRAM Here */
|
|
||||||
m_MC146818_WR = 1;
|
m_MC146818_WR = 1;
|
||||||
MC146818_set(space);
|
MC146818_set(space);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_b1_speech_read == 0)
|
if (m_b1_speech_read == 0)
|
||||||
{
|
{
|
||||||
/* VSP TMS 5220 */
|
/* VSP TMS 5220 */
|
||||||
m_b1_speech_read = 1;
|
m_b1_speech_read = 1;
|
||||||
|
//logerror("Speech read select TRUE\n");
|
||||||
|
if (m_tms) m_tms->rsq_w(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (m_Master)
|
if (m_rtc && m_MC146818_DS == 0)
|
||||||
{
|
{
|
||||||
if (m_MC146818_DS == 0)
|
/* BBC Master has NVRAM Here */
|
||||||
{
|
|
||||||
/* BBC MASTER has NVRAM Here */
|
|
||||||
m_MC146818_DS = 1;
|
m_MC146818_DS = 1;
|
||||||
MC146818_set(space);
|
MC146818_set(space);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_b2_speech_write == 0)
|
if (m_b2_speech_write == 0)
|
||||||
{
|
{
|
||||||
/* VSP TMS 5220 */
|
/* VSP TMS 5220 */
|
||||||
m_b2_speech_write = 1;
|
m_b2_speech_write = 1;
|
||||||
|
//logerror("Speech write select TRUE\n");
|
||||||
|
if (m_tms) m_tms->wsq_w(TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -980,44 +966,42 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
if (m_b0_sound == 1)
|
if (m_b0_sound == 1)
|
||||||
{
|
{
|
||||||
m_b0_sound = 0;
|
m_b0_sound = 0;
|
||||||
m_sn->write(space, 0, m_via_system_porta);
|
if (m_sn) m_sn->write(space, 0, m_via_system_porta);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
if (m_Master)
|
if (m_rtc && m_MC146818_WR == 1)
|
||||||
{
|
{
|
||||||
if (m_MC146818_WR == 1)
|
/* BBC Master has NVRAM Here */
|
||||||
{
|
|
||||||
/* BBC MASTER has NV RAM Here */
|
|
||||||
m_MC146818_WR = 0;
|
m_MC146818_WR = 0;
|
||||||
MC146818_set(space);
|
MC146818_set(space);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_b1_speech_read == 1)
|
if (m_b1_speech_read == 1)
|
||||||
{
|
{
|
||||||
/* VSP TMS 5220 */
|
/* VSP TMS 5220 */
|
||||||
m_b1_speech_read = 0;
|
m_b1_speech_read = 0;
|
||||||
|
//logerror("Speech read select FALSE\n");
|
||||||
|
if (m_tms) m_tms->rsq_w(FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (m_Master)
|
if (m_rtc && m_MC146818_DS == 1)
|
||||||
{
|
{
|
||||||
if (m_MC146818_DS == 1)
|
/* BBC Master has NVRAM Here */
|
||||||
{
|
|
||||||
/* BBC MASTER has NV RAM Here */
|
|
||||||
m_MC146818_DS = 0;
|
m_MC146818_DS = 0;
|
||||||
MC146818_set(space);
|
MC146818_set(space);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (m_b2_speech_write == 1)
|
if (m_b2_speech_write == 1)
|
||||||
{
|
{
|
||||||
/* VSP TMS 5220 */
|
/* VSP TMS 5220 */
|
||||||
m_b2_speech_write = 0;
|
m_b2_speech_write = 0;
|
||||||
|
//logerror("Speech write select FALSE\n");
|
||||||
|
if (m_tms) m_tms->wsq_w(FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1061,7 +1045,7 @@ WRITE8_MEMBER(bbc_state::bbcb_via_system_write_portb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (m_Master)
|
if (m_rtc)
|
||||||
{
|
{
|
||||||
//set the Address Select
|
//set the Address Select
|
||||||
if (m_MC146818_AS != ((data>>7)&1))
|
if (m_MC146818_AS != ((data>>7)&1))
|
||||||
@ -1086,33 +1070,18 @@ READ8_MEMBER(bbc_state::bbcb_via_system_read_porta)
|
|||||||
return m_via_system_porta;
|
return m_via_system_porta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
READ8_MEMBER(bbc_state::bbcb_via_system_read_portb)
|
||||||
|
{
|
||||||
// D4 of portb is joystick fire button 1
|
// D4 of portb is joystick fire button 1
|
||||||
// D5 of portb is joystick fire button 2
|
// D5 of portb is joystick fire button 2
|
||||||
// D6 VSPINT
|
// D6 VSPINT
|
||||||
// D7 VSPRDY
|
// D7 VSPRDY
|
||||||
|
int TMSint = m_tms ? m_tms->intq_r() : 0;
|
||||||
/* this is the interupt and ready signal from the BBC B Speech processor */
|
int TMSrdy = m_tms ? m_tms->readyq_r() : 0;
|
||||||
static const int TMSint=1;
|
//logerror("TMSint %d\n",TMSint);
|
||||||
static const int TMSrdy=1;
|
//logerror("TMSrdy %d\n",TMSrdy);
|
||||||
|
return (0xf | ioport("IN0")->read() | (!TMSrdy << 7) | (!TMSint << 6));
|
||||||
#ifdef UNUSED_FUNCTION
|
|
||||||
void bbc_state::bbc_TMSint(int status)
|
|
||||||
{
|
|
||||||
TMSint=(!status)&1;
|
|
||||||
TMSrdy=(!tms5220_readyq_r())&1;
|
|
||||||
via_0_portb_w(0,(0xf | ioport("IN0")->read()|(TMSint<<6)|(TMSrdy<<7)));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
READ8_MEMBER(bbc_state::bbcb_via_system_read_portb)
|
|
||||||
{
|
|
||||||
//TMSint=(!tms5220_int_r())&1;
|
|
||||||
//TMSrdy=(!tms5220_readyq_r())&1;
|
|
||||||
|
|
||||||
//logerror("SYSTEM read portb %d\n",0xf | input_port(machine, "IN0") | (TMSint<<6)|(TMSrdy<<7));
|
|
||||||
|
|
||||||
return (0xf | ioport("IN0")->read() | (TMSint<<6)|(TMSrdy<<7));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1129,7 +1098,7 @@ Port A output is buffered before being connected to the printer connector.
|
|||||||
This means that they can only be operated as output lines.
|
This means that they can only be operated as output lines.
|
||||||
CA1 is pulled high by a 4K7 resistor. CA1 normally acts as an acknowledge
|
CA1 is pulled high by a 4K7 resistor. CA1 normally acts as an acknowledge
|
||||||
line when a printer is used. CA2 is buffered so that it has become an open
|
line when a printer is used. CA2 is buffered so that it has become an open
|
||||||
collector output only. It usially acts as the printer strobe line.
|
collector output only. It usually acts as the printer strobe line.
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
/* USER VIA 6522 port B is connected to the BBC user port */
|
/* USER VIA 6522 port B is connected to the BBC user port */
|
||||||
@ -1430,7 +1399,7 @@ WRITE8_MEMBER(bbc_state::bbc_SerialULA_w)
|
|||||||
update_acia_rxd();
|
update_acia_rxd();
|
||||||
update_acia_dcd();
|
update_acia_dcd();
|
||||||
update_acia_cts();
|
update_acia_cts();
|
||||||
BBC_Cassette_motor(m_serproc_data & 0x80);
|
if (m_cassette) BBC_Cassette_motor(m_serproc_data & 0x80);
|
||||||
|
|
||||||
// Set transmit clock rate
|
// Set transmit clock rate
|
||||||
m_acia_clock->set_clock_scale( (double) 1 / serial_clocks[ data & 0x07 ] );
|
m_acia_clock->set_clock_scale( (double) 1 / serial_clocks[ data & 0x07 ] );
|
||||||
@ -1471,55 +1440,6 @@ WRITE_LINE_MEMBER(bbc_state::bbc_i8271_interrupt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
READ8_MEMBER(bbc_state::bbc_i8271_read)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
logerror("i8271 read %d ",offset);
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
/* 8271 registers */
|
|
||||||
ret=m_i8271->read(space, offset);
|
|
||||||
logerror(" %d\n",ret);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
ret=m_i8271->data_r(space, offset);
|
|
||||||
logerror(" %d\n",ret);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ret=0x0ff;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
logerror(" void\n");
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_i8271_write)
|
|
||||||
{
|
|
||||||
logerror("i8271 write %d %d\n",offset,data);
|
|
||||||
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
case 1:
|
|
||||||
case 2:
|
|
||||||
case 3:
|
|
||||||
/* 8271 registers */
|
|
||||||
m_i8271->write(space, offset, data);
|
|
||||||
return;
|
|
||||||
case 4:
|
|
||||||
m_i8271->data_w(space, offset, data);
|
|
||||||
return;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**************************************
|
/**************************************
|
||||||
WD1770 disc control function
|
WD1770 disc control function
|
||||||
***************************************/
|
***************************************/
|
||||||
@ -1543,9 +1463,6 @@ WRITE8_MEMBER(bbc_state::bbc_i8271_write)
|
|||||||
density select
|
density select
|
||||||
single density is as the 8271 disc format
|
single density is as the 8271 disc format
|
||||||
double density is as the 8271 disc format but with 16 sectors per track
|
double density is as the 8271 disc format but with 16 sectors per track
|
||||||
|
|
||||||
At some point we need to check the size of the disc image to work out if it is a single or double
|
|
||||||
density disc image
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -1566,7 +1483,7 @@ void bbc_state::bbc_update_fdq_int(int state)
|
|||||||
int bbc_state;
|
int bbc_state;
|
||||||
|
|
||||||
/* if drq or irq is set, and interrupt is enabled */
|
/* if drq or irq is set, and interrupt is enabled */
|
||||||
if ((m_wd177x_irq_state || m_wd177x_drq_state) && (m_1770_IntEnabled))
|
if ((m_wd177x_irq_state || m_wd177x_drq_state) && (m_177x_IntEnabled))
|
||||||
{
|
{
|
||||||
/* int trigger */
|
/* int trigger */
|
||||||
bbc_state = 1;
|
bbc_state = 1;
|
||||||
@ -1576,7 +1493,6 @@ void bbc_state::bbc_update_fdq_int(int state)
|
|||||||
/* do not trigger int */
|
/* do not trigger int */
|
||||||
bbc_state = 0;
|
bbc_state = 0;
|
||||||
}
|
}
|
||||||
//printf("bbc_state %d prev %d\n", bbc_state, m_previous_wd177x_int_state);
|
|
||||||
/* nmi is edge triggered, and triggers when the state goes from clear->set.
|
/* nmi is edge triggered, and triggers when the state goes from clear->set.
|
||||||
Here we are checking this transition before triggering the nmi */
|
Here we are checking this transition before triggering the nmi */
|
||||||
if (bbc_state != m_previous_wd177x_int_state)
|
if (bbc_state != m_previous_wd177x_int_state)
|
||||||
@ -1594,7 +1510,6 @@ void bbc_state::bbc_update_fdq_int(int state)
|
|||||||
|
|
||||||
WRITE_LINE_MEMBER(bbc_state::bbc_wd177x_intrq_w)
|
WRITE_LINE_MEMBER(bbc_state::bbc_wd177x_intrq_w)
|
||||||
{
|
{
|
||||||
//printf("bbc_wd177x_intrq_w %d \n", state);
|
|
||||||
m_wd177x_irq_state = state;
|
m_wd177x_irq_state = state;
|
||||||
bbc_update_fdq_int(state);
|
bbc_update_fdq_int(state);
|
||||||
}
|
}
|
||||||
@ -1605,357 +1520,92 @@ WRITE_LINE_MEMBER(bbc_state::bbc_wd177x_drq_w)
|
|||||||
bbc_update_fdq_int(state);
|
bbc_update_fdq_int(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_wd177x_status_w)
|
WRITE8_MEMBER(bbc_state::bbc_wd1770_status_w)
|
||||||
{
|
{
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
|
|
||||||
floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device();
|
|
||||||
floppy_image_device *floppy = NULL;
|
floppy_image_device *floppy = NULL;
|
||||||
|
|
||||||
m_drive_control = data;
|
m_drive_control = data;
|
||||||
|
logerror("Drive control %d \n", data);
|
||||||
|
|
||||||
|
// bit 5: reset
|
||||||
|
if (!BIT(data, 5)) m_wd1770->reset();
|
||||||
|
|
||||||
// bit 0, 1: drive select
|
// bit 0, 1: drive select
|
||||||
if (BIT(data, 0)) floppy = floppy0;
|
if (BIT(data, 0)) floppy = m_wd1770->subdevice<floppy_connector>("0")->get_device();
|
||||||
if (BIT(data, 1)) floppy = floppy1;
|
if (BIT(data, 1)) floppy = m_wd1770->subdevice<floppy_connector>("1")->get_device();
|
||||||
|
m_wd1770->set_floppy(floppy);
|
||||||
fdc->set_floppy(floppy);
|
|
||||||
|
|
||||||
// bit 2: side select
|
// bit 2: side select
|
||||||
if (floppy)
|
if (floppy)
|
||||||
floppy->ss_w(BIT(data, 2));
|
floppy->ss_w(BIT(data, 2));
|
||||||
|
|
||||||
// bit 3: density
|
// bit 3: density
|
||||||
fdc->dden_w(BIT(data, 3));
|
m_wd1770->dden_w(BIT(data, 3));
|
||||||
|
|
||||||
// bit 4: interrupt enable
|
// bit 4: interrupt enable
|
||||||
m_1770_IntEnabled = !BIT(data, 4);
|
m_177x_IntEnabled = !BIT(data, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
READ8_MEMBER(bbc_state::bbc_wd1770_read)
|
|
||||||
{
|
|
||||||
int retval=0xff;
|
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 4:
|
|
||||||
retval=fdc->status_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
retval=fdc->track_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
retval=fdc->sector_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
retval=fdc->data_r(space, 0);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//logerror("wd177x read: $%02X $%02X\n", offset,retval);
|
|
||||||
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_wd1770_write)
|
|
||||||
{
|
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
//logerror("wd177x write: $%02X $%02X\n", offset,data);
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
bbc_wd177x_status_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
fdc->cmd_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 5:
|
|
||||||
fdc->track_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
fdc->sector_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
fdc->data_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************
|
|
||||||
OPUS CHALLENGER MEMORY MAP
|
|
||||||
Read Write
|
|
||||||
|
|
||||||
&FCF8 1770 Status register 1770 command register
|
|
||||||
&FCF9 1770 track register
|
|
||||||
&FCFA 1770 sector register
|
|
||||||
&FCFB 1770 data register
|
|
||||||
&FCFC 1770 drive control
|
|
||||||
|
|
||||||
|
|
||||||
drive control register bits
|
|
||||||
0 select side 0= side 0 1= side 1
|
|
||||||
1 select drive 0
|
|
||||||
2 select drive 1
|
|
||||||
3 ?unused?
|
|
||||||
4 ?Always Set
|
|
||||||
5 Density Select 0=double, 1=single
|
|
||||||
6 ?unused?
|
|
||||||
7 ?unused?
|
|
||||||
|
|
||||||
The RAM is accessible through JIM (page &FD). One page is visible in JIM at a time.
|
|
||||||
The selected page is controlled by the two paging registers:
|
|
||||||
|
|
||||||
&FCFE Paging register MSB
|
|
||||||
&FCFF Paging register LSB
|
|
||||||
|
|
||||||
256K model has 1024 pages &000 to &3ff
|
|
||||||
512K model has 2048 pages &000 to &7ff
|
|
||||||
|
|
||||||
AM_RANGE(0xfc00, 0xfdff) AM_READWRITE(bbc_opus_read , bbc_opus_write )
|
|
||||||
|
|
||||||
|
|
||||||
**********************************************/
|
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_opus_status_w)
|
|
||||||
{
|
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
|
|
||||||
floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device();
|
|
||||||
floppy_image_device *floppy = NULL;
|
|
||||||
|
|
||||||
m_drive_control = data;
|
|
||||||
|
|
||||||
// bit 1, 2: drive select
|
|
||||||
if (BIT(data, 1)) floppy = floppy0;
|
|
||||||
if (BIT(data, 2)) floppy = floppy1;
|
|
||||||
|
|
||||||
fdc->set_floppy(floppy);
|
|
||||||
|
|
||||||
// bit 0: side select
|
|
||||||
if (floppy)
|
|
||||||
floppy->ss_w(BIT(data, 0));
|
|
||||||
|
|
||||||
// bit 5: density
|
|
||||||
fdc->dden_w(BIT(data, 5));
|
|
||||||
|
|
||||||
// bit 4: interrupt enable
|
|
||||||
m_1770_IntEnabled = BIT(data, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
READ8_MEMBER(bbc_state::bbc_opus_read)
|
|
||||||
{
|
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
//logerror("wd177x read: $%02X\n", offset);
|
|
||||||
|
|
||||||
if (m_DFSType==6)
|
|
||||||
{
|
|
||||||
if (offset<0x100)
|
|
||||||
{
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0xf8:
|
|
||||||
return fdc->status_r(space, 0);
|
|
||||||
case 0xf9:
|
|
||||||
return fdc->track_r(space, 0);
|
|
||||||
case 0xfa:
|
|
||||||
return fdc->sector_r(space, 0);
|
|
||||||
case 0xfb:
|
|
||||||
return fdc->data_r(space, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return memregion("disks")->base()[offset + (m_opusbank << 8)];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_opus_write)
|
|
||||||
{
|
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
//logerror("wd177x write: $%02X $%02X\n", offset,data);
|
|
||||||
|
|
||||||
if (m_DFSType==6)
|
|
||||||
{
|
|
||||||
if (offset<0x100)
|
|
||||||
{
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0xf8:
|
|
||||||
fdc->cmd_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0xf9:
|
|
||||||
fdc->track_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0xfa:
|
|
||||||
fdc->sector_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0xfb:
|
|
||||||
fdc->data_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 0xfc:
|
|
||||||
bbc_opus_status_w(space, 0,data);
|
|
||||||
break;
|
|
||||||
case 0xfe:
|
|
||||||
m_opusbank=(m_opusbank & 0xff) | (data<<8);
|
|
||||||
break;
|
|
||||||
case 0xff:
|
|
||||||
m_opusbank=(m_opusbank & 0xff00) | data;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memregion("disks")->base()[offset + (m_opusbank << 8)] = data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***************************************
|
/***************************************
|
||||||
BBC MASTER DISC SUPPORT
|
BBC MASTER DISC SUPPORT
|
||||||
***************************************/
|
***************************************/
|
||||||
|
|
||||||
|
READ8_MEMBER(bbc_state::bbcm_wd177xl_read)
|
||||||
READ8_MEMBER(bbc_state::bbcm_wd1770_read)
|
|
||||||
{
|
|
||||||
int retval=0xff;
|
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
retval=fdc->status_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
retval=fdc->track_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
retval=fdc->sector_r(space, 0);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
retval=fdc->data_r(space, 0);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbcm_wd1770_write)
|
|
||||||
{
|
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
//logerror("wd177x write: $%02X $%02X\n", offset,data);
|
|
||||||
switch (offset)
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
fdc->cmd_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
fdc->track_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
fdc->sector_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
fdc->data_w(space, 0, data);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
READ8_MEMBER(bbc_state::bbcm_wd1770l_read)
|
|
||||||
{
|
{
|
||||||
return m_drive_control;
|
return m_drive_control;
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write)
|
WRITE8_MEMBER(bbc_state::bbcm_wd1770l_write)
|
||||||
{
|
{
|
||||||
wd1770_t *fdc = machine().device<wd1770_t>("wd177x");
|
|
||||||
floppy_image_device *floppy0 = machine().device<floppy_connector>("wd177x:0")->get_device();
|
|
||||||
floppy_image_device *floppy1 = machine().device<floppy_connector>("wd177x:1")->get_device();
|
|
||||||
floppy_image_device *floppy = NULL;
|
floppy_image_device *floppy = NULL;
|
||||||
|
|
||||||
m_drive_control = data;
|
m_drive_control = data;
|
||||||
|
//logerror("Drive control %d \n", data);
|
||||||
|
|
||||||
// bit 0, 1: drive select
|
// bit 2: reset
|
||||||
if (BIT(data, 0)) floppy = floppy0;
|
if (!BIT(data, 5)) m_wd1770->reset();
|
||||||
if (BIT(data, 1)) floppy = floppy1;
|
|
||||||
|
// bit 0, 1, 3: drive select
|
||||||
|
if (BIT(data, 0)) floppy = m_wd1770->subdevice<floppy_connector>("0")->get_device();
|
||||||
|
if (BIT(data, 1)) floppy = m_wd1770->subdevice<floppy_connector>("1")->get_device();
|
||||||
|
if (BIT(data, 3)) floppy = m_wd1770->subdevice<floppy_connector>("2")->get_device();
|
||||||
|
m_wd1770->set_floppy(floppy);
|
||||||
|
|
||||||
// bit 4: side select
|
// bit 4: side select
|
||||||
if (floppy)
|
if (floppy)
|
||||||
floppy->ss_w(BIT(data, 4));
|
floppy->ss_w(BIT(data, 4));
|
||||||
|
|
||||||
// bit 5: density
|
// bit 5: density
|
||||||
fdc->dden_w(BIT(data, 5));
|
m_wd1770->dden_w(BIT(data, 5));
|
||||||
|
|
||||||
// m_1770_IntEnabled=(((data>>4) & 0x01)==0);
|
m_177x_IntEnabled = 1;
|
||||||
m_1770_IntEnabled=1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE8_MEMBER(bbc_state::bbcm_wd1772l_write)
|
||||||
/**************************************
|
|
||||||
DFS Hardware mapping for different Disc Controller types
|
|
||||||
***************************************/
|
|
||||||
|
|
||||||
READ8_MEMBER(bbc_state::bbc_disc_r)
|
|
||||||
{
|
{
|
||||||
switch (m_DFSType){
|
floppy_image_device *floppy = NULL;
|
||||||
/* case 0 to 3 are all standard 8271 interfaces */
|
|
||||||
case 0: case 1: case 2: case 3:
|
|
||||||
return bbc_i8271_read(space, offset);
|
|
||||||
/* case 4 is the acorn 1770 interface */
|
|
||||||
case 4:
|
|
||||||
return bbc_wd1770_read(space, offset);
|
|
||||||
/* case 5 is the watford 1770 interface */
|
|
||||||
case 5:
|
|
||||||
return bbc_wd1770_read(space, offset);
|
|
||||||
/* case 6 is the Opus challenger interface */
|
|
||||||
case 6:
|
|
||||||
/* not connected here, opus drive is connected via the 1MHz Bus */
|
|
||||||
break;
|
|
||||||
/* case 7 in no disc controller */
|
|
||||||
case 7:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return 0x0ff;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITE8_MEMBER(bbc_state::bbc_disc_w)
|
m_drive_control = data;
|
||||||
{
|
//logerror("Drive control %d \n", data);
|
||||||
switch (m_DFSType){
|
|
||||||
/* case 0 to 3 are all standard 8271 interfaces */
|
|
||||||
case 0: case 1: case 2: case 3:
|
|
||||||
bbc_i8271_write(space, offset,data);
|
|
||||||
break;
|
|
||||||
/* case 4 is the acorn 1770 interface */
|
|
||||||
case 4:
|
|
||||||
bbc_wd1770_write(space, offset,data);
|
|
||||||
break;
|
|
||||||
/* case 5 is the watford 1770 interface */
|
|
||||||
case 5:
|
|
||||||
bbc_wd1770_write(space, offset,data);
|
|
||||||
break;
|
|
||||||
/* case 6 is the Opus challenger interface */
|
|
||||||
case 6:
|
|
||||||
/* not connected here, opus drive is connected via the 1MHz Bus */
|
|
||||||
break;
|
|
||||||
/* case 7 in no disc controller */
|
|
||||||
case 7:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// bit 2: reset
|
||||||
|
if (!BIT(data, 5)) m_wd1772->reset();
|
||||||
|
|
||||||
|
// bit 0, 1, 3: drive select
|
||||||
|
if (BIT(data, 0)) floppy = m_wd1772->subdevice<floppy_connector>("0")->get_device();
|
||||||
|
if (BIT(data, 1)) floppy = m_wd1772->subdevice<floppy_connector>("1")->get_device();
|
||||||
|
if (BIT(data, 3)) floppy = m_wd1772->subdevice<floppy_connector>("2")->get_device();
|
||||||
|
m_wd1772->set_floppy(floppy);
|
||||||
|
|
||||||
|
// bit 4: side select
|
||||||
|
if (floppy)
|
||||||
|
floppy->ss_w(BIT(data, 4));
|
||||||
|
|
||||||
|
// bit 5: density
|
||||||
|
m_wd1772->dden_w(BIT(data, 5));
|
||||||
|
|
||||||
|
m_177x_IntEnabled = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************
|
/**************************************
|
||||||
BBC B Rom loading functions
|
BBC B Rom loading functions
|
||||||
@ -2023,23 +1673,6 @@ int bbc_state::bbcm_load_cart(device_image_interface &image, generic_slot_device
|
|||||||
|
|
||||||
DRIVER_INIT_MEMBER(bbc_state,bbc)
|
DRIVER_INIT_MEMBER(bbc_state,bbc)
|
||||||
{
|
{
|
||||||
m_Master=0;
|
|
||||||
m_rxd_cass = 0;
|
|
||||||
m_nr_high_tones = 0;
|
|
||||||
m_serproc_data = 0;
|
|
||||||
m_cass_out_enabled = 0;
|
|
||||||
m_tape_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(bbc_state::bbc_tape_timer_cb),this));
|
|
||||||
|
|
||||||
/* vertical sync pulse from video circuit */
|
|
||||||
m_via6522_0->write_ca1(1);
|
|
||||||
|
|
||||||
/* light pen strobe detect (not emulated) */
|
|
||||||
m_via6522_0->write_cb2(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
DRIVER_INIT_MEMBER(bbc_state,bbcm)
|
|
||||||
{
|
|
||||||
m_Master=1;
|
|
||||||
m_rxd_cass = 0;
|
m_rxd_cass = 0;
|
||||||
m_nr_high_tones = 0;
|
m_nr_high_tones = 0;
|
||||||
m_serproc_data = 0;
|
m_serproc_data = 0;
|
||||||
@ -2149,14 +1782,12 @@ MACHINE_START_MEMBER(bbc_state, bbcb)
|
|||||||
m_previous_i8271_int_state=0;
|
m_previous_i8271_int_state=0;
|
||||||
m_previous_wd177x_int_state=1;
|
m_previous_wd177x_int_state=1;
|
||||||
bbc_setup_banks(m_bank4, 16, 0, 0x4000);
|
bbc_setup_banks(m_bank4, 16, 0, 0x4000);
|
||||||
if (m_region_dfs)
|
|
||||||
m_bank4->configure_entries(16, 8, m_region_dfs->base(), 0x4000); // additional bank for paged ram
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_RESET_MEMBER(bbc_state, bbcb)
|
MACHINE_RESET_MEMBER(bbc_state, bbcb)
|
||||||
{
|
{
|
||||||
UINT8 *RAM = m_region_maincpu->base();
|
UINT8 *RAM = m_region_maincpu->base();
|
||||||
m_DFSType= (ioport("BBCCONFIG")->read() >> 0) & 0x07;
|
m_Speech = (ioport("BBCCONFIG")->read() >> 0) & 0x01;
|
||||||
m_SWRAMtype = (ioport("BBCCONFIG")->read() >> 3) & 0x03;
|
m_SWRAMtype = (ioport("BBCCONFIG")->read() >> 3) & 0x03;
|
||||||
m_bank1->set_base(RAM);
|
m_bank1->set_base(RAM);
|
||||||
m_bank3->set_base(RAM + 0x4000);
|
m_bank3->set_base(RAM + 0x4000);
|
||||||
@ -2166,8 +1797,6 @@ MACHINE_RESET_MEMBER(bbc_state, bbcb)
|
|||||||
m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */
|
m_bank7->set_base(m_region_os->base()); /* bank 7 points at the OS rom from c000 to ffff */
|
||||||
|
|
||||||
bbcb_IC32_initialise(this);
|
bbcb_IC32_initialise(this);
|
||||||
|
|
||||||
m_opusbank = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2184,6 +1813,7 @@ MACHINE_START_MEMBER(bbc_state, bbcbp)
|
|||||||
|
|
||||||
MACHINE_RESET_MEMBER(bbc_state, bbcbp)
|
MACHINE_RESET_MEMBER(bbc_state, bbcbp)
|
||||||
{
|
{
|
||||||
|
m_Speech = 1;
|
||||||
m_bank1->set_base(m_region_maincpu->base());
|
m_bank1->set_base(m_region_maincpu->base());
|
||||||
m_bank2->set_base(m_region_maincpu->base() + 0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */
|
m_bank2->set_base(m_region_maincpu->base() + 0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */
|
||||||
m_bank4->set_entry(0);
|
m_bank4->set_entry(0);
|
||||||
|
@ -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 */
|
this is used by the palette lookup in the video ULA */
|
||||||
void bbc_state::set_pixel_lookup()
|
void bbc_state::set_pixel_lookup()
|
||||||
{
|
{
|
||||||
int i;
|
for (int i=0; i<256; i++)
|
||||||
for (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);
|
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);
|
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 ****/
|
/**** BBC B+ Shadow Ram change ****/
|
||||||
|
|
||||||
@ -319,7 +287,7 @@ void bbc_state::common_init(int memorySize)
|
|||||||
|
|
||||||
VIDEO_START_MEMBER(bbc_state,bbca)
|
VIDEO_START_MEMBER(bbc_state,bbca)
|
||||||
{
|
{
|
||||||
common_init(16);
|
common_init(m_ram->size()/1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
VIDEO_START_MEMBER(bbc_state,bbcb)
|
VIDEO_START_MEMBER(bbc_state,bbcb)
|
||||||
|
Loading…
Reference in New Issue
Block a user