mirror of
https://github.com/holub/mame
synced 2025-04-16 21:44:32 +03:00
Atari Lynx emulation updates (#8931)
* Atari Lynx emulation updates - Use memory_view for address mapping - Support variable framerate, Fix screen overscan (102 visible + 3 blank lines) - Fix collision handling (possibly copy-paste error?) - Reduce unnecessary shared pointers, Some duplications - Use inlines values for bit flags - Add support for variable page size for cartridge, AUDIN pin for bankswitch - Add hardware notes, Initialize values - Fix namings, Fix spacings, Use shorter/correct type values - Move lynx sound functions into device/sound/lynx.*, Fix sound pitch (input clock related)
This commit is contained in:
parent
53f28f0934
commit
00f45b9df1
102
hash/lynx.xml
102
hash/lynx.xml
@ -37,6 +37,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2042" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="a.p.b. - all points bulletin (euro, usa).bin" size="262144" crc="f6fb48fb" sha1="c2bf00de769895cbed03c056eb9c8fa1a7ea59ef" />
|
||||
</dataarea>
|
||||
@ -48,6 +49,7 @@ Known undumped prototypes:
|
||||
<year>199?</year>
|
||||
<publisher>Atari</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="alien vs predator (usa) (prototype).bin" size="262144" crc="540e9bb7" sha1="27427ed186d034d71e100cbff5d0072a717af9e0" />
|
||||
</dataarea>
|
||||
@ -60,6 +62,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2049" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="awesome golf (euro, usa).bin" size="262144" crc="0483cd2a" sha1="74441b96ce5bf2be68945fbe93bda259f97816b7" />
|
||||
</dataarea>
|
||||
@ -72,6 +75,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2050" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="baseball heroes (euro, usa).bin" size="262144" crc="3943c116" sha1="b30a1fe12dc3e69e1a179a5e4d1799d93996fc24" />
|
||||
</dataarea>
|
||||
@ -84,6 +88,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2034" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="basketbrawl (euro, usa).bin" size="131072" crc="4161bb4a" sha1="46ae8e1504e2944525d535280a3ed32e0873788a" />
|
||||
</dataarea>
|
||||
@ -96,6 +101,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2101" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="batman returns (euro, usa).bin" size="262144" crc="277f82c2" sha1="2e25b17a221d4d9598811fbf84ab0da3016f26e4" />
|
||||
</dataarea>
|
||||
@ -108,6 +114,7 @@ Known undumped prototypes:
|
||||
<publisher>Beyond Games</publisher>
|
||||
<info name="serial" value="PT5006" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="battle wheels (euro, usa).bin" size="131072" crc="779faece" sha1="4577550d20a22cb685d51b411396d5085a852be6" />
|
||||
</dataarea>
|
||||
@ -120,6 +127,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2088" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="battlezone 2000 (euro, usa).bin" size="262144" crc="30fee726" sha1="fb50ddee638aa316c7eae6d50961e3b69b112c4f" />
|
||||
</dataarea>
|
||||
@ -132,6 +140,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2068" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="bill & ted's excellent adventure (euro, usa).bin" size="262144" crc="143a313e" sha1="f09ce08d93a479feaceceb79eb48b337aff49fae" />
|
||||
</dataarea>
|
||||
@ -144,6 +153,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2056" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="block out (euro, usa).bin" size="131072" crc="3cd75df3" sha1="ae177cf76953b7e0a56b03096bb5c9c9c9051177" />
|
||||
</dataarea>
|
||||
@ -156,6 +166,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2054" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="blue lightning (usa) (demo).bin" size="131072" crc="bfe36525" sha1="57ece74ac94d65d86a960a44d9896e17b816bbde" />
|
||||
</dataarea>
|
||||
@ -168,6 +179,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2020" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="blue lightning (euro, usa).bin" size="131072" crc="daf587b1" sha1="be08076586f76db368db1769380dcbb6de2a6513" />
|
||||
</dataarea>
|
||||
@ -180,6 +192,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="LX216" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="bubble trouble (euro, usa).bin" size="262144" crc="333daece" sha1="cb9f78ffb02216979a03abb66301e4d3a8f01bfe" />
|
||||
</dataarea>
|
||||
@ -192,6 +205,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2025" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="california games (euro, usa).bin" size="131072" crc="a08f0b59" sha1="f13e010102ca527a9c393acb52bb949a1ba93e3e" />
|
||||
</dataarea>
|
||||
@ -204,6 +218,7 @@ Known undumped prototypes:
|
||||
<publisher>Shadowsoft</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="rotation" value="LEFT" />
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="centipede (usa) (prototype).bin" size="131072" crc="97501709" sha1="59a5185203e3550b1cad7b28489915bc8de80851" />
|
||||
</dataarea>
|
||||
@ -216,6 +231,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2053" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="checkered flag (euro, usa).bin" size="262144" crc="19c5a7a5" sha1="f115bb5f98992d98c8d11b1daa68bb1961b59660" />
|
||||
</dataarea>
|
||||
@ -228,6 +244,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2028" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="chip's challenge (euro, usa).bin" size="131072" crc="6a5f53ed" sha1="6a90e6627086e13d99bacbcaafea7ab2f6aba8a0" />
|
||||
</dataarea>
|
||||
@ -240,6 +257,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2105" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="crystal mines ii (euro, usa).bin" size="131072" crc="aec474c8" sha1="3364bde38508c5c4fed5575295cc80c6f72edebe" />
|
||||
</dataarea>
|
||||
@ -252,6 +270,7 @@ Known undumped prototypes:
|
||||
<publisher>Songbird Productions</publisher>
|
||||
<info name="serial" value="CF2008" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="crystal mines ii - buried treasure.bin" size="262144" crc="122ec861" sha1="c0977ce9f22b0182b332af96290a36f0e7b8fbe6" />
|
||||
</dataarea>
|
||||
@ -263,6 +282,7 @@ Known undumped prototypes:
|
||||
<year>199?</year>
|
||||
<publisher>Atari</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="daemonsgate (usa) (prototype).bin" size="262144" crc="99729395" sha1="5a3a21eb5de37367d294e057f70a1f325bf23c4a" />
|
||||
</dataarea>
|
||||
@ -275,6 +295,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="L071" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="desert strike - return to the gulf (euro, usa).bin" size="262144" crc="b9ac1fe5" sha1="3149d8ba5661fd61dc94d518a0cb6d7b3a8f319f" />
|
||||
</dataarea>
|
||||
@ -287,6 +308,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2089" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="dinolympics (euro, usa).bin" size="262144" crc="50386cfa" sha1="0dad2286934c6a317407db066f00233c27f54bbe" />
|
||||
</dataarea>
|
||||
@ -299,6 +321,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2077" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="dirty larry - renegade cop (euro, usa).bin" size="262144" crc="d565fbb7" sha1="ca856dc880663d7f105ae5aa2ff160b9fc209f92" />
|
||||
</dataarea>
|
||||
@ -311,6 +334,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="L070" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="double dragon (euro, usa).bin" size="262144" crc="fbfc0f05" sha1="7fc3663bec878b138cfc51f14154823f9701c9e7" />
|
||||
</dataarea>
|
||||
@ -323,6 +347,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2087" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="dracula the undead (euro, usa).bin" size="262144" crc="33bb74c7" sha1="8f393f0fa8ce832e6298db72f539ce4b961700e2" />
|
||||
</dataarea>
|
||||
@ -335,6 +360,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2021" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="electrocop (euro, usa).bin" size="131072" crc="bd97116b" sha1="5bd6614bc98a882ec2f465278fe4f1ed6a4e972b" />
|
||||
</dataarea>
|
||||
@ -347,6 +373,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="LX106" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="european soccer challenge (euro, usa).bin" size="131072" crc="f83397f9" sha1="f1d0390a36055ef2b7cb5f7ce44f622a63d82e80" />
|
||||
</dataarea>
|
||||
@ -358,6 +385,7 @@ Known undumped prototypes:
|
||||
<year>199?</year>
|
||||
<publisher>NuFX</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="eye of the beholder (usa) (prototype).bin" size="131072" crc="6bceaa9c" sha1="65c0517a59e0e93bad91245ee8085b3483428707" />
|
||||
</dataarea>
|
||||
@ -369,6 +397,7 @@ Known undumped prototypes:
|
||||
<year>199?</year>
|
||||
<publisher>Telegames</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="fat bobby (euro, usa).bin" size="262144" crc="9034ee27" sha1="766ed1a28528535338e176559a145afaffacf3ef" />
|
||||
</dataarea>
|
||||
@ -381,6 +410,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="LX101" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="fidelity ultimate chess challenge, the (euro, usa).bin" size="131072" crc="7e4b5945" sha1="f6afa50f161fffe5975cf5688a9314b8039d940f" />
|
||||
</dataarea>
|
||||
@ -393,6 +423,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2023" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="gates of zendocon, the (euro, usa).bin" size="131072" crc="494cc568" sha1="4eb4d3eb29231b2e36d8ef6ede64a568f469c5fe" />
|
||||
</dataarea>
|
||||
@ -406,6 +437,7 @@ Known undumped prototypes:
|
||||
<info name="serial" value="PA2024" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="rotation" value="RIGHT" />
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="gauntlet - the third encounter (euro, usa).bin" size="131072" crc="7f0ec7ad" sha1="41d27f0717a93d05a9d3d1110f571f791d330f55" />
|
||||
</dataarea>
|
||||
@ -418,6 +450,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2106" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="gordo 106 - the mutated lab monkey (euro, usa).bin" size="262144" crc="d20a85fc" sha1="298163cf4355d0e8aaba264cd7dcd828b1fc6bec" />
|
||||
</dataarea>
|
||||
@ -430,6 +463,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2044" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="hard drivin' (euro, usa).bin" size="131072" crc="6df63834" sha1="6d33abd50d46f900e8762d6e64b51e647ea98b07" />
|
||||
</dataarea>
|
||||
@ -442,6 +476,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2052" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="hockey (euro, usa).bin" size="262144" crc="e8b45707" sha1="707af2b63c75b777ec519b63f0b8e86565356357" />
|
||||
</dataarea>
|
||||
@ -454,6 +489,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2073" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="hydra (euro, usa).bin" size="262144" crc="e3041c6c" sha1="fc0c7cabf3a2ee821f7441b71d19d52205f97721" />
|
||||
</dataarea>
|
||||
@ -466,6 +502,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2065" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="ishido - the way of stones (euro, usa).bin" size="131072" crc="5cf8bbf0" sha1="78c295af3a57b5bd7d7e1d13ab13ad67885c4e89" />
|
||||
</dataarea>
|
||||
@ -478,6 +515,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2085" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="2048"/>
|
||||
<dataarea name="rom" size="524288">
|
||||
<rom name="jimmy connors' tennis (euro, usa).bin" size="524288" crc="2455b6cf" sha1="d9c4220653b2dfbd6b26c0a0c81c40cb3108ee85" />
|
||||
</dataarea>
|
||||
@ -490,6 +528,7 @@ Known undumped prototypes:
|
||||
<publisher>Williams Entertainment</publisher>
|
||||
<info name="serial" value="PT5005" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="joust (euro, usa).bin" size="131072" crc="5dba792a" sha1="ead01f532bcaf535065dfd66b26d04b484d0066e" />
|
||||
</dataarea>
|
||||
@ -503,6 +542,7 @@ Known undumped prototypes:
|
||||
<info name="serial" value="PA2031" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="rotation" value="RIGHT" />
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="klax (euro, usa).bin" size="262144" crc="a53649f1" sha1="a1d2dc0771f4a30e539ab3261a21cc71adc71550" />
|
||||
</dataarea>
|
||||
@ -515,6 +555,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="L204" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="krazy ace - miniature golf (euro, usa).bin" size="262144" crc="bed5ba2b" sha1="20e9011c922f06d9c8823f15c71e005ac2268295" />
|
||||
</dataarea>
|
||||
@ -527,6 +568,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2076" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="kung food (euro, usa).bin" size="262144" crc="cd1bd405" sha1="ae1bd18b30dd9ae67472c4c532f4d65d23324555" />
|
||||
</dataarea>
|
||||
@ -539,6 +581,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2080" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="lemmings (euro, usa).bin" size="262144" crc="39b9b8cc" sha1="4d430b1aacf207a631f81b2089688b82267d0394" />
|
||||
</dataarea>
|
||||
@ -552,6 +595,7 @@ Known undumped prototypes:
|
||||
<info name="serial" value="CF2003" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="rotation" value="LEFT" />
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="lexis (euro, usa).bin" size="262144" crc="0271b6e9" sha1="b973cee4a58dbae5ab2d540b38db90aae78ba323" />
|
||||
</dataarea>
|
||||
@ -564,6 +608,7 @@ Known undumped prototypes:
|
||||
<publisher>Songbird Productions</publisher>
|
||||
<info name="serial" value="CF2009" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="loopz (usa) (prototype).bin" size="262144" crc="b1c25ef1" sha1="b43b0841a5d315d8e515ceaece29875ba6f9afbb" />
|
||||
</dataarea>
|
||||
@ -576,6 +621,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2061" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="lynx casino (euro, usa).bin" size="262144" crc="1091a268" sha1="4b82a9bc02330c9213c2bbd74d547d520c4e6fa3" />
|
||||
</dataarea>
|
||||
@ -588,6 +634,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2086" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="malibu bikini volleyball (euro, usa).bin" size="262144" crc="aba6da3d" sha1="9c3d8037d347c0ff23d941eff8b575a4f2f051da" />
|
||||
</dataarea>
|
||||
@ -599,6 +646,7 @@ Known undumped prototypes:
|
||||
<year>1993</year>
|
||||
<publisher>Digital Image</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="marlboro go (euro) (prototype).bin" size="262144" crc="c3fa0d4d" sha1="26b18b706359b093d0b1bbca4dba9cd2d73e0372" />
|
||||
</dataarea>
|
||||
@ -611,6 +659,7 @@ Known undumped prototypes:
|
||||
<publisher>Songbird Productions</publisher>
|
||||
<info name="serial" value="CF2010" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="Mega Pak 1.bin" size="262144" crc="ca7cf30b" sha1="c961b618021e37cf71104f4f7a04f5ea3e0ccb06" />
|
||||
</dataarea>
|
||||
@ -623,6 +672,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2057" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="ms. pac-man (euro, usa).bin" size="131072" crc="7de3783a" sha1="ff644034cd840f8c13b643c44ec2c685290e0326" />
|
||||
</dataarea>
|
||||
@ -636,6 +686,7 @@ Known undumped prototypes:
|
||||
<info name="serial" value="PA2045" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="rotation" value="LEFT" />
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="nfl football (euro, usa).bin" size="262144" crc="006fd398" sha1="caea445bddcf75bcbe13920718279220d1acb869" />
|
||||
</dataarea>
|
||||
@ -648,6 +699,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2039" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="ninja gaiden (euro, usa).bin" size="262144" crc="22d47d51" sha1="a40b5dabff9c2f6114fdbc587c72312704d7fabb" />
|
||||
</dataarea>
|
||||
@ -660,6 +712,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2092" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="2048"/>
|
||||
<dataarea name="rom" size="524288">
|
||||
<rom name="ninja gaiden iii - the ancient ship of doom (euro, usa).bin" size="524288" crc="f3e3f811" sha1="37861cc3025d9addbace8d07c8f65961cba29eaa" />
|
||||
</dataarea>
|
||||
@ -672,6 +725,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2059" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="pac-land (euro, usa).bin" size="131072" crc="aa50dd22" sha1="58b57835703e3145a54e1c0ada38c9218bf4cd3d" />
|
||||
</dataarea>
|
||||
@ -684,6 +738,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2041" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="paperboy (euro, usa).bin" size="131072" crc="4cdfbd57" sha1="537bae2c336dc9925f10505d4040965ca7434f5d" />
|
||||
</dataarea>
|
||||
@ -696,6 +751,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2055" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="pinball jam (euro, usa).bin" size="262144" crc="14d38ca7" sha1="d9f911dc35a6b70ba38569d47c96da25ffc7f40e" />
|
||||
</dataarea>
|
||||
@ -708,6 +764,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2070" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="2048"/>
|
||||
<dataarea name="rom" size="524288">
|
||||
<rom name="pit fighter - the ultimate competition (euro, usa).bin" size="524288" crc="2393135f" sha1="30f8c7acf41a988578768b251e88b636462752cb" />
|
||||
</dataarea>
|
||||
@ -720,6 +777,7 @@ Known undumped prototypes:
|
||||
<publisher>Songbird Productions</publisher>
|
||||
<info name="serial" value="CF2002" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="ponx.bin" size="262144" crc="341c88e2" sha1="3254f5c3d347d444dc1bf4cdb07523cc0241d979" />
|
||||
</dataarea>
|
||||
@ -732,6 +790,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2109" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="power factor (euro, usa).bin" size="262144" crc="99c42034" sha1="1ad5386f43f60d848a40ee1237e5bd153faea23f" />
|
||||
</dataarea>
|
||||
@ -744,6 +803,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="LX102" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="qix (euro, usa).bin" size="131072" crc="b9881423" sha1="30b8369ea396347d4847990691d880c313aacae7" />
|
||||
</dataarea>
|
||||
@ -756,6 +816,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="rotation" value="LEFT" />
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="raiden (usa) (v3.0).bin" size="262144" crc="bcd10c3a" sha1="df48f69a7257a40844812e5b0bda9efdf093b7f6" />
|
||||
</dataarea>
|
||||
@ -768,6 +829,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2022" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="rampage (euro, usa).bin" size="262144" crc="b10b7c8e" sha1="771dbf246386da37670324d34066671f3f43ac0e" />
|
||||
</dataarea>
|
||||
@ -780,6 +842,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2102" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="rampart (euro, usa).bin" size="262144" crc="139f301d" sha1="3c3a0729bb4ddecf5e5fd2d9ced4671d2e0e702e" />
|
||||
</dataarea>
|
||||
@ -791,6 +854,7 @@ Known undumped prototypes:
|
||||
<year>199?</year>
|
||||
<publisher>Atari</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="road riot 4wd (usa) (prototype).bin" size="262144" crc="69959a3b" sha1="63978dfd86782acc101266d7bab8677e32d7ea8f" />
|
||||
</dataarea>
|
||||
@ -803,6 +867,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2036" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="roadblasters (euro, usa).bin" size="262144" crc="6867e80c" sha1="20233381f12a48bc61b2c4b7a8f602a2c8ebc8ba" />
|
||||
</dataarea>
|
||||
@ -815,6 +880,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2035" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="robo-squash (euro, usa).bin" size="131072" crc="d1dff2b2" sha1="144e4aa67babc8f3e24c5547f8664c3c6cff8601" />
|
||||
</dataarea>
|
||||
@ -827,6 +893,7 @@ Known undumped prototypes:
|
||||
<publisher>Williams Entertainment</publisher>
|
||||
<info name="serial" value="PT5003" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="robotron 2084 (euro, usa).bin" size="131072" crc="7a6049b5" sha1="04048aa47c0ff99647608d4d1ccf48ba881a0f89" />
|
||||
</dataarea>
|
||||
@ -839,6 +906,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2043" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="rygar - legendary warrior (euro, usa).bin" size="262144" crc="67e5bdba" sha1="8743769af583af681fd1d96aadb533d26b1b510d" />
|
||||
</dataarea>
|
||||
@ -851,6 +919,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2060" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="s.t.u.n. runner (euro, usa).bin" size="262144" crc="8595c40b" sha1="aa570dbbf4682da3297286fc69617c3c9aca2f18" />
|
||||
</dataarea>
|
||||
@ -863,6 +932,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2048" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="scrapyard dog (euro, usa).bin" size="262144" crc="be166f3b" sha1="df57cd7f119fa6af8f9b24942f0f12314b301075" />
|
||||
</dataarea>
|
||||
@ -875,6 +945,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2081" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="shadow of the beast (euro, usa).bin" size="262144" crc="eb78baa3" sha1="8b891b5dafba71740294c8dc818717d3b00be3a5" />
|
||||
</dataarea>
|
||||
@ -887,6 +958,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2063" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="shanghai (euro, usa).bin" size="131072" crc="192bcd04" sha1="9e67e05545934a7d375597b0e8c469468c5748a4" />
|
||||
</dataarea>
|
||||
@ -899,6 +971,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2104" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="steel talons (euro, usa).bin" size="262144" crc="5b2308ed" sha1="773946365ecf3c862cfa21167750140e4b1adad2" />
|
||||
</dataarea>
|
||||
@ -911,6 +984,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2093" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="super asteroids, missile command (euro, usa).bin" size="131072" crc="2da7e2a8" sha1="d15c7382346cae6296e83ef494a8aec3adaf949c" />
|
||||
</dataarea>
|
||||
@ -923,6 +997,7 @@ Known undumped prototypes:
|
||||
<publisher>Telegames</publisher>
|
||||
<info name="serial" value="LX105" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="super off-road (euro, usa).bin" size="262144" crc="690caeb0" sha1="9bf10edfedde85467f159afb48d02f1ca43be8f4" />
|
||||
</dataarea>
|
||||
@ -935,6 +1010,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2100" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="super skweek (euro, usa).bin" size="262144" crc="dfa61571" sha1="d6c18bf5e625cbac7434ef0d600ad0da667f24cd" />
|
||||
</dataarea>
|
||||
@ -947,6 +1023,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2094" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="switchblade ii (euro, usa).bin" size="262144" crc="13657705" sha1="256d55e8e9478c53e340321c858df6710a9f69a6" />
|
||||
</dataarea>
|
||||
@ -959,6 +1036,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2029" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="todd's adventures in slime world (euro, usa).bin" size="131072" crc="ae267e29" sha1="2b9c665456d17726ea57fd06ce2754a14382dc99" />
|
||||
</dataarea>
|
||||
@ -971,6 +1049,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2066" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="toki (euro, usa).bin" size="262144" crc="156a4a4c" sha1="242fee76ea2ae263511df5d8bd3f7b0ddc81757d" />
|
||||
</dataarea>
|
||||
@ -983,6 +1062,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2038" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="tournament cyberball 2072 (euro, usa).bin" size="262144" crc="0590a9e3" sha1="e63cc54e34840a4e3c1aa5bbce4e406895e44534" />
|
||||
</dataarea>
|
||||
@ -995,6 +1075,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2047" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="turbo sub (euro, usa).bin" size="131072" crc="a4b924d6" sha1="1186b3216830c5bbeac6b39aab1039eef27f0785" />
|
||||
</dataarea>
|
||||
@ -1007,6 +1088,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2064" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="viking child (euro, usa).bin" size="262144" crc="8d56828b" sha1="47c32e4d816dde797b6bba2019f2e296bdad02dd" />
|
||||
</dataarea>
|
||||
@ -1019,6 +1101,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2032" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="warbirds (euro, usa).bin" size="131072" crc="b946ba49" sha1="2c376581ac20fb5de8538b51820e1f007cca8260" />
|
||||
</dataarea>
|
||||
@ -1031,6 +1114,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2037" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="world class soccer (euro, usa).bin" size="262144" crc="91233794" sha1="40100a0db681b4efca4a491c88bf76a19105336f" />
|
||||
</dataarea>
|
||||
@ -1043,6 +1127,7 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2026" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="xenophobe (euro, usa).bin" size="131072" crc="9bed736d" sha1="a1b4f7a4697310cafea1271bd4b41eeafae60ffa" />
|
||||
</dataarea>
|
||||
@ -1055,13 +1140,14 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2062" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="xybots (euro, usa).bin" size="262144" crc="89e2a595" sha1="5ff3c39a6919db6d2270bb22e80e7680550c47ba" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="yastuna1">
|
||||
<software name="yastuna1" supported="no"> <!-- Stops with a 'INSERT GAME' screen -->
|
||||
<description>Yastuna Vol.1 - The Alchemy of Cubes</description>
|
||||
<year>2008</year>
|
||||
<publisher>Fadest</publisher>
|
||||
@ -1072,7 +1158,7 @@ Known undumped prototypes:
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="yastuna2">
|
||||
<software name="yastuna2" supported="no"> <!-- Stops with a 'INSERT GAME' screen -->
|
||||
<description>Yastuna Vol.2 - The Space Incident</description>
|
||||
<year>2008</year>
|
||||
<publisher>Fadest</publisher>
|
||||
@ -1089,18 +1175,21 @@ Known undumped prototypes:
|
||||
<publisher>Atari</publisher>
|
||||
<info name="serial" value="PA2030" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="512"/>
|
||||
<dataarea name="rom" size="131072">
|
||||
<rom name="zarlor mercenary (euro, usa).bin" size="131072" crc="cb27199d" sha1="7005cdfa0a2e4a9611266ce50493cbb32351e069" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="alpineg" supported="no"> <!-- Needs granularity set as 0x400 instead as 0x800 like the driver expects for 512k cartridges. Also will need eeprom support -->
|
||||
<software name="alpineg" supported="no"> <!-- Need eeprom support -->
|
||||
<description>Alpine Games</description>
|
||||
<year>2004</year>
|
||||
<publisher><homebrew></publisher>
|
||||
<info name="developer" value="R. & J. Graf" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<feature name="audin_offset" value="262144"/> <!-- A18 pin is connected to AUDIN -->
|
||||
<dataarea name="rom" size="524288">
|
||||
<rom name="AlpineGames.bin" size="524288" crc="95a1ea09" sha1="fb71ad96f0730f88acd7d51eaa761e475a015d6c" />
|
||||
</dataarea>
|
||||
@ -1114,6 +1203,7 @@ Known undumped prototypes:
|
||||
<publisher><homebrew></publisher>
|
||||
<info name="developer" value="Harry Dodgson" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="conquest of zow (1996).bin" size="262144" crc="b02821fa" sha1="87b683653dfe76af02a1920582b6362ee11a3715" />
|
||||
</dataarea>
|
||||
@ -1125,6 +1215,7 @@ Known undumped prototypes:
|
||||
<year>1995</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="dragnet (1995).bin" size="262144" crc="5598a4c9" sha1="fc802b8b6a62312e6f68065881d0e4f23a967451" />
|
||||
</dataarea>
|
||||
@ -1136,6 +1227,7 @@ Known undumped prototypes:
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="262144">
|
||||
<rom name="lynx ii production test program v0.02 (usa) (prototype).bin" size="262144" crc="28ada019" sha1="c0d35fcfac44437cf3d6d56e6f8cea0dcb12a296" />
|
||||
</dataarea>
|
||||
@ -1148,6 +1240,7 @@ Known undumped prototypes:
|
||||
<publisher><homebrew></publisher>
|
||||
<info name="developer" value="Harry Dodgson" />
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="2048"/>
|
||||
<dataarea name="rom" size="524288">
|
||||
<rom name="othello.bin" size="524288" crc="d659adf8" sha1="5470950f9348c8edcab4f5063cf20d3252443ac0" />
|
||||
</dataarea>
|
||||
@ -1159,6 +1252,7 @@ Known undumped prototypes:
|
||||
<year>2016</year>
|
||||
<publisher>Luchs Soft</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="2048"/>
|
||||
<dataarea name="rom" size="524288">
|
||||
<rom name="weltenschlacht.lyx" size="524288" crc="a0c59271" sha1="dbba003684efe249b6f17a070b3b008b09c67d3f" />
|
||||
</dataarea>
|
||||
@ -1170,6 +1264,7 @@ Known undumped prototypes:
|
||||
<year>2009</year>
|
||||
<publisher>Super Fighter Team / Penguinet</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="2048"/>
|
||||
<dataarea name="rom" size="0x80000">
|
||||
<rom name="Zaku.bin" size="0x80000" crc="4ea845da" sha1="2723c29b4e00dd76402e9fc4dc50cb59b673b507" />
|
||||
</dataarea>
|
||||
@ -1181,6 +1276,7 @@ Known undumped prototypes:
|
||||
<year>2009</year>
|
||||
<publisher>Penguinet</publisher>
|
||||
<part name="cart" interface="lynx_cart">
|
||||
<feature name="granularity" value="1024"/>
|
||||
<dataarea name="rom" size="0x40000">
|
||||
<rom name="zakudemo.bin" size="0x40000" crc="b3747c71" sha1="530ea8c0a820746425017cbcc9f766531f5c6333" />
|
||||
</dataarea>
|
||||
|
@ -1565,3 +1565,15 @@ if (SOUNDS["UDA1344"]~=null) then
|
||||
MAME_DIR .. "src/devices/sound/uda1344.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/sound/lynx.h,SOUNDS["LYNX"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (SOUNDS["LYNX"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/sound/lynx.cpp",
|
||||
MAME_DIR .. "src/devices/sound/lynx.h",
|
||||
}
|
||||
end
|
||||
|
@ -298,6 +298,7 @@ SOUNDS["TT5665"] = true
|
||||
--SOUNDS["UDA1344"] = true
|
||||
SOUNDS["SWP30"] = true
|
||||
SOUNDS["XT446"] = true
|
||||
--SOUNDS["LYNX"] = true
|
||||
|
||||
--------------------------------------------------
|
||||
-- specify available video cores
|
||||
|
@ -325,6 +325,7 @@ SOUNDS["ROLANDPCM"] = true
|
||||
--SOUNDS["TT5665"] = true
|
||||
SOUNDS["RP2C33_SOUND"] = true
|
||||
SOUNDS["UDA1344"] = true
|
||||
SOUNDS["LYNX"] = true
|
||||
|
||||
--------------------------------------------------
|
||||
-- specify available video cores
|
||||
@ -1913,8 +1914,6 @@ files {
|
||||
MAME_DIR .. "src/mame/video/atarist.h",
|
||||
MAME_DIR .. "src/mame/drivers/lynx.cpp",
|
||||
MAME_DIR .. "src/mame/includes/lynx.h",
|
||||
MAME_DIR .. "src/mame/audio/lynx.cpp",
|
||||
MAME_DIR .. "src/mame/audio/lynx.h",
|
||||
MAME_DIR .. "src/mame/machine/lynx.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/pofo.cpp",
|
||||
MAME_DIR .. "src/mame/machine/pofo_kbd.cpp",
|
||||
|
@ -1,11 +1,15 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Peter Trauner
|
||||
/******************************************************************************
|
||||
|
||||
Atari Lynx sound hardware, Part of Mikey (Hayato in Lynx II)
|
||||
PeT mess@utanet.at 2000,2001
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "audio/lynx.h"
|
||||
#include "lynx.h"
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
/* accordingly to atari's reference manual
|
||||
@ -85,8 +89,8 @@ AUD_A_RIGHT EQU %00000001
|
||||
|
||||
|
||||
// device type definition
|
||||
DEFINE_DEVICE_TYPE(LYNX_SND, lynx_sound_device, "lynx_sound", "Mikey")
|
||||
DEFINE_DEVICE_TYPE(LYNX2_SND, lynx2_sound_device, "lynx2_sound", "Mikey (Lynx II)")
|
||||
DEFINE_DEVICE_TYPE(LYNX_SND, lynx_sound_device, "lynx_sound", "Atari Mikey (Sound)")
|
||||
DEFINE_DEVICE_TYPE(LYNX2_SND, lynx2_sound_device, "lynx2_sound", "Atari Hayato (Sound)")
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
@ -172,8 +176,7 @@ void lynx_sound_device::init()
|
||||
|
||||
void lynx_sound_device::device_start()
|
||||
{
|
||||
m_mixer_channel = stream_alloc(0, 1, machine().sample_rate());
|
||||
m_usec_per_sample = 1000000 / machine().sample_rate();
|
||||
m_mixer_channel = stream_alloc(0, 1, clock() / 16);
|
||||
m_timer_delegate.resolve();
|
||||
init();
|
||||
register_save();
|
||||
@ -182,8 +185,7 @@ void lynx_sound_device::device_start()
|
||||
|
||||
void lynx2_sound_device::device_start()
|
||||
{
|
||||
m_mixer_channel = stream_alloc(0, 2, machine().sample_rate());
|
||||
m_usec_per_sample = 1000000 / machine().sample_rate();
|
||||
m_mixer_channel = stream_alloc(0, 2, clock() / 16);
|
||||
m_timer_delegate.resolve();
|
||||
init();
|
||||
register_save();
|
||||
@ -201,6 +203,15 @@ void lynx_sound_device::device_reset()
|
||||
}
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_clock_changed - called if the clock
|
||||
// changes
|
||||
//-------------------------------------------------
|
||||
|
||||
void lynx_sound_device::device_clock_changed()
|
||||
{
|
||||
m_mixer_channel->set_sample_rate(clock() / 16);
|
||||
}
|
||||
|
||||
void lynx_sound_device::reset_channel(LYNX_AUDIO *channel)
|
||||
{
|
||||
@ -223,7 +234,7 @@ void lynx_sound_device::reset_channel(LYNX_AUDIO *channel)
|
||||
void lynx_sound_device::count_down(int nr)
|
||||
{
|
||||
LYNX_AUDIO *channel = &m_audio[nr];
|
||||
if (channel->reg.control1 & 8 && (channel->reg.control1 & 7) != 7)
|
||||
if ((channel->reg.count_en()) && (!(channel->reg.linked())))
|
||||
return;
|
||||
if (nr == 0)
|
||||
m_mixer_channel->update();
|
||||
@ -233,25 +244,25 @@ void lynx_sound_device::count_down(int nr)
|
||||
|
||||
void lynx_sound_device::shift(int chan_nr)
|
||||
{
|
||||
int16_t out_temp;
|
||||
s16 out_temp;
|
||||
LYNX_AUDIO *channel;
|
||||
|
||||
assert(chan_nr < 4);
|
||||
|
||||
channel = &m_audio[chan_nr];
|
||||
//channel->shifter = ((channel->shifter<<1)&0xffe) | (m_shift_xor[ channel->shifter & channel->mask ]&1);
|
||||
//channel->shifter = ((channel->shifter << 1) & 0xffe) | (m_shift_xor[channel->shifter & channel->mask] & 1);
|
||||
|
||||
// alternative method (functionally the same as above)
|
||||
uint8_t xor_out = 0;
|
||||
u8 xor_out = 1; // output of xor is inverted
|
||||
for (int bit = 0; bit < 12; bit++)
|
||||
{
|
||||
if ((channel->mask >> bit) & 1)
|
||||
xor_out ^= (channel->shifter >> bit) & 1;
|
||||
if (BIT(channel->mask, bit))
|
||||
xor_out ^= BIT(channel->shifter, bit);
|
||||
}
|
||||
channel->shifter = ((channel->shifter << 1) & 0xffe) | (xor_out ^ 1); // output of xor is inverted
|
||||
channel->shifter = ((channel->shifter << 1) & 0xffe) | xor_out;
|
||||
|
||||
|
||||
if (channel->reg.control1 & 0x20) // integrate mode enabled
|
||||
if (channel->reg.integrate_mode()) // integrate mode enabled
|
||||
{
|
||||
if (channel->shifter & 1)
|
||||
out_temp = channel->reg.output + channel->reg.volume;
|
||||
@ -259,9 +270,7 @@ void lynx_sound_device::shift(int chan_nr)
|
||||
out_temp = channel->reg.output - channel->reg.volume;
|
||||
|
||||
// clipping
|
||||
if (out_temp > 127) out_temp = 127;
|
||||
if (out_temp < -128) out_temp = -128;
|
||||
channel->reg.output = (int16_t)out_temp;
|
||||
channel->reg.output = std::clamp<s16>(out_temp, -128, 127);
|
||||
}
|
||||
|
||||
switch (chan_nr)
|
||||
@ -284,22 +293,22 @@ void lynx_sound_device::execute(int chan_nr)
|
||||
|
||||
channel = &m_audio[chan_nr];
|
||||
|
||||
if (channel->reg.control1 & 8) // count enable
|
||||
if (channel->reg.count_en()) // count enable
|
||||
{
|
||||
channel->ticks += m_usec_per_sample;
|
||||
if ((channel->reg.control1 & 7) == 7) // link
|
||||
channel->ticks++;
|
||||
if (channel->reg.linked()) // link
|
||||
{
|
||||
if (channel->count < 0) // counter finished
|
||||
{
|
||||
//channel->count+=channel->reg.counter; // reload (wrong?)
|
||||
if (channel->reg.control1 & 0x10)
|
||||
if (channel->reg.reload_en())
|
||||
channel->count = channel->reg.bakup;
|
||||
shift(chan_nr);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int t = 1 << (channel->reg.control1 & 7); // microseconds per count
|
||||
const int t = 1 << (channel->reg.timer_clock()); // microseconds per count
|
||||
for (;;)
|
||||
{
|
||||
for (; (channel->ticks >= t) && (channel->count >= 0); channel->ticks -= t) // at least one sampled worth of time left, timer not expired
|
||||
@ -311,7 +320,7 @@ void lynx_sound_device::execute(int chan_nr)
|
||||
if (channel->count < 0)
|
||||
{
|
||||
shift(chan_nr);
|
||||
if (channel->reg.control1 & 0x10)
|
||||
if (channel->reg.reload_en())
|
||||
channel->count = channel->reg.bakup;
|
||||
else
|
||||
break;
|
||||
@ -319,10 +328,9 @@ void lynx_sound_device::execute(int chan_nr)
|
||||
}
|
||||
}
|
||||
|
||||
if (!(channel->reg.control1 & 0x20)) // normal mode
|
||||
{
|
||||
channel->reg.output = (channel->shifter & 1) ? channel->reg.volume : -channel->reg.volume;
|
||||
}
|
||||
if (!(channel->reg.integrate_mode())) // normal mode
|
||||
channel->reg.output = BIT(channel->shifter, 0) ? channel->reg.volume : -channel->reg.volume;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -331,9 +339,9 @@ void lynx_sound_device::execute(int chan_nr)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t lynx_sound_device::read(offs_t offset)
|
||||
u8 lynx_sound_device::read(offs_t offset)
|
||||
{
|
||||
uint8_t value = 0;
|
||||
u8 value = 0;
|
||||
LYNX_AUDIO *channel = &m_audio[(offset >> 3) & 3];
|
||||
|
||||
m_mixer_channel->update();
|
||||
@ -363,7 +371,7 @@ uint8_t lynx_sound_device::read(offs_t offset)
|
||||
break;
|
||||
case 6:
|
||||
//current timer value
|
||||
if (channel->count >=0)
|
||||
if (channel->count >= 0)
|
||||
value = channel->count;
|
||||
else
|
||||
value = 0;
|
||||
@ -394,7 +402,7 @@ uint8_t lynx_sound_device::read(offs_t offset)
|
||||
return value;
|
||||
}
|
||||
|
||||
void lynx_sound_device::write(offs_t offset, uint8_t data)
|
||||
void lynx_sound_device::write(offs_t offset, u8 data)
|
||||
{
|
||||
//logerror("audio write %.2x %.2x\n", offset, data);
|
||||
LYNX_AUDIO *channel = &m_audio[(offset >> 3) & 3];
|
||||
@ -414,7 +422,7 @@ void lynx_sound_device::write(offs_t offset, uint8_t data)
|
||||
case 1:
|
||||
channel->reg.feedback = data;
|
||||
channel->mask &= 0x80;
|
||||
channel->mask |= (data & 0x3f) | ((data & 0xc0)<<4);
|
||||
channel->mask |= (data & 0x3f) | ((data & 0xc0) << 4);
|
||||
break;
|
||||
// Output value
|
||||
case 2:
|
||||
@ -433,17 +441,17 @@ void lynx_sound_device::write(offs_t offset, uint8_t data)
|
||||
// Audio control bits
|
||||
case 5:
|
||||
channel->mask &= ~0x80;
|
||||
channel->mask |= (data&0x80);
|
||||
channel->mask |= (data & 0x80);
|
||||
channel->reg.control1 = data;
|
||||
break;
|
||||
// Current count
|
||||
case 6:
|
||||
channel->count=data;
|
||||
channel->count = data;
|
||||
break;
|
||||
// Upper 4 bits of shift register and audio status bits
|
||||
case 7:
|
||||
channel->shifter&=0xff;
|
||||
channel->shifter|=(data&0xf0)<<4;
|
||||
channel->shifter &= 0xff;
|
||||
channel->shifter |= (data & 0xf0) << 4;
|
||||
channel->reg.control2 = data;
|
||||
break;
|
||||
}
|
||||
@ -453,7 +461,7 @@ void lynx_sound_device::write(offs_t offset, uint8_t data)
|
||||
switch (offset) // Stereo Registers
|
||||
{
|
||||
case 0x40: case 0x41: case 0x42: case 0x43:
|
||||
m_audio[offset&3].attenuation = data;
|
||||
m_audio[offset & 3].attenuation = data;
|
||||
break;
|
||||
case 0x44:
|
||||
m_attenuation_enable = data;
|
||||
@ -472,7 +480,6 @@ void lynx_sound_device::write(offs_t offset, uint8_t data)
|
||||
|
||||
void lynx_sound_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
int v;
|
||||
auto &buffer = outputs[0];
|
||||
|
||||
for (int i = 0; i < buffer.samples(); i++)
|
||||
@ -481,8 +488,7 @@ void lynx_sound_device::sound_stream_update(sound_stream &stream, std::vector<re
|
||||
for (int channel = 0; channel < LYNX_AUDIO_CHANNELS; channel++)
|
||||
{
|
||||
execute(channel);
|
||||
v = m_audio[channel].reg.output;
|
||||
result += v * 15; // where does the *15 come from?
|
||||
result += m_audio[channel].reg.output * 15; // where does the *15 come from?
|
||||
}
|
||||
buffer.put_int(i, result, 32768);
|
||||
}
|
||||
@ -494,9 +500,8 @@ void lynx_sound_device::sound_stream_update(sound_stream &stream, std::vector<re
|
||||
|
||||
void lynx2_sound_device::sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs)
|
||||
{
|
||||
auto &left=outputs[0];
|
||||
auto &right=outputs[1];
|
||||
int v;
|
||||
auto &left = outputs[0];
|
||||
auto &right = outputs[1];
|
||||
|
||||
for (int i = 0; i < left.samples(); i++)
|
||||
{
|
||||
@ -505,7 +510,7 @@ void lynx2_sound_device::sound_stream_update(sound_stream &stream, std::vector<r
|
||||
for (int channel = 0; channel < LYNX_AUDIO_CHANNELS; channel++)
|
||||
{
|
||||
execute(channel);
|
||||
v = m_audio[channel].reg.output;
|
||||
int v = m_audio[channel].reg.output;
|
||||
if (!(m_master_enable & (0x10 << channel)))
|
||||
{
|
||||
if (m_attenuation_enable & (0x10 << channel))
|
@ -1,7 +1,7 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Peter Trauner
|
||||
#ifndef MAME_AUDIO_LYNX_H
|
||||
#define MAME_AUDIO_LYNX_H
|
||||
#ifndef MAME_SOUND_LYNX_H
|
||||
#define MAME_SOUND_LYNX_H
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -13,36 +13,47 @@ public:
|
||||
|
||||
lynx_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
uint8_t read(offs_t offset);
|
||||
void write(offs_t offset, uint8_t data);
|
||||
u8 read(offs_t offset);
|
||||
void write(offs_t offset, u8 data);
|
||||
void count_down(int nr);
|
||||
template <typename... T> void set_timer_delegate(T &&... args) { m_timer_delegate.set(std::forward<T>(args)...); }
|
||||
|
||||
protected:
|
||||
struct LYNX_AUDIO {
|
||||
struct {
|
||||
int8_t volume;
|
||||
uint8_t feedback;
|
||||
int8_t output;
|
||||
uint8_t shifter;
|
||||
uint8_t bakup;
|
||||
uint8_t control1;
|
||||
uint8_t counter;
|
||||
uint8_t control2;
|
||||
//bool reset_done() const { return BIT(control1, 6); } // Reset timer done flag (not implemented)
|
||||
bool integrate_mode() const { return BIT(control1, 5); } // Integrate mode
|
||||
bool reload_en() const { return BIT(control1, 4); } // Reload enable
|
||||
bool count_en() const { return BIT(control1, 3); } // Count enable
|
||||
u8 timer_clock() const { return BIT(control1, 0, 3); } // Timer clock
|
||||
bool linked() const { return timer_clock() == 0b111; } // Linked timer?
|
||||
|
||||
//bool last_clock() const { return BIT(control2, 2); } // Last clock (not implemented)
|
||||
//bool borrow_in() const { return BIT(control2, 1); } // Borrow in (not implemented)
|
||||
//bool borrow_out() const { return BIT(control2, 0); } // Borrow out (not implemented)
|
||||
|
||||
s8 volume = 0;
|
||||
u8 feedback = 0;
|
||||
s8 output = 0;
|
||||
u8 shifter = 0;
|
||||
u8 bakup = 0;
|
||||
u8 control1 = 0;
|
||||
u8 counter = 0;
|
||||
u8 control2 = 0;
|
||||
} reg;
|
||||
uint8_t attenuation;
|
||||
uint16_t mask; // 12-bit
|
||||
uint16_t shifter; // 12-bit
|
||||
float ticks;
|
||||
int count;
|
||||
u8 attenuation = 0;
|
||||
u16 mask = 0; // 12-bit
|
||||
u16 shifter = 0; // 12-bit
|
||||
s16 ticks = 0;
|
||||
s16 count = 0;
|
||||
};
|
||||
|
||||
lynx_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
virtual void device_reset() override;
|
||||
virtual void device_clock_changed() override;
|
||||
|
||||
// sound stream update overrides
|
||||
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
|
||||
@ -56,11 +67,10 @@ protected:
|
||||
sound_stream *m_mixer_channel;
|
||||
timer_delegate m_timer_delegate; // this calls lynx_timer_count_down from the driver state
|
||||
|
||||
float m_usec_per_sample;
|
||||
std::unique_ptr<int[]> m_shift_mask;
|
||||
std::unique_ptr<int[]> m_shift_xor;
|
||||
uint8_t m_attenuation_enable;
|
||||
uint8_t m_master_enable;
|
||||
u8 m_attenuation_enable = 0;
|
||||
u8 m_master_enable = 0;
|
||||
LYNX_AUDIO m_audio[4];
|
||||
};
|
||||
|
||||
@ -82,4 +92,4 @@ protected:
|
||||
DECLARE_DEVICE_TYPE(LYNX_SND, lynx_sound_device)
|
||||
DECLARE_DEVICE_TYPE(LYNX2_SND, lynx2_sound_device)
|
||||
|
||||
#endif // MAME_AUDIO_LYNX_H
|
||||
#endif // MAME_SOUND_LYNX_H
|
@ -1,16 +1,23 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Peter Trauner
|
||||
/******************************************************************************
|
||||
|
||||
Atari Lynx
|
||||
PeT peter.trauner@utanet.at 2000,2001
|
||||
|
||||
info found in bastian schick's bll
|
||||
and in cc65 for lynx
|
||||
|
||||
TODO:
|
||||
- ComLynx emulation is missing/imperfect
|
||||
- Verify timings from real hardware
|
||||
- EEPROM Support in some homebrew cartridges?
|
||||
- Lynx II support, needs internal ROM dump
|
||||
|
||||
******************************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/lynx.h"
|
||||
#include "audio/lynx.h"
|
||||
|
||||
#include "cpu/m6502/m65sc02.h"
|
||||
#include "softlist.h"
|
||||
@ -18,27 +25,19 @@
|
||||
|
||||
#include "lynx.lh"
|
||||
|
||||
void lynx_state::lynx_mem(address_map &map)
|
||||
void lynx_state::cpu_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xfbff).ram().share("mem_0000");
|
||||
map(0xfc00, 0xfcff).m(m_bank_fc00, FUNC(address_map_bank_device::amap8));
|
||||
map(0xfd00, 0xfdff).m(m_bank_fd00, FUNC(address_map_bank_device::amap8));
|
||||
map(0xfe00, 0xfff7).bankr("bank_fe00").writeonly().share("mem_fe00");
|
||||
map(0xfff8, 0xfff8).ram();
|
||||
map(0xfff9, 0xfff9).rw(FUNC(lynx_state::lynx_memory_config_r), FUNC(lynx_state::lynx_memory_config_w));
|
||||
map(0xfffa, 0xffff).bankr("bank_fffa").writeonly().share("mem_fffa");
|
||||
}
|
||||
|
||||
void lynx_state::lynx_fc00_mem(address_map &map)
|
||||
{
|
||||
map(0x000, 0x0ff).rw(FUNC(lynx_state::suzy_read), FUNC(lynx_state::suzy_write));
|
||||
map(0x100, 0x1ff).ram().share("mem_fc00");
|
||||
}
|
||||
|
||||
void lynx_state::lynx_fd00_mem(address_map &map)
|
||||
{
|
||||
map(0x000, 0x0ff).rw(FUNC(lynx_state::mikey_read), FUNC(lynx_state::mikey_write));
|
||||
map(0x100, 0x1ff).ram().share("mem_fd00");
|
||||
map(0x0000, 0xffff).ram().share(m_dram);
|
||||
map(0xfc00, 0xfcff).view(m_suzy_view);
|
||||
m_suzy_view[0](0xfc00, 0xfcff).rw(FUNC(lynx_state::suzy_read), FUNC(lynx_state::suzy_write));
|
||||
map(0xfd00, 0xfdff).view(m_mikey_view);
|
||||
m_mikey_view[0](0xfd00, 0xfdff).rw(FUNC(lynx_state::mikey_read), FUNC(lynx_state::mikey_write));
|
||||
map(0xfe00, 0xffff).view(m_rom_view);
|
||||
m_rom_view[0](0xfe00, 0xfff7).rom().region("maincpu", 0x0000);
|
||||
map(0xfff8, 0xfff8).ram(); // Reserved for future hardware (RAM)
|
||||
map(0xfff9, 0xfff9).rw(FUNC(lynx_state::memory_config_r), FUNC(lynx_state::memory_config_w));
|
||||
map(0xfff8, 0xffff).view(m_vector_view);
|
||||
m_vector_view[0](0xfffa, 0xffff).rom().region("maincpu", 0x01fa);
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( lynx )
|
||||
@ -54,6 +53,8 @@ static INPUT_PORTS_START( lynx )
|
||||
|
||||
PORT_START("PAUSE")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME(DEF_STR(Pause)) PORT_CODE(KEYCODE_3)
|
||||
//PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) CART0 Strobe
|
||||
//PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) CART1 Strobe
|
||||
// power on and power off buttons
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -62,34 +63,31 @@ void lynx_state::video_start()
|
||||
m_screen->register_screen_bitmap(m_bitmap);
|
||||
}
|
||||
|
||||
uint32_t lynx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
u32 lynx_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
copybitmap(bitmap, m_bitmap, 0, 0, 0, 0, cliprect);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// callback for Mikey call of shift(3) which shall act on the lynx_timer_count_down
|
||||
// callback for Mikey call of shift(3) which shall act on the timer_count_down
|
||||
void lynx_state::sound_cb()
|
||||
{
|
||||
lynx_timer_count_down(1);
|
||||
timer_count_down(1);
|
||||
}
|
||||
|
||||
void lynx_state::lynx(machine_config &config)
|
||||
{
|
||||
/* basic machine hardware */
|
||||
M65SC02(config, m_maincpu, 4000000); /* vti core, integrated in vlsi, stz, but not bbr bbs */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &lynx_state::lynx_mem);
|
||||
M65SC02(config, m_maincpu, XTAL(16'000'000) / 4); /* vti core, integrated in vlsi, stz, but not bbr bbs */
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &lynx_state::cpu_map);
|
||||
config.set_maximum_quantum(attotime::from_hz(60));
|
||||
|
||||
ADDRESS_MAP_BANK(config, "bank_fc00").set_map(&lynx_state::lynx_fc00_mem).set_options(ENDIANNESS_LITTLE, 8, 9, 0x100);
|
||||
ADDRESS_MAP_BANK(config, "bank_fd00").set_map(&lynx_state::lynx_fd00_mem).set_options(ENDIANNESS_LITTLE, 8, 9, 0x100);
|
||||
|
||||
/* video hardware */
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_LCD);
|
||||
m_screen->set_refresh_hz(30);
|
||||
m_screen->set_refresh_hz(XTAL(16'000'000) / 16 / (158 + 1) / (104 + 1)); // default config from machine_reset(), actually variable
|
||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
|
||||
m_screen->set_screen_update(FUNC(lynx_state::screen_update));
|
||||
m_screen->set_size(160, 102);
|
||||
m_screen->set_size(160, 105); // 102 visible scanline + 3 blank scanline, horizontal unknown/unverified, variable?
|
||||
m_screen->set_visarea(0, 160-1, 0, 102-1);
|
||||
config.set_default_layout(layout_lynx);
|
||||
|
||||
@ -97,7 +95,7 @@ void lynx_state::lynx(machine_config &config)
|
||||
|
||||
/* sound hardware */
|
||||
SPEAKER(config, "mono").front_center();
|
||||
LYNX_SND(config, m_sound, 0);
|
||||
LYNX_SND(config, m_sound, XTAL(16'000'000));
|
||||
m_sound->set_timer_delegate(FUNC(lynx_state::sound_cb));
|
||||
m_sound->add_route(ALL_OUTPUTS, "mono", 0.50);
|
||||
|
||||
@ -112,6 +110,7 @@ void lynx_state::lynx(machine_config &config)
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("lynx");
|
||||
}
|
||||
|
||||
// Lynx II has Hayato replaces Mikey, Compatible but supports stereo
|
||||
#if 0
|
||||
void lynx_state::lynx2(machine_config &config)
|
||||
{
|
||||
@ -121,8 +120,7 @@ void lynx_state::lynx2(machine_config &config)
|
||||
config.device_remove("mono");
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
config.device_remove("lynx");
|
||||
LYNX2_SND(config.replace(), m_sound, 0);
|
||||
LYNX2_SND(config.replace(), m_sound, XTAL(16'000'000));
|
||||
m_sound->set_timer_delegate(FUNC(lynx_state::sound_cb));
|
||||
m_sound->add_route(0, "lspeaker", 0.50);
|
||||
m_sound->add_route(1, "rspeaker", 0.50);
|
||||
@ -141,16 +139,12 @@ ROM_START(lynx)
|
||||
ROMX_LOAD("lynx.bin", 0x00000, 0x200, BAD_DUMP CRC(e1ffecb6) SHA1(de60f2263851bbe10e5801ef8f6c357a4bc077e6), ROM_BIOS(0))
|
||||
ROM_SYSTEM_BIOS( 1, "a", "alternate rom save" )
|
||||
ROMX_LOAD("lynxa.bin", 0x00000, 0x200, BAD_DUMP CRC(0d973c9d) SHA1(e4ed47fae31693e016b081c6bda48da5b70d7ccb), ROM_BIOS(1))
|
||||
|
||||
ROM_REGION(0x100,"gfx1", ROMREGION_ERASE00)
|
||||
ROM_END
|
||||
|
||||
#if 0
|
||||
ROM_START(lynx2)
|
||||
ROM_REGION(0x200,"maincpu", 0)
|
||||
ROM_LOAD("lynx2.bin", 0, 0x200, NO_DUMP)
|
||||
|
||||
ROM_REGION(0x100,"gfx1", ROMREGION_ERASE00)
|
||||
ROM_END
|
||||
#endif
|
||||
|
||||
@ -158,9 +152,9 @@ ROM_END
|
||||
QUICKLOAD_LOAD_MEMBER(lynx_state::quickload_cb)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
std::vector<uint8_t> data;
|
||||
uint8_t *rom = memregion("maincpu")->base();
|
||||
uint8_t header[10]; // 80 08 dw Start dw Len B S 9 3
|
||||
std::vector<u8> data;
|
||||
u8 *rom = memregion("maincpu")->base();
|
||||
u8 header[10]; // 80 08 dw Start dw Len B S 9 3
|
||||
uint16_t start, length;
|
||||
int i;
|
||||
|
||||
@ -168,7 +162,7 @@ QUICKLOAD_LOAD_MEMBER(lynx_state::quickload_cb)
|
||||
return image_init_result::FAIL;
|
||||
|
||||
/* Check the image */
|
||||
if (lynx_verify_cart((char*)header, LYNX_QUICKLOAD) != image_verify_result::PASS)
|
||||
if (verify_cart((char*)header, LYNX_QUICKLOAD) != image_verify_result::PASS)
|
||||
{
|
||||
image.seterror(image_error::INVALIDIMAGE, "Not a valid Lynx file");
|
||||
return image_init_result::FAIL;
|
||||
|
@ -1,10 +1,10 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Peter Trauner
|
||||
/*****************************************************************************
|
||||
*
|
||||
* includes/lynx.h
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
Atari Lynx
|
||||
|
||||
******************************************************************************/
|
||||
#ifndef MAME_INCLUDES_LYNX_H
|
||||
#define MAME_INCLUDES_LYNX_H
|
||||
|
||||
@ -12,9 +12,8 @@
|
||||
|
||||
#include "emupal.h"
|
||||
#include "screen.h"
|
||||
#include "audio/lynx.h"
|
||||
#include "sound/lynx.h"
|
||||
#include "imagedev/snapquik.h"
|
||||
#include "machine/bankdev.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
@ -29,98 +28,188 @@ class lynx_state : public driver_device
|
||||
public:
|
||||
lynx_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_mem_0000(*this, "mem_0000"),
|
||||
m_mem_fc00(*this, "mem_fc00"),
|
||||
m_mem_fd00(*this, "mem_fd00"),
|
||||
m_mem_fe00(*this, "mem_fe00"),
|
||||
m_mem_fffa(*this, "mem_fffa"),
|
||||
m_dram(*this, "dram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_sound(*this, "custom"),
|
||||
m_cart(*this, "cartslot"),
|
||||
m_palette(*this, "palette"),
|
||||
m_screen(*this, "screen"),
|
||||
m_bank_fc00(*this, "bank_fc00"),
|
||||
m_bank_fd00(*this, "bank_fd00"),
|
||||
m_bank_fe00(*this, "bank_fe00"),
|
||||
m_bank_fffa(*this, "bank_fffa")
|
||||
m_suzy_view(*this, "suzy_view"),
|
||||
m_mikey_view(*this, "mikey_view"),
|
||||
m_rom_view(*this, "rom_view"),
|
||||
m_vector_view(*this, "vector_view"),
|
||||
m_joy_io(*this, "JOY"),
|
||||
m_pause_io(*this, "PAUSE")
|
||||
{ }
|
||||
|
||||
void lynx(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
virtual void device_post_load() override;
|
||||
|
||||
private:
|
||||
struct BLITTER
|
||||
{
|
||||
// 0xfc80 SPRCTL0 Sprite control bits 0
|
||||
u8 BPP() const { return BIT(spr_ctl0, 6, 2); } // Bit per pixel - 1
|
||||
bool HFLIP() const { return BIT(spr_ctl0, 5); } // Horizontal flip
|
||||
bool VFLIP() const { return BIT(spr_ctl0, 4); } // Vertical flip
|
||||
u8 SPRITE_TYPE() const { return BIT(spr_ctl0, 0, 3); } // Sprite type
|
||||
|
||||
// 0xfc81 SPRCTL1 Sprite control bits 1
|
||||
bool RLE() const { return BIT(spr_ctl1, 7); } // Normal(1) or RLE(0) sprite
|
||||
//bool ALGO3() const { return BIT(spr_ctl1, 6); } // Size algorithm, Adder(0, Algo4), Shifter(1, algo3) (not implemented)
|
||||
u8 RELOAD_SCALE() const { return BIT(spr_ctl1, 4, 2); } // Reload scale factors
|
||||
bool REUSE_PALETTE() const { return BIT(spr_ctl1, 3); } // Reload(0) or Reuse(1) palette
|
||||
bool SKIP_SPRITE() const { return BIT(spr_ctl1, 2); } // Skip this sprite
|
||||
u8 DRAW_ORIGIN() const { return BIT(spr_ctl1, 0, 2); } // Start draw origin
|
||||
//bool DRAW_UP() const { return BIT(spr_ctl1, 1); } // Start drawing up(1) or down(0)
|
||||
//bool DRAW_LEFT() const { return BIT(spr_ctl1, 0); } // Start drawing left(1) or right(0)
|
||||
|
||||
// 0xfc82 SPRCOLL Sprite collision number
|
||||
bool SPRITE_COLLEN() const { return BIT(spr_coll, 5); } // Sprite collide(0) or Don't collide(1) flag
|
||||
u8 SPRITE_COLNUM() const { return BIT(spr_coll, 0, 4); } // Sprite collision number
|
||||
|
||||
bool SPRITE_COLLIDE() const { return sprite_collide && (!(no_collide)); } // collision enabled?
|
||||
|
||||
// global
|
||||
uint16_t screen;
|
||||
uint16_t colbuf;
|
||||
uint16_t colpos; // byte where value of collision is written
|
||||
int16_t xoff, yoff;
|
||||
u16 screen = 0;
|
||||
u16 colbuf = 0;
|
||||
u16 colpos = 0; // byte where value of collision is written
|
||||
s16 xoff = 0;
|
||||
s16 yoff = 0;
|
||||
// in command
|
||||
int mode;
|
||||
uint8_t spr_coll;
|
||||
uint8_t spritenr;
|
||||
int16_t x_pos,y_pos;
|
||||
uint16_t width, height; // uint16 important for blue lightning
|
||||
int16_t tilt_accumulator;
|
||||
uint16_t height_accumulator, width_accumulator;
|
||||
uint16_t width_offset, height_offset;
|
||||
int16_t stretch, tilt;
|
||||
uint8_t color[16]; // or stored
|
||||
uint16_t bitmap;
|
||||
int use_rle;
|
||||
int line_color;
|
||||
u8 mode = 0;
|
||||
u8 spr_coll = 0;
|
||||
u8 spritenr = 0;
|
||||
s16 x_pos = 0;
|
||||
s16 y_pos = 0;
|
||||
u16 width = 0;
|
||||
u16 height = 0; // uint16 important for blue lightning
|
||||
s16 tilt_accumulator = 0;
|
||||
u16 height_accumulator = 0;
|
||||
u16 width_accumulator = 0;
|
||||
u16 width_offset = 0;
|
||||
u16 height_offset = 0;
|
||||
s16 stretch = 0;
|
||||
s16 tilt = 0;
|
||||
u8 color[16] = {0}; // or stored
|
||||
u16 bitmap = 0;
|
||||
bool use_rle = false;
|
||||
u8 line_color = 0;
|
||||
|
||||
uint8_t spr_ctl0;
|
||||
uint8_t spr_ctl1;
|
||||
uint16_t scb;
|
||||
uint16_t scb_next;
|
||||
uint8_t sprite_collide;
|
||||
u8 spr_ctl0 = 0;
|
||||
u8 spr_ctl1 = 0;
|
||||
u16 scb = 0;
|
||||
u16 scb_next = 0;
|
||||
bool sprite_collide = false;
|
||||
|
||||
int everon;
|
||||
uint8_t fred;
|
||||
int memory_accesses;
|
||||
attotime time;
|
||||
bool everon = false;
|
||||
u8 fred = 0;
|
||||
u32 memory_accesses = 0;
|
||||
//attotime time;
|
||||
|
||||
int no_collide;
|
||||
int vstretch;
|
||||
int lefthanded;
|
||||
int busy;
|
||||
bool no_collide = false;
|
||||
bool vstretch = false;
|
||||
bool lefthanded = false;
|
||||
bool busy = false;
|
||||
};
|
||||
|
||||
struct UART
|
||||
{
|
||||
uint8_t serctl;
|
||||
uint8_t data_received, data_to_send, buffer;
|
||||
int received;
|
||||
int sending;
|
||||
int buffer_loaded;
|
||||
// 0xfd8c SERCTL Serial control register (Write)
|
||||
bool TXINTEN() const { return BIT(serctl, 7); } // Transmit interrupt enable
|
||||
bool RXINTEN() const { return BIT(serctl, 6); } // Receive interrupt enable
|
||||
//bool PAREN() const { return BIT(serctl, 4); } // Xmit parity bit enable (not implemented)
|
||||
//bool RESETERR() const { return BIT(serctl, 3); } // Reset all errors (not implemented)
|
||||
//bool TXOPEN() const { return BIT(serctl, 2); } // Open collector driver(1) or TTL driver(0) (not implemented)
|
||||
//bool TXBRK() const { return BIT(serctl, 1); } // Send a break (not implemented)
|
||||
//bool PAREVEN() const { return BIT(serctl, 0); } // Send/Recevie even parity (not implemented)
|
||||
|
||||
u8 serctl = 0;
|
||||
u8 data_received = 0;
|
||||
u8 data_to_send = 0;
|
||||
u8 buffer = 0;
|
||||
bool received = false;
|
||||
bool sending = false;
|
||||
bool buffer_loaded = false;
|
||||
};
|
||||
|
||||
struct SUZY
|
||||
{
|
||||
uint8_t data[0x100];
|
||||
uint8_t high;
|
||||
int low;
|
||||
int signed_math;
|
||||
int accumulate;
|
||||
int accumulate_overflow;
|
||||
// 0xfc91 SPRGO Sprite process start bit
|
||||
bool EVER_ON() const { return BIT(data[0x91], 2); } // Everon detector enable
|
||||
bool SPRITE_GO() const { return BIT(data[0x91], 0); } // Sprite process enable
|
||||
|
||||
u8 data[0x100] = {0};
|
||||
bool signed_math = false;
|
||||
bool accumulate = false;
|
||||
bool accumulate_overflow = false;
|
||||
};
|
||||
|
||||
struct MIKEY
|
||||
{
|
||||
uint8_t data[0x100];
|
||||
uint16_t disp_addr;
|
||||
uint8_t vb_rest;
|
||||
// 0xfd8a IODIR
|
||||
u8 IODIR() const { return data[0x8a]; } // Parallel I/O direction
|
||||
|
||||
// 0xfd8b IODAT
|
||||
u8 IODAT() const { return data[0x8b]; } // Parallel I/O data
|
||||
|
||||
// 0xfd92 DISPCTL Video bus request enable
|
||||
//bool COLOR() const { return BIT(data[0x92], 3); } // Color(1) or Monochrome(0) display (not implemented)
|
||||
//bool FOURBIT() const { return BIT(data[0x92], 2); } // 4bpp(1) or 2bpp(0) color (not implemented)
|
||||
bool FLIP_SCREEN() const { return BIT(data[0x92], 1); } // Flipped screen
|
||||
//bool VIDEO_DMA() const { return BIT(data[0x92], 0); } // Video DMA enabled (not implemented)
|
||||
|
||||
u8 data[0x100] = {0};
|
||||
u16 disp_addr = 0;
|
||||
bool vb_rest = false;
|
||||
u8 interrupt = 0;
|
||||
};
|
||||
|
||||
struct LYNX_TIMER
|
||||
{
|
||||
uint8_t bakup;
|
||||
uint8_t cntrl1;
|
||||
uint8_t cntrl2;
|
||||
uint8_t counter;
|
||||
emu_timer *timer;
|
||||
int timer_active;
|
||||
bool int_en() const { return BIT(cntrl1, 7); } // Interrupt enable
|
||||
//bool reset_done() const { return BIT(cntrl1, 6); } // Reset timer done flag
|
||||
bool reload_en() const { return BIT(cntrl1, 4); } // Reload enable
|
||||
bool count_en() const { return BIT(cntrl1, 3); } // Count enable
|
||||
u8 timer_clock() const { return BIT(cntrl1, 0, 3); } // Timer clock
|
||||
bool linked() const { return timer_clock() == 0b111; } // Linked timer?
|
||||
|
||||
bool timer_done() const { return BIT(cntrl2, 3); } // Timer done flag
|
||||
//bool last_clock() const { return BIT(cntrl2, 2); } // Last clock (not implemented)
|
||||
//bool borrow_in() const { return BIT(cntrl2, 1); } // Borrow in (not implemented)
|
||||
bool borrow_out() const { return BIT(cntrl2, 0); } // Borrow out
|
||||
|
||||
// set timer done flag
|
||||
void set_timer_done(bool set)
|
||||
{
|
||||
if (set) // set
|
||||
cntrl2 |= 8;
|
||||
else // clear
|
||||
cntrl2 &= ~8;
|
||||
}
|
||||
|
||||
// set borrow out flag
|
||||
void set_borrow_out(bool set)
|
||||
{
|
||||
if (set) // set
|
||||
cntrl2 |= 1;
|
||||
else // clear
|
||||
cntrl2 &= ~1;
|
||||
}
|
||||
|
||||
u8 bakup = 0;
|
||||
u8 cntrl1 = 0;
|
||||
u8 cntrl2 = 0;
|
||||
u8 counter = 0;
|
||||
emu_timer *timer = nullptr;
|
||||
bool timer_active = false;
|
||||
};
|
||||
|
||||
enum
|
||||
@ -131,30 +220,40 @@ private:
|
||||
TIMER_UART
|
||||
};
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
virtual void video_start() override;
|
||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
|
||||
|
||||
required_shared_ptr<uint8_t> m_mem_0000;
|
||||
required_shared_ptr<uint8_t> m_mem_fc00;
|
||||
required_shared_ptr<uint8_t> m_mem_fd00;
|
||||
required_shared_ptr<uint8_t> m_mem_fe00;
|
||||
required_shared_ptr<uint8_t> m_mem_fffa;
|
||||
// devices
|
||||
required_shared_ptr<u8> m_dram; // 2 64Kx4 bit DRAMs connected to CPU
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<lynx_sound_device> m_sound;
|
||||
required_device<generic_slot_device> m_cart;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<screen_device> m_screen;
|
||||
required_device<address_map_bank_device> m_bank_fc00;
|
||||
required_device<address_map_bank_device> m_bank_fd00;
|
||||
required_memory_bank m_bank_fe00;
|
||||
required_memory_bank m_bank_fffa;
|
||||
uint16_t m_granularity;
|
||||
int m_sign_AB;
|
||||
int m_sign_CD;
|
||||
int m_rotate;
|
||||
uint8_t m_memory_config;
|
||||
|
||||
// memory views
|
||||
memory_view m_suzy_view;
|
||||
memory_view m_mikey_view;
|
||||
memory_view m_rom_view;
|
||||
memory_view m_vector_view;
|
||||
|
||||
// io ports
|
||||
required_ioport m_joy_io;
|
||||
required_ioport m_pause_io;
|
||||
|
||||
// connected to cartridge slot
|
||||
inline u32 get_cart_addr() { return (BIT(m_mikey.IODAT(), 4) * m_audin_offset) + (m_cart_addr_block * m_granularity) + m_cart_addr_counter; }
|
||||
u8 m_cart_addr_block = 0; // Address block (74HC164 at schematics, connected to cartridge slot A12...A19)
|
||||
u16 m_cart_addr_counter = 0; // Address counter (4040 at schematics, connected to cartridge slot A0...A10)
|
||||
u16 m_granularity = 0; // Address counter granularity
|
||||
u32 m_audin_offset = 0; // Some cartridge uses AUDIN pin for bankswitch
|
||||
// AUDIN pin, can be input or output
|
||||
|
||||
// internal states
|
||||
int m_sign_AB = 1;
|
||||
int m_sign_CD = 1;
|
||||
int m_rotate = 0;
|
||||
u8 m_memory_config;
|
||||
u32 m_pixclock = ~0;
|
||||
u8 m_hcount = ~0;
|
||||
u8 m_vcount = ~0;
|
||||
|
||||
BLITTER m_blitter;
|
||||
SUZY m_suzy;
|
||||
@ -165,45 +264,49 @@ private:
|
||||
bitmap_rgb32 m_bitmap;
|
||||
bitmap_rgb32 m_bitmap_temp;
|
||||
|
||||
void lynx_mem(address_map &map);
|
||||
void lynx_fc00_mem(address_map &map);
|
||||
void lynx_fd00_mem(address_map &map);
|
||||
void cpu_map(address_map &map);
|
||||
|
||||
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
uint8_t suzy_read(offs_t offset);
|
||||
void suzy_write(offs_t offset, uint8_t data);
|
||||
void lynx_uart_w(offs_t offset, uint8_t data);
|
||||
uint8_t lynx_uart_r(offs_t offset);
|
||||
uint8_t mikey_read(offs_t offset);
|
||||
void mikey_write(offs_t offset, uint8_t data);
|
||||
uint8_t lynx_memory_config_r();
|
||||
void lynx_memory_config_w(uint8_t data);
|
||||
void lynx_divide();
|
||||
void lynx_multiply();
|
||||
uint8_t lynx_timer_read(int which, int offset);
|
||||
void lynx_timer_write(int which, int offset, uint8_t data);
|
||||
u8 suzy_read(offs_t offset);
|
||||
void suzy_write(offs_t offset, u8 data);
|
||||
void uart_w(offs_t offset, u8 data);
|
||||
u8 uart_r(offs_t offset);
|
||||
u8 mikey_read(offs_t offset);
|
||||
void mikey_write(offs_t offset, u8 data);
|
||||
u8 memory_config_r();
|
||||
void memory_config_w(u8 data);
|
||||
void suzy_divide();
|
||||
void suzy_multiply();
|
||||
u8 timer_read(int which, int offset);
|
||||
void timer_write(int which, int offset, u8 data);
|
||||
void update_screen_timing();
|
||||
void sound_cb();
|
||||
TIMER_CALLBACK_MEMBER(lynx_blitter_timer);
|
||||
TIMER_CALLBACK_MEMBER(lynx_timer_shot);
|
||||
TIMER_CALLBACK_MEMBER(lynx_uart_loopback_timer);
|
||||
TIMER_CALLBACK_MEMBER(lynx_uart_timer);
|
||||
void lynx_postload();
|
||||
TIMER_CALLBACK_MEMBER(blitter_timer);
|
||||
TIMER_CALLBACK_MEMBER(timer_shot);
|
||||
TIMER_CALLBACK_MEMBER(uart_loopback_timer);
|
||||
TIMER_CALLBACK_MEMBER(uart_timer);
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
|
||||
uint8_t lynx_read_ram(uint16_t address);
|
||||
void lynx_write_ram(uint16_t address, uint8_t data);
|
||||
inline void lynx_plot_pixel(const int mode, const int16_t x, const int y, const int color);
|
||||
void lynx_blit_do_work(const int y, const int xdir, const int bits_per_pixel, const int mask );
|
||||
void lynx_blit_rle_do_work( const int16_t y, const int xdir, const int bits_per_pixel, const int mask );
|
||||
void lynx_blit_lines();
|
||||
void lynx_blitter();
|
||||
void lynx_draw_line();
|
||||
void lynx_timer_init(int which);
|
||||
void lynx_timer_signal_irq(int which);
|
||||
void lynx_timer_count_down(int which);
|
||||
uint32_t lynx_time_factor(int val);
|
||||
void lynx_uart_reset();
|
||||
image_verify_result lynx_verify_cart(char *header, int kind);
|
||||
|
||||
// DRAM accessor, 0xfff8-0xfff9 Reserved?
|
||||
inline u8 dram_byte_r(u16 addr) { return ((addr & 0xfffe) != 0xfff8) ? m_dram[addr] : 0; }
|
||||
inline void dram_byte_w(u16 addr, u8 data, u8 mem_mask = ~0) { if ((addr & 0xfffe) != 0xfff8) { COMBINE_DATA(&m_dram[addr]); } }
|
||||
inline u16 dram_word_r(u16 addr) { return dram_byte_r(addr) | (u16(dram_byte_r((addr + 1) & 0xffff)) << 8); }
|
||||
|
||||
inline void plot_pixel(const s16 x, const s16 y, const u8 color);
|
||||
void blit_do_work(const s16 y, const int xdir, const int bits_per_pixel, const u8 mask);
|
||||
void blit_rle_do_work(const s16 y, const int xdir, const int bits_per_pixel, const u8 mask);
|
||||
void blit_lines();
|
||||
void blitter();
|
||||
void draw_line();
|
||||
void timer_init(int which);
|
||||
void timer_signal_irq(int which);
|
||||
void timer_count_down(int which);
|
||||
u32 time_factor(int val);
|
||||
void uart_reset();
|
||||
void interrupt_set(u8 line);
|
||||
void interrupt_update();
|
||||
image_verify_result verify_cart(char *header, int kind);
|
||||
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
|
||||
};
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user