mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
a800.xml, a800_flop.xml: initial pass at QA (#10412)
- bus/a800: add preliminary Corina ROM cart support; - bus/a800: bbsb bankswitch works on reads too, makes it playable; - atari/atari400.cpp: bulk replace cart tags into m_cartleft / m_cartright, move config_ntsc_screen / config_pal_screen to parent state class; - atari/maxaflex.cpp, atari/bartop52.cpp: convert to screen raw params; - atari/atari400.cpp: fix a130xe extended RAM out of bounds accesses, fixes t34 after disk swap;
This commit is contained in:
parent
3a1249d980
commit
c388a2f84e
@ -269,10 +269,13 @@ Possible Undumped protos: -
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="bbsb">
|
||||
<software name="bbsb" supported="partial">
|
||||
<description>Bounty Bob Strikes Back!</description>
|
||||
<year>1984</year>
|
||||
<publisher>Big Five Software</publisher>
|
||||
<notes><![CDATA[
|
||||
Sometimes it throws [GTIA] glitchy frames (noticeable on player deaths)
|
||||
]]></notes>
|
||||
<part name="cart" interface="a8bit_cart">
|
||||
<feature name="slot" value="a5200_bbsb" />
|
||||
<dataarea name="rom" size="40960">
|
||||
|
654
hash/a800.xml
654
hash/a800.xml
File diff suppressed because it is too large
Load Diff
@ -8,7 +8,8 @@ license:CC0
|
||||
|
||||
note: many 'original' floppy images are in .atx format, whereas cracked / unprotected ones are .atr format
|
||||
.atx is unsupported, although apparently has been reverse engineered (insert info link here)
|
||||
There are also images in .xex format?
|
||||
There are also images in .xex format, which are raw executable files and
|
||||
needs to be loaded thru a DOS loader or an SD card cartridge, for all purposes they won't fit here.
|
||||
|
||||
-->
|
||||
|
||||
@ -29,6 +30,9 @@ license:CC0
|
||||
<description>S.A.M.</description>
|
||||
<year>1982</year>
|
||||
<publisher>Don't Ask</publisher>
|
||||
<notes><![CDATA[
|
||||
Doesn't boot
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="sam.atr" size="92176" crc="a5895d13" sha1="da2118f26dd46b0435ba6a486f17069734bad812"/>
|
||||
@ -36,10 +40,11 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ulysses" supported="no">
|
||||
<software name="ulysses">
|
||||
<description>Ulysses and the Golden Fleece</description>
|
||||
<year>1986</year>
|
||||
<publisher>Sierra On-Line</publisher>
|
||||
<!-- was marked unsupported (for side B screen automatically moving without waiting user input?), assume fixed. -->
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Ulysses And The Golden Fleece [Rel. 1] [Side A].atr" size="92176" crc="e16b8dc8" sha1="4e55312b5259c96138f48703fcaa58a6edd0d922"/>
|
||||
@ -79,10 +84,14 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="countdwn">
|
||||
<software name="countdwn" supported="no">
|
||||
<description>Countdown</description>
|
||||
<year>1984</year>
|
||||
<publisher>Synapse</publisher>
|
||||
<notes><![CDATA[
|
||||
a800: cannot set charges, player ammo doesn't draw properly
|
||||
a800xl: crashes often on boot (reset multiple times will make it to eventually work)
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Countdown.atr" size="92176" crc="0471796a" sha1="d02b8ad67b2f1f27b340e6fa94aa0c9bc03d2ad7"/>
|
||||
@ -90,10 +99,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="silents">
|
||||
<software name="silents" supported="partial">
|
||||
<description>Silent Service</description>
|
||||
<year>1985</year>
|
||||
<publisher>Microprose</publisher>
|
||||
<notes><![CDATA[
|
||||
a800xl: crashes on boot
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Silent Service.atr" size="92176" crc="bda9ac46" sha1="312c76e40f0941749e3909afd4a7d7a83f398210"/>
|
||||
@ -101,10 +113,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="templtri">
|
||||
<description>Temple Of Apshai Triology</description>
|
||||
<software name="templtri" supported="partial">
|
||||
<description>Temple Of Apshai Trilogy</description>
|
||||
<year>1985</year>
|
||||
<publisher>Epyx</publisher>
|
||||
<notes><![CDATA[
|
||||
Unsupported character save to [disk]
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Temple of Apshai Trilogy (The).atr" size="92176" crc="a5cdca88" sha1="e9955303ba855beeafb0e5bf9b5b683d0fbb8701"/>
|
||||
@ -123,10 +138,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="shamus2">
|
||||
<software name="shamus2" supported="partial">
|
||||
<description>Shamus: Case II</description>
|
||||
<year>1983</year>
|
||||
<publisher>Synapse</publisher>
|
||||
<notes><![CDATA[
|
||||
Runs too fast, [ANTIC] timings
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Shamus - Case II.atr" size="92176" crc="2b6696c6" sha1="f3079c19f54ae5dc6fc9de6ca80341e9a2527c05"/>
|
||||
@ -134,10 +152,14 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="wkarate">
|
||||
<description>World Karate Championship</description>
|
||||
<software name="wkarate" supported="partial">
|
||||
<!-- "Cracked by Kilroy (P) N.A.P.O." briefly appears on boot -->
|
||||
<description>World Karate Championship (cracked)</description>
|
||||
<year>1986</year>
|
||||
<publisher>Epyx</publisher>
|
||||
<notes><![CDATA[
|
||||
a800xl: randomly doesn't boot (soft reset multiple times will eventually make it to start)
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="133136">
|
||||
<rom name="World Karate Championship (v4).atr" size="133136" crc="a89bf1e6" sha1="97fbaf575d9f9ddbecd1528c7d5090d2fdac6f3e"/>
|
||||
@ -156,10 +178,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cloderun">
|
||||
<software name="cloderun" supported="no">
|
||||
<description>Championship Lode Runner</description>
|
||||
<year>1985</year>
|
||||
<publisher>Broderbund</publisher>
|
||||
<notes><![CDATA[
|
||||
Garbled GFXs
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Championship Lode Runner.atr" size="92176" crc="53e02689" sha1="dc92e8616fa2e00432b388df97d508c1a0b6db3c"/>
|
||||
@ -167,10 +192,14 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="marsmis2">
|
||||
<software name="marsmis2" supported="partial">
|
||||
<description>Mars Mission II</description>
|
||||
<year>1981</year>
|
||||
<publisher>Antic</publisher>
|
||||
<notes><![CDATA[
|
||||
Clearing a stage will have some dots in the text GFX
|
||||
a800xl: doesn't boot (btanb?)
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Mars Mission II.atr" size="92176" crc="59694595" sha1="4b2ad8bdcbbd4c8f5aef154e55bf4950b15798f3"/>
|
||||
@ -190,7 +219,8 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="brucelee">
|
||||
<description>Bruce Lee</description>
|
||||
<!-- "CRACKED BY GEORGE!" -->
|
||||
<description>Bruce Lee (cracked)</description>
|
||||
<year>1984</year>
|
||||
<publisher>Datasoft</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
@ -233,10 +263,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spyvspy">
|
||||
<software name="spyvspy" supported="no">
|
||||
<description>Spy Vs Spy</description>
|
||||
<year>1984</year>
|
||||
<publisher>First Star</publisher>
|
||||
<notes><![CDATA[
|
||||
Often crashes at the end of an attract game sequence, which in turn desyncs
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="Spy Vs Spy (1984)(First Star).atr" size="92176" crc="91940f40" sha1="d57d8ecbb0b14987c8fc64b27fe1511779c62f4d"/>
|
||||
@ -256,7 +289,8 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="spyvspyi">
|
||||
<description>Spy Vs Spy - The Island Caper</description>
|
||||
<!-- "CRACKED BY CAPTAIN WIZARD (P) 1986 N.A.P.O" during attract -->
|
||||
<description>Spy Vs Spy - The Island Caper (cracked)</description>
|
||||
<year>1985</year>
|
||||
<publisher>First Star Software</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
@ -277,7 +311,9 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="montzump">
|
||||
<!-- Looks more polished than retail version, with title screen etc. -->
|
||||
<!-- except it's missing content (cfr. file sizes) and unwinnable. -->
|
||||
<software name="montzump" cloneof="montzuma">
|
||||
<description>Montezuma's Revenge! (Prototype)</description>
|
||||
<year>1983</year>
|
||||
<publisher>Utopia Software</publisher>
|
||||
@ -288,10 +324,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mrrobot">
|
||||
<software name="mrrobot" supported="partial">
|
||||
<description>Mr. Robot and his Robot Factory</description>
|
||||
<year>1983</year>
|
||||
<publisher>Datamost</publisher>
|
||||
<notes><![CDATA[
|
||||
Random black screen after title screen, particularly on soft resets
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="mr robot and his robot factory.atr" size="92176" crc="36f3bdb0" sha1="8bb1f04783e883bb20aec5b83e3493632d9dd0bd"/>
|
||||
@ -299,10 +338,14 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="castwolf" supported="partial">
|
||||
<software name="castwolf" supported="no">
|
||||
<description>Castle Wolfenstein</description>
|
||||
<year>1983</year>
|
||||
<publisher>Muse Software</publisher>
|
||||
<notes><![CDATA[
|
||||
Castle GFX doesn't draw on title screen, uses [ANTIC] GFX mode F
|
||||
Should prompt for a "press space key" when player dies or get captured but never happens, hangs
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="castle wolfenstein.atr" size="92176" crc="7745cd05" sha1="03ba4218d20f260f3e17c7ce540c952cd071bdf5"/>
|
||||
@ -310,10 +353,15 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="bcastwlf">
|
||||
<software name="bcastwlf" supported="no">
|
||||
<description>Beyond Castle Wolfenstein</description>
|
||||
<year>1984</year>
|
||||
<publisher>Muse Software</publisher>
|
||||
<notes><![CDATA[
|
||||
Punts to prompt when "SAVING THE GAME" (CTRL+C), unsupported [disk] save
|
||||
Bunker is always fixed, no RNG?
|
||||
]]></notes>
|
||||
<info name="usage" value="Requires a minimum of 48KB RAM" />
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="beyond castle wolfenstein.atr" size="92176" crc="78ef8db7" sha1="a0916bd0dde1b748834411c96cb2ae058b38f3c2"/>
|
||||
@ -343,10 +391,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="alleycat">
|
||||
<software name="alleycat" supported="partial">
|
||||
<description>Alley Cat</description>
|
||||
<year>1983</year>
|
||||
<publisher>Synapse</publisher>
|
||||
<notes><![CDATA[
|
||||
Runs too fast
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="65552">
|
||||
<rom name="alleycat.atr" size="65552" crc="12e2eb0d" sha1="a99e131f024e5df10316860b6d174a16aadc8651"/>
|
||||
@ -365,11 +416,15 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="elktrgld" supported="no"> <!-- title screen works but crashes at start of any track -->
|
||||
<software name="elktrgld" supported="partial">
|
||||
<!-- Flippy disk, c64 version on side A -->
|
||||
<!-- Supposedly a PAL release, tested to have too much overscan on real HW -->
|
||||
<description>Elektra Glide</description>
|
||||
<year>1986</year>
|
||||
<publisher>Mastertronic</publisher>
|
||||
<notes><![CDATA[
|
||||
[ANTIC] playfield is offset one line on mountain strip
|
||||
]]></notes>
|
||||
<info name="serial" value="64712" />
|
||||
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
@ -379,12 +434,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="koalapnt">
|
||||
<software name="koalapnt" supported="no">
|
||||
<!-- Flippy disk, c64 version on side A -->
|
||||
<description>KoalaPainter (Light Pen)</description>
|
||||
<year>1984</year>
|
||||
<publisher>Koala Technologies</publisher>
|
||||
<info name="serial" value="00626-001" />
|
||||
<info name="usage" value="Requires light pen"/>
|
||||
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92160">
|
||||
@ -421,10 +477,14 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="croschck" supported="no"> <!-- randomly freezes up on player's turn screen -->
|
||||
<software name="croschck" supported="no">
|
||||
<description>Crosscheck</description>
|
||||
<year>1986</year>
|
||||
<publisher>Datasoft</publisher>
|
||||
<notes><![CDATA[
|
||||
Throws [disk] read errors on soft reset, hangs if you press start
|
||||
Randomly freezes up on player's turn screen (cannot reproduce, assume fixed)
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="crosscheck (1986)(datasoft)(us).atr" size="92176" crc="b4cef936" sha1="1bb9efe6ce4829388f933ae85dd0836749ca9e55"/> <!-- Verified -->
|
||||
@ -461,7 +521,7 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cvrnmars" supported="partial">
|
||||
<software name="cvrnmars">
|
||||
<description>Caverns of Mars</description>
|
||||
<year>1982</year>
|
||||
<publisher>Atari</publisher>
|
||||
@ -472,7 +532,8 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dandydgn" supported="partial">
|
||||
<!-- was supported="partial" with no note, assume for glitchy bottom bar (fixed) -->
|
||||
<software name="dandydgn">
|
||||
<description>Dandy Dungeon</description>
|
||||
<year>1985</year>
|
||||
<publisher>Antic</publisher>
|
||||
@ -505,9 +566,11 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="essex">
|
||||
<!-- Prints a "8-28-85" date if you fail copy protection check, release date? -->
|
||||
<description>Essex</description>
|
||||
<year>1985</year>
|
||||
<publisher>Synapse Software</publisher>
|
||||
<info name="usage" value="Sports manual copy protection"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="essex (1985)(synapse software)(us)(disk 1 of 2 side a)(disk 1, side 1).atr" size="92176" crc="551e10de" sha1="9bd38275b73a9f5b814dc7375ee7139693bc179b"/> <!-- Verified -->
|
||||
@ -545,6 +608,7 @@ license:CC0
|
||||
<description>Galahad and the Holy Grail</description>
|
||||
<year>1982</year>
|
||||
<publisher>Atari Program Exchange</publisher>
|
||||
<!-- TODO: verify collision detection -->
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="galahad and the holy grail (1982)(apx)(us).atr" size="92176" crc="d575a0bb" sha1="9f03ddbd745919e93113daed1117a59751f22ae5"/> <!-- Verified -->
|
||||
@ -567,6 +631,10 @@ license:CC0
|
||||
<description>L.A. SWAT + Panther</description>
|
||||
<year>1988</year>
|
||||
<publisher>Mastertronic</publisher>
|
||||
<notes><![CDATA[
|
||||
Ghost player sprite appears for a brief second at center of screen
|
||||
Doesn't mask bottom part, with enemy sprite repeated (and moving) [GTIA] GRACTL
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="l.a. swat + panther (1988)(mastertronic)(us).atr" size="92176" crc="6c4752f6" sha1="df6a82e8946d7100620c3947d9e7e106f513fa26"/> <!-- Verified -->
|
||||
@ -590,10 +658,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="phantas">
|
||||
<software name="phantas" supported="no">
|
||||
<description>Phantasie</description>
|
||||
<year>1987</year>
|
||||
<publisher>SSI</publisher>
|
||||
<notes><![CDATA[
|
||||
Throws a "drive not ready" when exiting town, pressing any key just black screen
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="phantasie v1.0 (1987)(ssi)(us)(disk 1 of 2 side a)(disk 1).atr" size="92176" crc="4f6d019f" sha1="d1ddaaac1ec56b6080cf3f28e43a6d021e6089c2"/> <!-- Verified -->
|
||||
@ -604,9 +675,10 @@ license:CC0
|
||||
<rom name="phantasie v1.0 (1987)(ssi)(us)(disk 1 of 2 side b)(disk 2).atr" size="92176" crc="d49b5aa8" sha1="fe5adccc9876e1b9568009fb5850f58449199385"/> <!-- Verified -->
|
||||
</dataarea>
|
||||
</part>
|
||||
<!-- baddump: non-factory save -->
|
||||
<part name="flop3" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="phantasie v1.0 (1987)(ssi)(us)(disk 2 of 2 side a)(disk 3)[m].atr" size="92176" crc="2be4ac66" sha1="c31cae2144e7eed0695d9453f6407994dc1a6d6a"/> <!-- has user save data on disk -->
|
||||
<rom name="phantasie v1.0 (1987)(ssi)(us)(disk 2 of 2 side a)(disk 3)[m].atr" size="92176" crc="2be4ac66" sha1="c31cae2144e7eed0695d9453f6407994dc1a6d6a" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop4" interface="floppy_5_25">
|
||||
@ -617,7 +689,8 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<software name="phobos">
|
||||
<description>Phobos v1.1</description>
|
||||
<description>Phobos (v1.1)</description>
|
||||
<!-- MCMLXXXII on title screen -->
|
||||
<year>1983</year>
|
||||
<publisher>Atari Program Exchange</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
@ -671,10 +744,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="saracen">
|
||||
<software name="saracen" supported="partial">
|
||||
<description>Saracen</description>
|
||||
<year>1987</year>
|
||||
<publisher>Datasoft</publisher>
|
||||
<notes><![CDATA[
|
||||
a800xl: doesn't boot
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="saracen (1987)(datasoft)(us)(side a).atr" size="92176" crc="512b4ab7" sha1="3b91a79a49c699ea458a85fe81612a55e494c1ec"/> <!-- Verified -->
|
||||
@ -687,10 +763,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="shatalli">
|
||||
<software name="shatalli" supported="partial">
|
||||
<description>Chronicles of Osgorth: The Shattered Alliance</description>
|
||||
<year>1981</year>
|
||||
<publisher>SSI</publisher>
|
||||
<notes><![CDATA[
|
||||
Unsupported [disk] saves
|
||||
]]></notes>
|
||||
<sharedfeat name="requirement" value="a800:basicb"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
@ -711,10 +790,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spellbrk">
|
||||
<software name="spellbrk" supported="partial">
|
||||
<description>Spellbreaker</description>
|
||||
<year>1985</year>
|
||||
<publisher>Infocom</publisher>
|
||||
<notes><![CDATA[
|
||||
a800xl: doesn't boot
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="spellbreaker rel 63 (1985-09-16)(infocom)(us)(side a).atr" size="92176" crc="c8d46edd" sha1="5f7aef1cff9ba58f4a2178c967e2c9b49fce9e34"/> <!-- Verified -->
|
||||
@ -727,10 +809,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spitfr40" supported="no"> <!-- joystick/keyboard inputs mostly not responsive -->
|
||||
<software name="spitfr40" supported="no">
|
||||
<description>Spitfire 40</description>
|
||||
<year>1986</year>
|
||||
<publisher>Avalon Hill</publisher>
|
||||
<notes><![CDATA[
|
||||
Unresponsive joystick/keyboard inputs, pressing down on joystick just returns to main menu
|
||||
]]></notes>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="spitfire 40 (1986)(avalon hill)(us).atr" size="92176" crc="875a404f" sha1="49e6c560d38137944c1cd9bc6c5f37a012045a84"/> <!-- Verified -->
|
||||
@ -738,12 +823,17 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Requires 128K RAM -->
|
||||
<software name="t34" supported="no"> <!-- fails to load due to insufficient RAM -->
|
||||
<software name="t34" supported="partial">
|
||||
<description>T-34: The Battle</description>
|
||||
<year>1994</year>
|
||||
<publisher>A.N.G. Software</publisher>
|
||||
<notes><![CDATA[
|
||||
a800xl: cannot setup RAM higher than 64KB
|
||||
a130xe: scrolling is jerky when shooting in gameplay
|
||||
]]></notes>
|
||||
<info name="usage" value="Requires 128KB of RAM"/>
|
||||
<sharedfeat name="compatibility" value="XL/XE"/>
|
||||
<!-- dual sided single floppy according to game -->
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="133136">
|
||||
<rom name="t-34 - the battle (1994)(a.n.g. software)(nl)(fw)(side a).atr" size="133136" crc="4c276dc4" sha1="7720e199b7061852668979feb1a67aa042eac76c"/> <!-- Verified -->
|
||||
@ -757,10 +847,15 @@ license:CC0
|
||||
</software>
|
||||
|
||||
<!-- Atari Translator allows disks that only work on earlier 400/800 systems to load on later XL/XE machines -->
|
||||
<software name="transltr"> <!-- runs but needs testing -->
|
||||
<software name="transltr" supported="no">
|
||||
<description>Atari Translator (USA)</description>
|
||||
<year>1983</year>
|
||||
<publisher>Atari</publisher>
|
||||
<!-- runs but needs testing -->
|
||||
<notes><![CDATA[
|
||||
Detects a cartridge present even if it's not
|
||||
Tested with marsmis2, fails
|
||||
]]></notes>
|
||||
<sharedfeat name="compatibility" value="XL/XE"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
@ -774,11 +869,14 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Only works on PAL, use the a800xlp driver. You must hold the OPTION key (default: F3) when booting to disable BASIC. Game freezes otherwise. -->
|
||||
<software name="turbican" supported="partial"> <!-- Prior comments are probably BTANB. However, seems glitchy even on a800xlp. -->
|
||||
<software name="turbican" supported="partial">
|
||||
<description>Turbican</description>
|
||||
<year>1993</year>
|
||||
<publisher>ASF s.c.</publisher>
|
||||
<notes><![CDATA[
|
||||
1st demo mode screen draws offset background colors [GTIA]
|
||||
]]></notes>
|
||||
<info name="usage" value="Works best on a800xlp. Hold OPTION key during boot to disable BASIC otherwise game freezes when starting a game"/>
|
||||
<sharedfeat name="compatibility" value="XL/XE"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="133136">
|
||||
@ -787,10 +885,16 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="yoomp" supported="no"> <!-- black screen after loading screens -->
|
||||
<description>Yoomp!</description>
|
||||
<!-- v.1.0 also known to exist (in .xex format -->
|
||||
<software name="yoomp" supported="partial">
|
||||
<description>Yoomp! (v.1.1)</description>
|
||||
<year>2007</year>
|
||||
<publisher><homebrew></publisher>
|
||||
<notes><![CDATA[
|
||||
Draws few garbage text chars when trying to enter a password in main menu
|
||||
Prints "STEREO NOT DETECTED" on main menu, refers to unofficial [POKEY] extra chip add to $d280-$d2ff range
|
||||
]]></notes>
|
||||
<info name="usage" value="Hold OPTION key during boot to disable BASIC" />
|
||||
<sharedfeat name="compatibility" value="XL/XE"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
@ -799,10 +903,14 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="zybex">
|
||||
<software name="zybex" supported="partial">
|
||||
<description>Zybex (Ned)</description>
|
||||
<year>1994</year>
|
||||
<publisher>A.N.G. Software</publisher>
|
||||
<notes><![CDATA[
|
||||
Garbage row strip at bottom of screen
|
||||
]]></notes>
|
||||
<info name="usage" value="Hold OPTION key during boot to disable BASIC" />
|
||||
<sharedfeat name="compatibility" value="XL/XE"/>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
@ -868,11 +976,13 @@ license:CC0
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- http://www.mr-atari.com/Mr.Atari/LiteDOS/ -->
|
||||
<software name="litedosse"> <!-- runs but needs testing -->
|
||||
<software name="litedosse">
|
||||
<description>Atari LiteDOS-SE</description>
|
||||
<year>2022</year>
|
||||
<publisher>Mr.Atari</publisher>
|
||||
<publisher><homebrew></publisher>
|
||||
<info name="developer" value="Mr.Atari"/>
|
||||
<!-- http://www.mr-atari.com/Mr.Atari/LiteDOS/ -->
|
||||
<!-- TODO: runs but needs testing, particularly with .xex format -->
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="92176">
|
||||
<rom name="LiteDOS-SE (build 2022-01-14).atr" size="92176" crc="779dbfae" sha1="5cbbe75cf0489213d87e2c7cdaf2f8bfc802cf56"/>
|
||||
|
@ -31,7 +31,8 @@ static void a800_left(device_slot_interface &device)
|
||||
device.option_add_internal("a800_turbo128", A800_ROM_TURBO);
|
||||
device.option_add_internal("a800_tlink2", A800_ROM_TELELINK2);
|
||||
device.option_add_internal("a800_sitsa", A800_ROM_MICROCALC);
|
||||
device.option_add_internal("a800_corina", A800_ROM); // NOT SUPPORTED YET!
|
||||
device.option_add_internal("a800_corina", A800_ROM_CORINA);
|
||||
device.option_add_internal("a800_corina_sram", A800_ROM_CORINA_SRAM);
|
||||
device.option_add( "rtime8", A800_RTIME8); // not a ROM cartridge
|
||||
device.option_add_internal("xegs", XEGS_ROM);
|
||||
}
|
||||
|
@ -102,11 +102,12 @@ void device_a800_cart_interface::nvram_alloc(uint32_t size)
|
||||
//-------------------------------------------------
|
||||
// ****_cart_slot_device - constructor
|
||||
//-------------------------------------------------
|
||||
a800_cart_slot_device::a800_cart_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
|
||||
device_t(mconfig, type, tag, owner, clock),
|
||||
device_cartrom_image_interface(mconfig, *this),
|
||||
device_single_card_slot_interface<device_a800_cart_interface>(mconfig, *this),
|
||||
m_cart(nullptr), m_type(0)
|
||||
a800_cart_slot_device::a800_cart_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, type, tag, owner, clock)
|
||||
, device_cartrom_image_interface(mconfig, *this)
|
||||
, device_single_card_slot_interface<device_a800_cart_interface>(mconfig, *this)
|
||||
, m_cart(nullptr)
|
||||
, m_type(0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -153,8 +154,6 @@ void a800_cart_slot_device::device_start()
|
||||
m_cart = get_card_device();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
call load
|
||||
-------------------------------------------------*/
|
||||
@ -191,6 +190,7 @@ static const a800_slot slot_list[] =
|
||||
{ A800_TELELINK2, "a800_tlink2" },
|
||||
{ A800_MICROCALC, "a800_sitsa" },
|
||||
{ A800_CORINA, "a800_corina" },
|
||||
{ A800_CORINA_SRAM, "a800_corina_sram" },
|
||||
{ A800_8K_RIGHT, "a800_8k_right" },
|
||||
{ A5200_4K, "a5200" },
|
||||
{ A5200_8K, "a5200" },
|
||||
@ -276,6 +276,12 @@ image_init_result a800_cart_slot_device::call_load()
|
||||
}
|
||||
if (m_type == A800_TELELINK2)
|
||||
m_cart->nvram_alloc(0x100);
|
||||
if (m_type == A800_CORINA || m_type == A800_CORINA_SRAM)
|
||||
m_cart->nvram_alloc(0x2000);
|
||||
if (m_type == A800_CORINA)
|
||||
m_cart->ram_alloc(0x4000);
|
||||
if (m_type == A800_CORINA_SRAM)
|
||||
m_cart->ram_alloc(0x80000);
|
||||
|
||||
logerror("%s loaded cartridge '%s' size %dK\n", machine().system().name, filename(), len/1024);
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ enum
|
||||
A800_TELELINK2,
|
||||
A800_MICROCALC,
|
||||
A800_CORINA,
|
||||
A800_CORINA_SRAM,
|
||||
A5200_4K,
|
||||
A5200_8K,
|
||||
A5200_16K,
|
||||
|
@ -25,6 +25,8 @@ DEFINE_DEVICE_TYPE(A800_ROM_EXPRESS, a800_rom_express_device, "a800_express"
|
||||
DEFINE_DEVICE_TYPE(A800_ROM_TURBO, a800_rom_turbo_device, "a800_turbo", "Atari 800 64K ROM Carts Turbosoft")
|
||||
DEFINE_DEVICE_TYPE(A800_ROM_TELELINK2, a800_rom_telelink2_device, "a800_tlink2", "Atari 800 64K ROM Cart Telelink II")
|
||||
DEFINE_DEVICE_TYPE(A800_ROM_MICROCALC, a800_rom_microcalc_device, "a800_sitsa", "Atari 800 64K ROM Carts SITSA MicroCalc")
|
||||
DEFINE_DEVICE_TYPE(A800_ROM_CORINA, a800_rom_corina_device, "a800_corina", "Atari 800 ROM Carts Corina 1MB Flash ROM")
|
||||
DEFINE_DEVICE_TYPE(A800_ROM_CORINA_SRAM, a800_rom_corina_sram_device, "a800_corina_sram", "Atari 800 ROM Carts Corina 512KB Flash ROM + 512KB RAM")
|
||||
DEFINE_DEVICE_TYPE(XEGS_ROM, xegs_rom_device, "a800_xegs", "Atari XEGS 64K ROM Carts")
|
||||
DEFINE_DEVICE_TYPE(A5200_ROM_2CHIPS, a5200_rom_2chips_device, "a5200_16k2c", "Atari 5200 ROM Cart 16K in 2 Chips")
|
||||
DEFINE_DEVICE_TYPE(A5200_ROM_BBSB, a5200_rom_bbsb_device, "a5200_bbsb", "Atari 5200 ROM Cart BBSB")
|
||||
@ -89,6 +91,22 @@ a800_rom_microcalc_device::a800_rom_microcalc_device(const machine_config &mconf
|
||||
{
|
||||
}
|
||||
|
||||
a800_rom_corina_device::a800_rom_corina_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
|
||||
: a800_rom_device(mconfig, type, tag, owner, clock)
|
||||
, m_rom_bank(0)
|
||||
, m_view_select(0)
|
||||
{
|
||||
}
|
||||
|
||||
a800_rom_corina_device::a800_rom_corina_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: a800_rom_device(mconfig, A800_ROM_CORINA, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
a800_rom_corina_sram_device::a800_rom_corina_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: a800_rom_corina_device(mconfig, A800_ROM_CORINA_SRAM, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
a5200_rom_2chips_device::a5200_rom_2chips_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: a800_rom_device(mconfig, A5200_ROM_2CHIPS, tag, owner, clock)
|
||||
@ -180,6 +198,19 @@ void a800_rom_microcalc_device::device_reset()
|
||||
}
|
||||
|
||||
|
||||
void a800_rom_corina_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_rom_bank));
|
||||
save_item(NAME(m_view_select));
|
||||
}
|
||||
|
||||
void a800_rom_corina_device::device_reset()
|
||||
{
|
||||
m_rom_bank = 0;
|
||||
m_view_select = 0;
|
||||
}
|
||||
|
||||
|
||||
void a5200_rom_bbsb_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_banks));
|
||||
@ -228,6 +259,14 @@ uint8_t a800_rom_device::read_80xx(offs_t offset)
|
||||
|
||||
uint8_t a800_rom_bbsb_device::read_80xx(offs_t offset)
|
||||
{
|
||||
if ((offset & 0x2000) == 0 && !machine().side_effects_disabled())
|
||||
{
|
||||
uint16_t addr = offset & 0xfff;
|
||||
|
||||
if (addr >= 0xff6 && addr <= 0xff9)
|
||||
m_banks[BIT(offset, 12)] = (addr - 0xff6);
|
||||
}
|
||||
|
||||
if (offset < 0x1000)
|
||||
return m_rom[(offset & 0xfff) + (m_banks[0] * 0x1000) + 0];
|
||||
else if (offset < 0x2000)
|
||||
@ -384,6 +423,87 @@ void a800_rom_microcalc_device::write_d5xx(offs_t offset, uint8_t data)
|
||||
m_bank = data;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
|
||||
Corina
|
||||
|
||||
Comes in two configs:
|
||||
- 1MB Flash ROM (yakungfu)
|
||||
- 512KB Flash ROM + 512KB SRAM (bombjake)
|
||||
|
||||
Both contains 8KB NVRAM
|
||||
-------------------------------------------------*/
|
||||
|
||||
uint8_t a800_rom_corina_device::read_view_1(offs_t offset)
|
||||
{
|
||||
return m_rom[(offset & 0x3fff) + (m_rom_bank * 0x4000) + 0x80000];
|
||||
}
|
||||
|
||||
void a800_rom_corina_device::write_view_1(offs_t offset, u8 data)
|
||||
{
|
||||
}
|
||||
|
||||
uint8_t a800_rom_corina_sram_device::read_view_1(offs_t offset)
|
||||
{
|
||||
return m_ram[(offset & 0x3fff) + (m_rom_bank * 0x4000)];
|
||||
}
|
||||
|
||||
void a800_rom_corina_sram_device::write_view_1(offs_t offset, u8 data)
|
||||
{
|
||||
m_ram[(offset & 0x3fff) + (m_rom_bank * 0x4000)] = data;
|
||||
}
|
||||
|
||||
uint8_t a800_rom_corina_device::read_80xx(offs_t offset)
|
||||
{
|
||||
switch( m_view_select )
|
||||
{
|
||||
case 0:
|
||||
return m_rom[(offset & 0x3fff) + (m_rom_bank * 0x4000)];
|
||||
case 1:
|
||||
return read_view_1(offset);
|
||||
case 2:
|
||||
return m_nvram[offset & 0x1fff];
|
||||
}
|
||||
|
||||
logerror("view select R=3 [%04x]\n", offset);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
void a800_rom_corina_device::write_80xx(offs_t offset, uint8_t data)
|
||||
{
|
||||
switch( m_view_select )
|
||||
{
|
||||
case 1:
|
||||
write_view_1(offset, data);
|
||||
return;
|
||||
case 2:
|
||||
m_nvram[offset & 0x1fff] = data;
|
||||
return;
|
||||
}
|
||||
// view 0: flash ROM commands?
|
||||
// TODO: identify
|
||||
logerror("view select W=%d [%04x, %02x] -> %02x\n", m_view_select, offset, m_rom_bank, data);
|
||||
}
|
||||
|
||||
/*
|
||||
* 0--- ---- enable Corina window
|
||||
* 1--- ---- disable Corina and select main unit 8000-bfff window instead
|
||||
* -xx- ---- view select
|
||||
* -00- ---- first half of ROM
|
||||
* -01- ---- second half of ROM or RAM (^ depending on PCB config)
|
||||
* -10- ---- NVRAM
|
||||
* -11- ---- <reserved>
|
||||
* ---x xxxx ROM/RAM lower bank value,
|
||||
* ignored if view select is not in ROM/RAM mode
|
||||
* or Corina window is disabled
|
||||
*/
|
||||
void a800_rom_corina_device::write_d5xx(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_rom_bank = data & 0x1f;
|
||||
m_view_select = (data & 0x60) >> 5;
|
||||
// TODO: bit 7, currently handled in a400_state
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Atari 5200
|
||||
@ -433,6 +553,13 @@ uint8_t a5200_rom_2chips_device::read_80xx(offs_t offset)
|
||||
|
||||
uint8_t a5200_rom_bbsb_device::read_80xx(offs_t offset)
|
||||
{
|
||||
if ((offset & 0xe000) == 0 && !machine().side_effects_disabled())
|
||||
{
|
||||
uint16_t addr = offset & 0xfff;
|
||||
if (addr >= 0xff6 && addr <= 0xff9)
|
||||
m_banks[BIT(offset, 12)] = (addr - 0xff6);
|
||||
}
|
||||
|
||||
if (offset < 0x1000)
|
||||
return m_rom[(offset & 0xfff) + (m_banks[0] * 0x1000) + 0x2000];
|
||||
else if (offset < 0x2000)
|
||||
|
@ -159,6 +159,43 @@ protected:
|
||||
int m_bank;
|
||||
};
|
||||
|
||||
// ======================> a800_rom_corina_device
|
||||
|
||||
class a800_rom_corina_device : public a800_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
a800_rom_corina_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
a800_rom_corina_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual uint8_t read_80xx(offs_t offset) override;
|
||||
virtual void write_80xx(offs_t offset, uint8_t data) override;
|
||||
virtual void write_d5xx(offs_t offset, uint8_t data) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
virtual uint8_t read_view_1(offs_t offset);
|
||||
virtual void write_view_1(offs_t offset, u8 data);
|
||||
|
||||
u8 m_rom_bank;
|
||||
u8 m_view_select;
|
||||
};
|
||||
|
||||
class a800_rom_corina_sram_device : public a800_rom_corina_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
a800_rom_corina_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
virtual uint8_t read_view_1(offs_t offset) override;
|
||||
virtual void write_view_1(offs_t offset, u8 data) override;
|
||||
};
|
||||
|
||||
// ======================> xegs_rom_device
|
||||
|
||||
@ -214,16 +251,18 @@ protected:
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(A800_ROM, a800_rom_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_BBSB, a800_rom_bbsb_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_WILLIAMS, a800_rom_williams_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_EXPRESS, a800_rom_express_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_TURBO, a800_rom_turbo_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_TELELINK2, a800_rom_telelink2_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_MICROCALC, a800_rom_microcalc_device)
|
||||
DECLARE_DEVICE_TYPE(XEGS_ROM, xegs_rom_device)
|
||||
DECLARE_DEVICE_TYPE(A5200_ROM_2CHIPS, a5200_rom_2chips_device)
|
||||
DECLARE_DEVICE_TYPE(A5200_ROM_BBSB, a5200_rom_bbsb_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM, a800_rom_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_BBSB, a800_rom_bbsb_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_WILLIAMS, a800_rom_williams_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_EXPRESS, a800_rom_express_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_TURBO, a800_rom_turbo_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_TELELINK2, a800_rom_telelink2_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_MICROCALC, a800_rom_microcalc_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_CORINA, a800_rom_corina_device)
|
||||
DECLARE_DEVICE_TYPE(A800_ROM_CORINA_SRAM, a800_rom_corina_sram_device)
|
||||
DECLARE_DEVICE_TYPE(XEGS_ROM, xegs_rom_device)
|
||||
DECLARE_DEVICE_TYPE(A5200_ROM_2CHIPS, a5200_rom_2chips_device)
|
||||
DECLARE_DEVICE_TYPE(A5200_ROM_BBSB, a5200_rom_bbsb_device)
|
||||
|
||||
|
||||
#endif // MAME_BUS_A800_ROM_H
|
||||
|
@ -257,8 +257,8 @@ public:
|
||||
m_pia(*this, "pia"),
|
||||
m_dac(*this, "dac"),
|
||||
m_region_maincpu(*this, "maincpu"),
|
||||
m_cart(*this, "cartleft"),
|
||||
m_cart2(*this, "cartright")
|
||||
m_cartleft(*this, "cartleft"),
|
||||
m_cartright(*this, "cartright")
|
||||
{ }
|
||||
|
||||
void atari_common_nodac(machine_config &config);
|
||||
@ -277,8 +277,7 @@ public:
|
||||
void a400(machine_config &config);
|
||||
|
||||
protected:
|
||||
void config_ntsc_screen(machine_config &config);
|
||||
void config_pal_screen(machine_config &config);
|
||||
|
||||
|
||||
private:
|
||||
DECLARE_MACHINE_START(a400);
|
||||
@ -304,6 +303,9 @@ private:
|
||||
void special_write_8000(offs_t offset, uint8_t data);
|
||||
uint8_t special_read_a000(offs_t offset);
|
||||
void special_write_a000(offs_t offset, uint8_t data);
|
||||
uint8_t read_corina_overlay(offs_t offset);
|
||||
void write_corina_overlay(offs_t offset, uint8_t data);
|
||||
void write_corina_d5xx(offs_t offset, uint8_t data);
|
||||
|
||||
uint8_t a600xl_low_r(offs_t offset);
|
||||
uint8_t a1200xl_low_r(offs_t offset);
|
||||
@ -333,8 +335,8 @@ private:
|
||||
optional_device<pia6821_device> m_pia;
|
||||
optional_device<dac_bit_interface> m_dac;
|
||||
required_memory_region m_region_maincpu;
|
||||
optional_device<a800_cart_slot_device> m_cart;
|
||||
optional_device<a800_cart_slot_device> m_cart2;
|
||||
optional_device<a800_cart_slot_device> m_cartleft;
|
||||
optional_device<a800_cart_slot_device> m_cartright;
|
||||
|
||||
int m_cart_disabled, m_cart_helper;
|
||||
int m_last_offs;
|
||||
@ -459,7 +461,9 @@ uint8_t a400_state::a130xe_low_r(offs_t offset)
|
||||
if (!(m_mmu & 0x80) && offset >= 0x5000 && offset < 0x5800)
|
||||
return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)];
|
||||
if (!(m_mmu & 0x10))
|
||||
return m_ram->pointer()[offset + 0x10000 + (m_ext_bank * 0x4000)];
|
||||
{
|
||||
return m_ram->pointer()[(offset & 0x3fff) + 0x10000 + (m_ext_bank * 0x4000)];
|
||||
}
|
||||
else
|
||||
return m_ram->pointer()[offset];
|
||||
}
|
||||
@ -491,7 +495,7 @@ void a400_state::a130xe_low_w(offs_t offset, uint8_t data)
|
||||
if (!(m_mmu & 0x80) && offset >= 0x5000 && offset < 0x5800)
|
||||
return;
|
||||
if (!(m_mmu & 0x10))
|
||||
m_ram->pointer()[offset + 0x10000 + (m_ext_bank * 0x4000)] = data;
|
||||
m_ram->pointer()[(offset & 0x3fff) + 0x10000 + (m_ext_bank * 0x4000)] = data;
|
||||
else
|
||||
m_ram->pointer()[offset] = data;
|
||||
}
|
||||
@ -1781,12 +1785,12 @@ void a400_state::setup_ram(int bank, uint32_t size)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// these handle cart enable/disable without calling setup_ram thousands of times
|
||||
// TODO: this should really live in a800_slot file
|
||||
uint8_t a400_state::special_read_8000(offs_t offset)
|
||||
{
|
||||
if (!m_cart_disabled)
|
||||
return m_cart->read_80xx(offset);
|
||||
return m_cartleft->read_80xx(offset);
|
||||
else
|
||||
{
|
||||
offset += 0x8000;
|
||||
@ -1810,7 +1814,7 @@ void a400_state::special_write_8000(offs_t offset, uint8_t data)
|
||||
uint8_t a400_state::special_read_a000(offs_t offset)
|
||||
{
|
||||
if (!m_cart_disabled)
|
||||
return m_cart->read_80xx(offset);
|
||||
return m_cartleft->read_80xx(offset);
|
||||
else
|
||||
{
|
||||
offset += 0xa000;
|
||||
@ -1839,11 +1843,41 @@ uint8_t a400_state::read_d5xx(offs_t offset)
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
uint8_t a400_state::read_corina_overlay(offs_t offset)
|
||||
{
|
||||
if (!m_cart_disabled)
|
||||
return m_cartleft->read_80xx(offset);
|
||||
offset += 0x8000;
|
||||
if (m_ram->size() < offset)
|
||||
return 0;
|
||||
else
|
||||
return m_ram->pointer()[offset];
|
||||
}
|
||||
|
||||
void a400_state::write_corina_overlay(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (!m_cart_disabled)
|
||||
{
|
||||
m_cartleft->write_80xx(offset, data);
|
||||
return;
|
||||
}
|
||||
|
||||
offset += 0x8000;
|
||||
if (m_ram->size() >= offset)
|
||||
m_ram->pointer()[offset] = data;
|
||||
}
|
||||
|
||||
void a400_state::write_corina_d5xx(offs_t offset, uint8_t data)
|
||||
{
|
||||
m_cart_disabled = BIT(data, 7);
|
||||
m_cartleft->write_d5xx(offset, data);
|
||||
}
|
||||
|
||||
void a400_state::disable_cart(offs_t offset, uint8_t data)
|
||||
{
|
||||
if (m_cart->exists())
|
||||
if (m_cartleft->exists())
|
||||
{
|
||||
switch (m_cart->get_cart_type())
|
||||
switch (m_cartleft->get_cart_type())
|
||||
{
|
||||
case A800_PHOENIX:
|
||||
case A800_BLIZZARD:
|
||||
@ -1868,7 +1902,7 @@ void a400_state::disable_cart(offs_t offset, uint8_t data)
|
||||
{
|
||||
// we enter here only if we are writing to a different offset than last time
|
||||
m_last_offs = offset & 0x7;
|
||||
m_cart->write_d5xx(offset, data);
|
||||
m_cartleft->write_d5xx(offset, data);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@ -1885,13 +1919,13 @@ void a400_state::disable_cart(offs_t offset, uint8_t data)
|
||||
{
|
||||
// we enter here only if we are writing to a different offset than last time
|
||||
m_last_offs = offset & 0x0f;
|
||||
m_cart->write_d5xx(offset & 0x0f, data);
|
||||
m_cartleft->write_d5xx(offset & 0x0f, data);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case A800_SPARTADOS:
|
||||
// writes with offset & 8 are also used to enable/disable the subcart, so they go through!
|
||||
m_cart->write_d5xx(offset, data);
|
||||
m_cartleft->write_d5xx(offset, data);
|
||||
break;
|
||||
case A800_OSSM091:
|
||||
case A800_OSS8K:
|
||||
@ -1900,7 +1934,7 @@ void a400_state::disable_cart(offs_t offset, uint8_t data)
|
||||
else
|
||||
{
|
||||
m_cart_disabled = 0;
|
||||
m_cart->write_d5xx(offset, data);
|
||||
m_cartleft->write_d5xx(offset, data);
|
||||
}
|
||||
break;
|
||||
case A800_MICROCALC:
|
||||
@ -1910,7 +1944,7 @@ void a400_state::disable_cart(offs_t offset, uint8_t data)
|
||||
else
|
||||
{
|
||||
m_cart_disabled = 0;
|
||||
m_cart->write_d5xx(offset, m_cart_helper);
|
||||
m_cartleft->write_d5xx(offset, m_cart_helper);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@ -1993,6 +2027,15 @@ void a400_state::setup_cart(a800_cart_slot_device *slot)
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_d5xx)));
|
||||
break;
|
||||
case A800_CORINA:
|
||||
case A800_CORINA_SRAM:
|
||||
//m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8sm_delegate(*slot, FUNC(a800_cart_slot_device::read_80xx)));
|
||||
//m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xbfff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_80xx)));
|
||||
//m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd500, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_d5xx)));
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8sm_delegate(*this, FUNC(a400_state::read_corina_overlay)));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0xbfff, write8sm_delegate(*this, FUNC(a400_state::write_corina_overlay)));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd500, write8sm_delegate(*this, FUNC(a400_state::write_corina_d5xx)));
|
||||
break;
|
||||
case A5200_4K:
|
||||
case A5200_8K:
|
||||
case A5200_16K:
|
||||
@ -2044,7 +2087,7 @@ MACHINE_START_MEMBER( a400_state, a400 )
|
||||
setup_ram(0, m_ram->size());
|
||||
setup_ram(1, m_ram->size());
|
||||
setup_ram(2, m_ram->size());
|
||||
setup_cart(m_cart);
|
||||
setup_cart(m_cartleft);
|
||||
|
||||
save_item(NAME(m_cart_disabled));
|
||||
save_item(NAME(m_cart_helper));
|
||||
@ -2057,8 +2100,8 @@ MACHINE_START_MEMBER( a400_state, a800 )
|
||||
setup_ram(0, m_ram->size());
|
||||
setup_ram(1, m_ram->size());
|
||||
setup_ram(2, m_ram->size());
|
||||
setup_cart(m_cart);
|
||||
setup_cart(m_cart2);
|
||||
setup_cart(m_cartleft);
|
||||
setup_cart(m_cartright);
|
||||
|
||||
save_item(NAME(m_cart_disabled));
|
||||
save_item(NAME(m_cart_helper));
|
||||
@ -2069,7 +2112,7 @@ MACHINE_START_MEMBER( a400_state, a800xl )
|
||||
{
|
||||
m_mmu = 0xfd;
|
||||
m_ext_bank = 0x03; // only used by a130xe
|
||||
setup_cart(m_cart);
|
||||
setup_cart(m_cartleft);
|
||||
|
||||
save_item(NAME(m_cart_disabled));
|
||||
save_item(NAME(m_cart_helper));
|
||||
@ -2081,7 +2124,7 @@ MACHINE_START_MEMBER( a400_state, a800xl )
|
||||
|
||||
MACHINE_START_MEMBER( a400_state, a5200 )
|
||||
{
|
||||
setup_cart(m_cart);
|
||||
setup_cart(m_cartleft);
|
||||
|
||||
save_item(NAME(m_cart_disabled));
|
||||
save_item(NAME(m_cart_helper));
|
||||
@ -2127,14 +2170,14 @@ void a400_state::a800xl_pia_pb_w(uint8_t data)
|
||||
**************************************************************/
|
||||
|
||||
// note: both screen setups are actually non-interlaced, and always 240 lines
|
||||
void a400_state::config_ntsc_screen(machine_config &config)
|
||||
void atari_common_state::config_ntsc_screen(machine_config &config)
|
||||
{
|
||||
// 15.69975KHz x 59.9271 Hz
|
||||
m_screen->set_raw(XTAL(14'318'181), 912, antic_device::MIN_X, antic_device::MAX_X, 262, antic_device::MIN_Y, antic_device::MAX_Y);
|
||||
m_gtia->set_region(GTIA_NTSC);
|
||||
}
|
||||
|
||||
void a400_state::config_pal_screen(machine_config &config)
|
||||
void atari_common_state::config_pal_screen(machine_config &config)
|
||||
{
|
||||
// 15.55655KHz x 49.86074 Hz, master clock rated at 14.18757 MHz
|
||||
// TODO: confirm hsync
|
||||
@ -2218,7 +2261,7 @@ void a400_state::atari_common(machine_config &config)
|
||||
|
||||
ATARI_FDC(config, "fdc", 0);
|
||||
|
||||
A800_CART_SLOT(config, "cartleft", a800_left, nullptr);
|
||||
A800_CART_SLOT(config, m_cartleft, a800_left, nullptr);
|
||||
|
||||
/* software lists */
|
||||
SOFTWARE_LIST(config, "flop_list").set_original("a800_flop");
|
||||
@ -2277,7 +2320,7 @@ void a400_state::a800(machine_config &config)
|
||||
|
||||
// m_gtia->set_region(GTIA_NTSC);
|
||||
|
||||
A800_CART_SLOT(config, "cartright", a800_right, nullptr);
|
||||
A800_CART_SLOT(config, m_cartright, a800_right, nullptr);
|
||||
}
|
||||
|
||||
|
||||
@ -2297,7 +2340,7 @@ void a400_state::a800pal(machine_config &config)
|
||||
|
||||
// m_gtia->set_region(GTIA_PAL);
|
||||
|
||||
A800_CART_SLOT(config, "cartright", a800_right, nullptr);
|
||||
A800_CART_SLOT(config, m_cartright, a800_right, nullptr);
|
||||
}
|
||||
|
||||
|
||||
@ -2391,7 +2434,7 @@ void a400_state::xegs(machine_config &config)
|
||||
config.device_remove("cartleft");
|
||||
config.device_remove("cart_list");
|
||||
|
||||
XEGS_CART_SLOT(config, "cartleft", xegs_carts, nullptr);
|
||||
XEGS_CART_SLOT(config, m_cartleft, xegs_carts, nullptr);
|
||||
}
|
||||
|
||||
// memory map A5200, different ports, less RAM
|
||||
@ -2420,7 +2463,7 @@ void a400_state::a5200(machine_config &config)
|
||||
// m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ);
|
||||
// m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
|
||||
|
||||
A5200_CART_SLOT(config, "cartleft", a5200_carts, nullptr);
|
||||
A5200_CART_SLOT(config, m_cartleft, a5200_carts, nullptr);
|
||||
|
||||
/* Software lists */
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("a5200");
|
||||
|
@ -61,6 +61,9 @@ protected:
|
||||
optional_ioport_array<4> m_keypad;
|
||||
optional_ioport m_djoy_b;
|
||||
optional_ioport m_fake;
|
||||
|
||||
void config_ntsc_screen(machine_config &config);
|
||||
void config_pal_screen(machine_config &config);
|
||||
};
|
||||
|
||||
#endif // MAME_INCLUDES_ATARI400_H
|
||||
|
@ -143,10 +143,8 @@ void bartop52_state::a5200(machine_config &config)
|
||||
|
||||
/* video hardware */
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1));
|
||||
m_screen->set_visarea(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y);
|
||||
m_screen->set_refresh_hz(antic_device::FRAME_RATE_60HZ);
|
||||
m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
|
||||
config_ntsc_screen(config);
|
||||
|
||||
m_screen->set_screen_update("antic", FUNC(antic_device::screen_update));
|
||||
m_screen->set_palette("palette");
|
||||
|
||||
|
@ -356,13 +356,14 @@ void maxaflex_state::maxaflex(machine_config &config)
|
||||
pia.irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<2>));
|
||||
|
||||
/* video hardware */
|
||||
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
screen.set_visarea(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y);
|
||||
screen.set_refresh_hz(antic_device::FRAME_RATE_60HZ);
|
||||
screen.set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
|
||||
screen.set_screen_update("antic", FUNC(antic_device::screen_update));
|
||||
screen.set_palette("palette");
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
config_ntsc_screen(config);
|
||||
//screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
|
||||
//screen.set_visarea(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y);
|
||||
//screen.set_refresh_hz(antic_device::FRAME_RATE_60HZ);
|
||||
//screen.set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
|
||||
m_screen->set_screen_update("antic", FUNC(antic_device::screen_update));
|
||||
m_screen->set_palette("palette");
|
||||
|
||||
PALETTE(config, "palette", FUNC(maxaflex_state::atari_palette), 256);
|
||||
config.set_default_layout(layout_maxaflex);
|
||||
|
Loading…
Reference in New Issue
Block a user