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:
Angelo Salese 2022-10-16 22:59:33 +02:00 committed by GitHub
parent 3a1249d980
commit c388a2f84e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 937 additions and 253 deletions

View File

@ -269,10 +269,13 @@ Possible Undumped protos: -
</part> </part>
</software> </software>
<software name="bbsb"> <software name="bbsb" supported="partial">
<description>Bounty Bob Strikes Back!</description> <description>Bounty Bob Strikes Back!</description>
<year>1984</year> <year>1984</year>
<publisher>Big Five Software</publisher> <publisher>Big Five Software</publisher>
<notes><![CDATA[
Sometimes it throws [GTIA] glitchy frames (noticeable on player deaths)
]]></notes>
<part name="cart" interface="a8bit_cart"> <part name="cart" interface="a8bit_cart">
<feature name="slot" value="a5200_bbsb" /> <feature name="slot" value="a5200_bbsb" />
<dataarea name="rom" size="40960"> <dataarea name="rom" size="40960">

File diff suppressed because it is too large Load Diff

View File

@ -8,7 +8,8 @@ license:CC0
note: many 'original' floppy images are in .atx format, whereas cracked / unprotected ones are .atr format 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) .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> <description>S.A.M.</description>
<year>1982</year> <year>1982</year>
<publisher>Don't Ask</publisher> <publisher>Don't Ask</publisher>
<notes><![CDATA[
Doesn't boot
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="sam.atr" size="92176" crc="a5895d13" sha1="da2118f26dd46b0435ba6a486f17069734bad812"/> <rom name="sam.atr" size="92176" crc="a5895d13" sha1="da2118f26dd46b0435ba6a486f17069734bad812"/>
@ -36,10 +40,11 @@ license:CC0
</part> </part>
</software> </software>
<software name="ulysses" supported="no"> <software name="ulysses">
<description>Ulysses and the Golden Fleece</description> <description>Ulysses and the Golden Fleece</description>
<year>1986</year> <year>1986</year>
<publisher>Sierra On-Line</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Ulysses And The Golden Fleece [Rel. 1] [Side A].atr" size="92176" crc="e16b8dc8" sha1="4e55312b5259c96138f48703fcaa58a6edd0d922"/> <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> </part>
</software> </software>
<software name="countdwn"> <software name="countdwn" supported="no">
<description>Countdown</description> <description>Countdown</description>
<year>1984</year> <year>1984</year>
<publisher>Synapse</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Countdown.atr" size="92176" crc="0471796a" sha1="d02b8ad67b2f1f27b340e6fa94aa0c9bc03d2ad7"/> <rom name="Countdown.atr" size="92176" crc="0471796a" sha1="d02b8ad67b2f1f27b340e6fa94aa0c9bc03d2ad7"/>
@ -90,10 +99,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="silents"> <software name="silents" supported="partial">
<description>Silent Service</description> <description>Silent Service</description>
<year>1985</year> <year>1985</year>
<publisher>Microprose</publisher> <publisher>Microprose</publisher>
<notes><![CDATA[
a800xl: crashes on boot
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Silent Service.atr" size="92176" crc="bda9ac46" sha1="312c76e40f0941749e3909afd4a7d7a83f398210"/> <rom name="Silent Service.atr" size="92176" crc="bda9ac46" sha1="312c76e40f0941749e3909afd4a7d7a83f398210"/>
@ -101,10 +113,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="templtri"> <software name="templtri" supported="partial">
<description>Temple Of Apshai Triology</description> <description>Temple Of Apshai Trilogy</description>
<year>1985</year> <year>1985</year>
<publisher>Epyx</publisher> <publisher>Epyx</publisher>
<notes><![CDATA[
Unsupported character save to [disk]
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Temple of Apshai Trilogy (The).atr" size="92176" crc="a5cdca88" sha1="e9955303ba855beeafb0e5bf9b5b683d0fbb8701"/> <rom name="Temple of Apshai Trilogy (The).atr" size="92176" crc="a5cdca88" sha1="e9955303ba855beeafb0e5bf9b5b683d0fbb8701"/>
@ -123,10 +138,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="shamus2"> <software name="shamus2" supported="partial">
<description>Shamus: Case II</description> <description>Shamus: Case II</description>
<year>1983</year> <year>1983</year>
<publisher>Synapse</publisher> <publisher>Synapse</publisher>
<notes><![CDATA[
Runs too fast, [ANTIC] timings
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Shamus - Case II.atr" size="92176" crc="2b6696c6" sha1="f3079c19f54ae5dc6fc9de6ca80341e9a2527c05"/> <rom name="Shamus - Case II.atr" size="92176" crc="2b6696c6" sha1="f3079c19f54ae5dc6fc9de6ca80341e9a2527c05"/>
@ -134,10 +152,14 @@ license:CC0
</part> </part>
</software> </software>
<software name="wkarate"> <software name="wkarate" supported="partial">
<description>World Karate Championship</description> <!-- "Cracked by Kilroy (P) N.A.P.O." briefly appears on boot -->
<description>World Karate Championship (cracked)</description>
<year>1986</year> <year>1986</year>
<publisher>Epyx</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="133136"> <dataarea name="flop" size="133136">
<rom name="World Karate Championship (v4).atr" size="133136" crc="a89bf1e6" sha1="97fbaf575d9f9ddbecd1528c7d5090d2fdac6f3e"/> <rom name="World Karate Championship (v4).atr" size="133136" crc="a89bf1e6" sha1="97fbaf575d9f9ddbecd1528c7d5090d2fdac6f3e"/>
@ -156,10 +178,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="cloderun"> <software name="cloderun" supported="no">
<description>Championship Lode Runner</description> <description>Championship Lode Runner</description>
<year>1985</year> <year>1985</year>
<publisher>Broderbund</publisher> <publisher>Broderbund</publisher>
<notes><![CDATA[
Garbled GFXs
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Championship Lode Runner.atr" size="92176" crc="53e02689" sha1="dc92e8616fa2e00432b388df97d508c1a0b6db3c"/> <rom name="Championship Lode Runner.atr" size="92176" crc="53e02689" sha1="dc92e8616fa2e00432b388df97d508c1a0b6db3c"/>
@ -167,10 +192,14 @@ license:CC0
</part> </part>
</software> </software>
<software name="marsmis2"> <software name="marsmis2" supported="partial">
<description>Mars Mission II</description> <description>Mars Mission II</description>
<year>1981</year> <year>1981</year>
<publisher>Antic</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Mars Mission II.atr" size="92176" crc="59694595" sha1="4b2ad8bdcbbd4c8f5aef154e55bf4950b15798f3"/> <rom name="Mars Mission II.atr" size="92176" crc="59694595" sha1="4b2ad8bdcbbd4c8f5aef154e55bf4950b15798f3"/>
@ -190,7 +219,8 @@ license:CC0
</software> </software>
<software name="brucelee"> <software name="brucelee">
<description>Bruce Lee</description> <!-- "CRACKED BY GEORGE!" -->
<description>Bruce Lee (cracked)</description>
<year>1984</year> <year>1984</year>
<publisher>Datasoft</publisher> <publisher>Datasoft</publisher>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
@ -233,10 +263,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="spyvspy"> <software name="spyvspy" supported="no">
<description>Spy Vs Spy</description> <description>Spy Vs Spy</description>
<year>1984</year> <year>1984</year>
<publisher>First Star</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="Spy Vs Spy (1984)(First Star).atr" size="92176" crc="91940f40" sha1="d57d8ecbb0b14987c8fc64b27fe1511779c62f4d"/> <rom name="Spy Vs Spy (1984)(First Star).atr" size="92176" crc="91940f40" sha1="d57d8ecbb0b14987c8fc64b27fe1511779c62f4d"/>
@ -256,7 +289,8 @@ license:CC0
</software> </software>
<software name="spyvspyi"> <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> <year>1985</year>
<publisher>First Star Software</publisher> <publisher>First Star Software</publisher>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
@ -277,7 +311,9 @@ license:CC0
</part> </part>
</software> </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> <description>Montezuma's Revenge! (Prototype)</description>
<year>1983</year> <year>1983</year>
<publisher>Utopia Software</publisher> <publisher>Utopia Software</publisher>
@ -288,10 +324,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="mrrobot"> <software name="mrrobot" supported="partial">
<description>Mr. Robot and his Robot Factory</description> <description>Mr. Robot and his Robot Factory</description>
<year>1983</year> <year>1983</year>
<publisher>Datamost</publisher> <publisher>Datamost</publisher>
<notes><![CDATA[
Random black screen after title screen, particularly on soft resets
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="mr robot and his robot factory.atr" size="92176" crc="36f3bdb0" sha1="8bb1f04783e883bb20aec5b83e3493632d9dd0bd"/> <rom name="mr robot and his robot factory.atr" size="92176" crc="36f3bdb0" sha1="8bb1f04783e883bb20aec5b83e3493632d9dd0bd"/>
@ -299,10 +338,14 @@ license:CC0
</part> </part>
</software> </software>
<software name="castwolf" supported="partial"> <software name="castwolf" supported="no">
<description>Castle Wolfenstein</description> <description>Castle Wolfenstein</description>
<year>1983</year> <year>1983</year>
<publisher>Muse Software</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="castle wolfenstein.atr" size="92176" crc="7745cd05" sha1="03ba4218d20f260f3e17c7ce540c952cd071bdf5"/> <rom name="castle wolfenstein.atr" size="92176" crc="7745cd05" sha1="03ba4218d20f260f3e17c7ce540c952cd071bdf5"/>
@ -310,10 +353,15 @@ license:CC0
</part> </part>
</software> </software>
<software name="bcastwlf"> <software name="bcastwlf" supported="no">
<description>Beyond Castle Wolfenstein</description> <description>Beyond Castle Wolfenstein</description>
<year>1984</year> <year>1984</year>
<publisher>Muse Software</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="beyond castle wolfenstein.atr" size="92176" crc="78ef8db7" sha1="a0916bd0dde1b748834411c96cb2ae058b38f3c2"/> <rom name="beyond castle wolfenstein.atr" size="92176" crc="78ef8db7" sha1="a0916bd0dde1b748834411c96cb2ae058b38f3c2"/>
@ -343,10 +391,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="alleycat"> <software name="alleycat" supported="partial">
<description>Alley Cat</description> <description>Alley Cat</description>
<year>1983</year> <year>1983</year>
<publisher>Synapse</publisher> <publisher>Synapse</publisher>
<notes><![CDATA[
Runs too fast
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="65552"> <dataarea name="flop" size="65552">
<rom name="alleycat.atr" size="65552" crc="12e2eb0d" sha1="a99e131f024e5df10316860b6d174a16aadc8651"/> <rom name="alleycat.atr" size="65552" crc="12e2eb0d" sha1="a99e131f024e5df10316860b6d174a16aadc8651"/>
@ -365,11 +416,15 @@ license:CC0
</part> </part>
</software> </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 --> <!-- Flippy disk, c64 version on side A -->
<!-- Supposedly a PAL release, tested to have too much overscan on real HW -->
<description>Elektra Glide</description> <description>Elektra Glide</description>
<year>1986</year> <year>1986</year>
<publisher>Mastertronic</publisher> <publisher>Mastertronic</publisher>
<notes><![CDATA[
[ANTIC] playfield is offset one line on mountain strip
]]></notes>
<info name="serial" value="64712" /> <info name="serial" value="64712" />
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
@ -379,12 +434,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="koalapnt"> <software name="koalapnt" supported="no">
<!-- Flippy disk, c64 version on side A --> <!-- Flippy disk, c64 version on side A -->
<description>KoalaPainter (Light Pen)</description> <description>KoalaPainter (Light Pen)</description>
<year>1984</year> <year>1984</year>
<publisher>Koala Technologies</publisher> <publisher>Koala Technologies</publisher>
<info name="serial" value="00626-001" /> <info name="serial" value="00626-001" />
<info name="usage" value="Requires light pen"/>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92160"> <dataarea name="flop" size="92160">
@ -421,10 +477,14 @@ license:CC0
</part> </part>
</software> </software>
<software name="croschck" supported="no"> <!-- randomly freezes up on player's turn screen --> <software name="croschck" supported="no">
<description>Crosscheck</description> <description>Crosscheck</description>
<year>1986</year> <year>1986</year>
<publisher>Datasoft</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="crosscheck (1986)(datasoft)(us).atr" size="92176" crc="b4cef936" sha1="1bb9efe6ce4829388f933ae85dd0836749ca9e55"/> <!-- Verified --> <rom name="crosscheck (1986)(datasoft)(us).atr" size="92176" crc="b4cef936" sha1="1bb9efe6ce4829388f933ae85dd0836749ca9e55"/> <!-- Verified -->
@ -461,7 +521,7 @@ license:CC0
</part> </part>
</software> </software>
<software name="cvrnmars" supported="partial"> <software name="cvrnmars">
<description>Caverns of Mars</description> <description>Caverns of Mars</description>
<year>1982</year> <year>1982</year>
<publisher>Atari</publisher> <publisher>Atari</publisher>
@ -472,7 +532,8 @@ license:CC0
</part> </part>
</software> </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> <description>Dandy Dungeon</description>
<year>1985</year> <year>1985</year>
<publisher>Antic</publisher> <publisher>Antic</publisher>
@ -505,9 +566,11 @@ license:CC0
</software> </software>
<software name="essex"> <software name="essex">
<!-- Prints a "8-28-85" date if you fail copy protection check, release date? -->
<description>Essex</description> <description>Essex</description>
<year>1985</year> <year>1985</year>
<publisher>Synapse Software</publisher> <publisher>Synapse Software</publisher>
<info name="usage" value="Sports manual copy protection"/>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <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 --> <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> <description>Galahad and the Holy Grail</description>
<year>1982</year> <year>1982</year>
<publisher>Atari Program Exchange</publisher> <publisher>Atari Program Exchange</publisher>
<!-- TODO: verify collision detection -->
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="galahad and the holy grail (1982)(apx)(us).atr" size="92176" crc="d575a0bb" sha1="9f03ddbd745919e93113daed1117a59751f22ae5"/> <!-- Verified --> <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> <description>L.A. SWAT + Panther</description>
<year>1988</year> <year>1988</year>
<publisher>Mastertronic</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="l.a. swat + panther (1988)(mastertronic)(us).atr" size="92176" crc="6c4752f6" sha1="df6a82e8946d7100620c3947d9e7e106f513fa26"/> <!-- Verified --> <rom name="l.a. swat + panther (1988)(mastertronic)(us).atr" size="92176" crc="6c4752f6" sha1="df6a82e8946d7100620c3947d9e7e106f513fa26"/> <!-- Verified -->
@ -590,10 +658,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="phantas"> <software name="phantas" supported="no">
<description>Phantasie</description> <description>Phantasie</description>
<year>1987</year> <year>1987</year>
<publisher>SSI</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <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 --> <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 --> <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> </dataarea>
</part> </part>
<!-- baddump: non-factory save -->
<part name="flop3" interface="floppy_5_25"> <part name="flop3" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <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> </dataarea>
</part> </part>
<part name="flop4" interface="floppy_5_25"> <part name="flop4" interface="floppy_5_25">
@ -617,7 +689,8 @@ license:CC0
</software> </software>
<software name="phobos"> <software name="phobos">
<description>Phobos v1.1</description> <description>Phobos (v1.1)</description>
<!-- MCMLXXXII on title screen -->
<year>1983</year> <year>1983</year>
<publisher>Atari Program Exchange</publisher> <publisher>Atari Program Exchange</publisher>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
@ -671,10 +744,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="saracen"> <software name="saracen" supported="partial">
<description>Saracen</description> <description>Saracen</description>
<year>1987</year> <year>1987</year>
<publisher>Datasoft</publisher> <publisher>Datasoft</publisher>
<notes><![CDATA[
a800xl: doesn't boot
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="saracen (1987)(datasoft)(us)(side a).atr" size="92176" crc="512b4ab7" sha1="3b91a79a49c699ea458a85fe81612a55e494c1ec"/> <!-- Verified --> <rom name="saracen (1987)(datasoft)(us)(side a).atr" size="92176" crc="512b4ab7" sha1="3b91a79a49c699ea458a85fe81612a55e494c1ec"/> <!-- Verified -->
@ -687,10 +763,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="shatalli"> <software name="shatalli" supported="partial">
<description>Chronicles of Osgorth: The Shattered Alliance</description> <description>Chronicles of Osgorth: The Shattered Alliance</description>
<year>1981</year> <year>1981</year>
<publisher>SSI</publisher> <publisher>SSI</publisher>
<notes><![CDATA[
Unsupported [disk] saves
]]></notes>
<sharedfeat name="requirement" value="a800:basicb"/> <sharedfeat name="requirement" value="a800:basicb"/>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
@ -711,10 +790,13 @@ license:CC0
</part> </part>
</software> </software>
<software name="spellbrk"> <software name="spellbrk" supported="partial">
<description>Spellbreaker</description> <description>Spellbreaker</description>
<year>1985</year> <year>1985</year>
<publisher>Infocom</publisher> <publisher>Infocom</publisher>
<notes><![CDATA[
a800xl: doesn't boot
]]></notes>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <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 --> <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> </part>
</software> </software>
<software name="spitfr40" supported="no"> <!-- joystick/keyboard inputs mostly not responsive --> <software name="spitfr40" supported="no">
<description>Spitfire 40</description> <description>Spitfire 40</description>
<year>1986</year> <year>1986</year>
<publisher>Avalon Hill</publisher> <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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="spitfire 40 (1986)(avalon hill)(us).atr" size="92176" crc="875a404f" sha1="49e6c560d38137944c1cd9bc6c5f37a012045a84"/> <!-- Verified --> <rom name="spitfire 40 (1986)(avalon hill)(us).atr" size="92176" crc="875a404f" sha1="49e6c560d38137944c1cd9bc6c5f37a012045a84"/> <!-- Verified -->
@ -738,12 +823,17 @@ license:CC0
</part> </part>
</software> </software>
<!-- Requires 128K RAM --> <software name="t34" supported="partial">
<software name="t34" supported="no"> <!-- fails to load due to insufficient RAM -->
<description>T-34: The Battle</description> <description>T-34: The Battle</description>
<year>1994</year> <year>1994</year>
<publisher>A.N.G. Software</publisher> <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"/> <sharedfeat name="compatibility" value="XL/XE"/>
<!-- dual sided single floppy according to game -->
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="133136"> <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 --> <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> </software>
<!-- Atari Translator allows disks that only work on earlier 400/800 systems to load on later XL/XE machines --> <!-- 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> <description>Atari Translator (USA)</description>
<year>1983</year> <year>1983</year>
<publisher>Atari</publisher> <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"/> <sharedfeat name="compatibility" value="XL/XE"/>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
@ -774,11 +869,14 @@ license:CC0
</part> </part>
</software> </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">
<software name="turbican" supported="partial"> <!-- Prior comments are probably BTANB. However, seems glitchy even on a800xlp. -->
<description>Turbican</description> <description>Turbican</description>
<year>1993</year> <year>1993</year>
<publisher>ASF s.c.</publisher> <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"/> <sharedfeat name="compatibility" value="XL/XE"/>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="133136"> <dataarea name="flop" size="133136">
@ -787,10 +885,16 @@ license:CC0
</part> </part>
</software> </software>
<software name="yoomp" supported="no"> <!-- black screen after loading screens --> <!-- v.1.0 also known to exist (in .xex format -->
<description>Yoomp!</description> <software name="yoomp" supported="partial">
<description>Yoomp! (v.1.1)</description>
<year>2007</year> <year>2007</year>
<publisher>&lt;homebrew&gt;</publisher> <publisher>&lt;homebrew&gt;</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"/> <sharedfeat name="compatibility" value="XL/XE"/>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
@ -799,10 +903,14 @@ license:CC0
</part> </part>
</software> </software>
<software name="zybex"> <software name="zybex" supported="partial">
<description>Zybex (Ned)</description> <description>Zybex (Ned)</description>
<year>1994</year> <year>1994</year>
<publisher>A.N.G. Software</publisher> <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"/> <sharedfeat name="compatibility" value="XL/XE"/>
<part name="flop1" interface="floppy_5_25"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
@ -868,11 +976,13 @@ license:CC0
</part> </part>
</software> </software>
<!-- http://www.mr-atari.com/Mr.Atari/LiteDOS/ --> <software name="litedosse">
<software name="litedosse"> <!-- runs but needs testing -->
<description>Atari LiteDOS-SE</description> <description>Atari LiteDOS-SE</description>
<year>2022</year> <year>2022</year>
<publisher>Mr.Atari</publisher> <publisher>&lt;homebrew&gt;</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"> <part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="92176"> <dataarea name="flop" size="92176">
<rom name="LiteDOS-SE (build 2022-01-14).atr" size="92176" crc="779dbfae" sha1="5cbbe75cf0489213d87e2c7cdaf2f8bfc802cf56"/> <rom name="LiteDOS-SE (build 2022-01-14).atr" size="92176" crc="779dbfae" sha1="5cbbe75cf0489213d87e2c7cdaf2f8bfc802cf56"/>

View File

@ -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_turbo128", A800_ROM_TURBO);
device.option_add_internal("a800_tlink2", A800_ROM_TELELINK2); device.option_add_internal("a800_tlink2", A800_ROM_TELELINK2);
device.option_add_internal("a800_sitsa", A800_ROM_MICROCALC); 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( "rtime8", A800_RTIME8); // not a ROM cartridge
device.option_add_internal("xegs", XEGS_ROM); device.option_add_internal("xegs", XEGS_ROM);
} }

View File

@ -102,11 +102,12 @@ void device_a800_cart_interface::nvram_alloc(uint32_t size)
//------------------------------------------------- //-------------------------------------------------
// ****_cart_slot_device - constructor // ****_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) : 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_t(mconfig, type, tag, owner, clock)
device_cartrom_image_interface(mconfig, *this), , device_cartrom_image_interface(mconfig, *this)
device_single_card_slot_interface<device_a800_cart_interface>(mconfig, *this), , device_single_card_slot_interface<device_a800_cart_interface>(mconfig, *this)
m_cart(nullptr), m_type(0) , m_cart(nullptr)
, m_type(0)
{ {
} }
@ -153,8 +154,6 @@ void a800_cart_slot_device::device_start()
m_cart = get_card_device(); m_cart = get_card_device();
} }
/*------------------------------------------------- /*-------------------------------------------------
call load call load
-------------------------------------------------*/ -------------------------------------------------*/
@ -191,6 +190,7 @@ static const a800_slot slot_list[] =
{ A800_TELELINK2, "a800_tlink2" }, { A800_TELELINK2, "a800_tlink2" },
{ A800_MICROCALC, "a800_sitsa" }, { A800_MICROCALC, "a800_sitsa" },
{ A800_CORINA, "a800_corina" }, { A800_CORINA, "a800_corina" },
{ A800_CORINA_SRAM, "a800_corina_sram" },
{ A800_8K_RIGHT, "a800_8k_right" }, { A800_8K_RIGHT, "a800_8k_right" },
{ A5200_4K, "a5200" }, { A5200_4K, "a5200" },
{ A5200_8K, "a5200" }, { A5200_8K, "a5200" },
@ -276,6 +276,12 @@ image_init_result a800_cart_slot_device::call_load()
} }
if (m_type == A800_TELELINK2) if (m_type == A800_TELELINK2)
m_cart->nvram_alloc(0x100); 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); logerror("%s loaded cartridge '%s' size %dK\n", machine().system().name, filename(), len/1024);
} }

View File

@ -35,6 +35,7 @@ enum
A800_TELELINK2, A800_TELELINK2,
A800_MICROCALC, A800_MICROCALC,
A800_CORINA, A800_CORINA,
A800_CORINA_SRAM,
A5200_4K, A5200_4K,
A5200_8K, A5200_8K,
A5200_16K, A5200_16K,

View File

@ -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_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_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_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(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_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") 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) 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) : 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() void a5200_rom_bbsb_device::device_start()
{ {
save_item(NAME(m_banks)); 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) 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) if (offset < 0x1000)
return m_rom[(offset & 0xfff) + (m_banks[0] * 0x1000) + 0]; return m_rom[(offset & 0xfff) + (m_banks[0] * 0x1000) + 0];
else if (offset < 0x2000) else if (offset < 0x2000)
@ -384,6 +423,87 @@ void a800_rom_microcalc_device::write_d5xx(offs_t offset, uint8_t data)
m_bank = 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 // 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) 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) if (offset < 0x1000)
return m_rom[(offset & 0xfff) + (m_banks[0] * 0x1000) + 0x2000]; return m_rom[(offset & 0xfff) + (m_banks[0] * 0x1000) + 0x2000];
else if (offset < 0x2000) else if (offset < 0x2000)

View File

@ -159,6 +159,43 @@ protected:
int m_bank; 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 // ======================> xegs_rom_device
@ -221,6 +258,8 @@ 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_TURBO, a800_rom_turbo_device)
DECLARE_DEVICE_TYPE(A800_ROM_TELELINK2, a800_rom_telelink2_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_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(XEGS_ROM, xegs_rom_device)
DECLARE_DEVICE_TYPE(A5200_ROM_2CHIPS, a5200_rom_2chips_device) DECLARE_DEVICE_TYPE(A5200_ROM_2CHIPS, a5200_rom_2chips_device)
DECLARE_DEVICE_TYPE(A5200_ROM_BBSB, a5200_rom_bbsb_device) DECLARE_DEVICE_TYPE(A5200_ROM_BBSB, a5200_rom_bbsb_device)

View File

@ -257,8 +257,8 @@ public:
m_pia(*this, "pia"), m_pia(*this, "pia"),
m_dac(*this, "dac"), m_dac(*this, "dac"),
m_region_maincpu(*this, "maincpu"), m_region_maincpu(*this, "maincpu"),
m_cart(*this, "cartleft"), m_cartleft(*this, "cartleft"),
m_cart2(*this, "cartright") m_cartright(*this, "cartright")
{ } { }
void atari_common_nodac(machine_config &config); void atari_common_nodac(machine_config &config);
@ -277,8 +277,7 @@ public:
void a400(machine_config &config); void a400(machine_config &config);
protected: protected:
void config_ntsc_screen(machine_config &config);
void config_pal_screen(machine_config &config);
private: private:
DECLARE_MACHINE_START(a400); DECLARE_MACHINE_START(a400);
@ -304,6 +303,9 @@ private:
void special_write_8000(offs_t offset, uint8_t data); void special_write_8000(offs_t offset, uint8_t data);
uint8_t special_read_a000(offs_t offset); uint8_t special_read_a000(offs_t offset);
void special_write_a000(offs_t offset, uint8_t data); 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 a600xl_low_r(offs_t offset);
uint8_t a1200xl_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<pia6821_device> m_pia;
optional_device<dac_bit_interface> m_dac; optional_device<dac_bit_interface> m_dac;
required_memory_region m_region_maincpu; required_memory_region m_region_maincpu;
optional_device<a800_cart_slot_device> m_cart; optional_device<a800_cart_slot_device> m_cartleft;
optional_device<a800_cart_slot_device> m_cart2; optional_device<a800_cart_slot_device> m_cartright;
int m_cart_disabled, m_cart_helper; int m_cart_disabled, m_cart_helper;
int m_last_offs; 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) if (!(m_mmu & 0x80) && offset >= 0x5000 && offset < 0x5800)
return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)]; return m_region_maincpu->base()[0xd000 + (offset & 0x7ff)];
if (!(m_mmu & 0x10)) 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 else
return m_ram->pointer()[offset]; 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) if (!(m_mmu & 0x80) && offset >= 0x5000 && offset < 0x5800)
return; return;
if (!(m_mmu & 0x10)) 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 else
m_ram->pointer()[offset] = data; 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 // 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) uint8_t a400_state::special_read_8000(offs_t offset)
{ {
if (!m_cart_disabled) if (!m_cart_disabled)
return m_cart->read_80xx(offset); return m_cartleft->read_80xx(offset);
else else
{ {
offset += 0x8000; 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) uint8_t a400_state::special_read_a000(offs_t offset)
{ {
if (!m_cart_disabled) if (!m_cart_disabled)
return m_cart->read_80xx(offset); return m_cartleft->read_80xx(offset);
else else
{ {
offset += 0xa000; offset += 0xa000;
@ -1839,11 +1843,41 @@ uint8_t a400_state::read_d5xx(offs_t offset)
return 0xff; 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) 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_PHOENIX:
case A800_BLIZZARD: 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 // we enter here only if we are writing to a different offset than last time
m_last_offs = offset & 0x7; m_last_offs = offset & 0x7;
m_cart->write_d5xx(offset, data); m_cartleft->write_d5xx(offset, data);
} }
} }
break; 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 // we enter here only if we are writing to a different offset than last time
m_last_offs = offset & 0x0f; m_last_offs = offset & 0x0f;
m_cart->write_d5xx(offset & 0x0f, data); m_cartleft->write_d5xx(offset & 0x0f, data);
} }
} }
break; break;
case A800_SPARTADOS: case A800_SPARTADOS:
// writes with offset & 8 are also used to enable/disable the subcart, so they go through! // 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; break;
case A800_OSSM091: case A800_OSSM091:
case A800_OSS8K: case A800_OSS8K:
@ -1900,7 +1934,7 @@ void a400_state::disable_cart(offs_t offset, uint8_t data)
else else
{ {
m_cart_disabled = 0; m_cart_disabled = 0;
m_cart->write_d5xx(offset, data); m_cartleft->write_d5xx(offset, data);
} }
break; break;
case A800_MICROCALC: case A800_MICROCALC:
@ -1910,7 +1944,7 @@ void a400_state::disable_cart(offs_t offset, uint8_t data)
else else
{ {
m_cart_disabled = 0; m_cart_disabled = 0;
m_cart->write_d5xx(offset, m_cart_helper); m_cartleft->write_d5xx(offset, m_cart_helper);
} }
break; break;
default: 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).unmap_write(0x8000, 0xbfff);
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_d5xx))); m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8sm_delegate(*slot, FUNC(a800_cart_slot_device::write_d5xx)));
break; 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_4K:
case A5200_8K: case A5200_8K:
case A5200_16K: case A5200_16K:
@ -2044,7 +2087,7 @@ MACHINE_START_MEMBER( a400_state, a400 )
setup_ram(0, m_ram->size()); setup_ram(0, m_ram->size());
setup_ram(1, m_ram->size()); setup_ram(1, m_ram->size());
setup_ram(2, 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_disabled));
save_item(NAME(m_cart_helper)); save_item(NAME(m_cart_helper));
@ -2057,8 +2100,8 @@ MACHINE_START_MEMBER( a400_state, a800 )
setup_ram(0, m_ram->size()); setup_ram(0, m_ram->size());
setup_ram(1, m_ram->size()); setup_ram(1, m_ram->size());
setup_ram(2, m_ram->size()); setup_ram(2, m_ram->size());
setup_cart(m_cart); setup_cart(m_cartleft);
setup_cart(m_cart2); setup_cart(m_cartright);
save_item(NAME(m_cart_disabled)); save_item(NAME(m_cart_disabled));
save_item(NAME(m_cart_helper)); save_item(NAME(m_cart_helper));
@ -2069,7 +2112,7 @@ MACHINE_START_MEMBER( a400_state, a800xl )
{ {
m_mmu = 0xfd; m_mmu = 0xfd;
m_ext_bank = 0x03; // only used by a130xe 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_disabled));
save_item(NAME(m_cart_helper)); save_item(NAME(m_cart_helper));
@ -2081,7 +2124,7 @@ MACHINE_START_MEMBER( a400_state, a800xl )
MACHINE_START_MEMBER( a400_state, a5200 ) 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_disabled));
save_item(NAME(m_cart_helper)); 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 // 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 // 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_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); 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 // 15.55655KHz x 49.86074 Hz, master clock rated at 14.18757 MHz
// TODO: confirm hsync // TODO: confirm hsync
@ -2218,7 +2261,7 @@ void a400_state::atari_common(machine_config &config)
ATARI_FDC(config, "fdc", 0); 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 lists */
SOFTWARE_LIST(config, "flop_list").set_original("a800_flop"); 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); // 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); // 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("cartleft");
config.device_remove("cart_list"); 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 // 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_refresh_hz(antic_device::FRAME_RATE_60HZ);
// m_screen->set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_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 lists */
SOFTWARE_LIST(config, "cart_list").set_original("a5200"); SOFTWARE_LIST(config, "cart_list").set_original("a5200");

View File

@ -61,6 +61,9 @@ protected:
optional_ioport_array<4> m_keypad; optional_ioport_array<4> m_keypad;
optional_ioport m_djoy_b; optional_ioport m_djoy_b;
optional_ioport m_fake; optional_ioport m_fake;
void config_ntsc_screen(machine_config &config);
void config_pal_screen(machine_config &config);
}; };
#endif // MAME_INCLUDES_ATARI400_H #endif // MAME_INCLUDES_ATARI400_H

View File

@ -143,10 +143,8 @@ void bartop52_state::a5200(machine_config &config)
/* video hardware */ /* video hardware */
SCREEN(config, m_screen, SCREEN_TYPE_RASTER); SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1)); config_ntsc_screen(config);
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);
m_screen->set_screen_update("antic", FUNC(antic_device::screen_update)); m_screen->set_screen_update("antic", FUNC(antic_device::screen_update));
m_screen->set_palette("palette"); m_screen->set_palette("palette");

View File

@ -356,13 +356,14 @@ void maxaflex_state::maxaflex(machine_config &config)
pia.irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<2>)); pia.irqb_handler().set("mainirq", FUNC(input_merger_device::in_w<2>));
/* video hardware */ /* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); config_ntsc_screen(config);
screen.set_visarea(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y); //screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_refresh_hz(antic_device::FRAME_RATE_60HZ); //screen.set_visarea(antic_device::MIN_X, antic_device::MAX_X, antic_device::MIN_Y, antic_device::MAX_Y);
screen.set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ); //screen.set_refresh_hz(antic_device::FRAME_RATE_60HZ);
screen.set_screen_update("antic", FUNC(antic_device::screen_update)); //screen.set_size(antic_device::HWIDTH * 8, antic_device::TOTAL_LINES_60HZ);
screen.set_palette("palette"); 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); PALETTE(config, "palette", FUNC(maxaflex_state::atari_palette), 256);
config.set_default_layout(layout_maxaflex); config.set_default_layout(layout_maxaflex);