mirror of
https://github.com/holub/mame
synced 2025-04-16 13:34:55 +03:00
Merge remote-tracking branch 'origin/master' into netlist_dev
This commit is contained in:
commit
62ed8d252e
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -876,18 +876,21 @@ Core screen options
|
||||
Core vector options
|
||||
-------------------
|
||||
|
||||
-[no]antialias / -[no]aa
|
||||
-beam_width_min <value>
|
||||
-beam_width_max <value>
|
||||
|
||||
Enables antialiased line rendering for vector games. The default is ON
|
||||
(-antialias).
|
||||
|
||||
-beam <width>
|
||||
|
||||
Sets the width of the vectors. This is a scaling factor against the
|
||||
standard vector width. A value of 1.0 will keep the default vector
|
||||
line width. Smaller values will reduce the width, and larger values
|
||||
Sets the minimum and maximum width of the vectors. This is a scaling factor
|
||||
against the standard vector width, which is interpolated between minimum and
|
||||
maximum according to the beam's intensity. A value of 1.0 will keep the default
|
||||
vector line width. Smaller values will reduce the width, and larger values
|
||||
will increase the width. The default is 1.0.
|
||||
|
||||
-beam_intensity_weight <value>
|
||||
|
||||
Applies an exponential weight to the minimum and maximum beam width. For positive
|
||||
values the interpolated scaling factor will affect lines with higher intensity
|
||||
more than lines with lower intensity. The default is 0.0.
|
||||
|
||||
-flicker <value>
|
||||
|
||||
Simulates a vector "flicker" effect, similar to a vector monitor that
|
||||
|
@ -97,6 +97,7 @@ yiq_phase_count 2 Phase Count value for NTSC signal proces
|
||||
Vector Post-Processing Options
|
||||
------------------------------
|
||||
Name Default Values Description
|
||||
vector_beam_smooth 0.0 The vector beam smoothness. (0.00 to 1.00)
|
||||
vector_length_scale 0.5 The maximum vector attenuation. (0.00 to 1.00)
|
||||
vector_length_ratio 0.5 The minimum vector length (vector length to screen size ratio)
|
||||
that is affected by the attenuation (0.000 to 1.000)
|
||||
@ -115,7 +116,7 @@ bloom_lvl3_weight 0.16 Bloom level 3 weight. (1/4 smaller that
|
||||
bloom_lvl4_weight 0.08 Bloom level 4 weight. (1/4 smaller that level 3 target) (0.00 to 1.00)
|
||||
bloom_lvl5_weight 0.06 Bloom level 5 weight. (1/4 smaller that level 4 target) (0.00 to 1.00)
|
||||
bloom_lvl6_weight 0.04 Bloom level 6 weight. (1/4 smaller that level 5 target) (0.00 to 1.00)
|
||||
bloom_lvl7_weight 0.02 Bloom level 7 weight. (1/4 smaller that level 6 target)
|
||||
bloom_lvl7_weight 0.02 Bloom level 7 weight. (1/4 smaller that level 6 target) (0.00 to 1.00)
|
||||
bloom_lvl8_weight 0.01 Bloom level 8 weight. (1/4 smaller that level 7 target) (0.00 to 1.00)
|
||||
|
||||
|
||||
|
@ -16,6 +16,17 @@
|
||||
|
||||
<!-- Games -->
|
||||
|
||||
<software name="adventur">
|
||||
<description>Adventure</description>
|
||||
<year>1983</year>
|
||||
<publisher>Micro Power</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="8639">
|
||||
<rom name="adventure(1983)(micropower).uef" size="8639" crc="53770f29" sha1="5949dc94c31137c0beb996e37b34724e4e71af8c" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="airline">
|
||||
<description>Airline</description>
|
||||
<year>1983</year>
|
||||
@ -50,14 +61,14 @@
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
<software name="beebtrek">
|
||||
<description>Beebtrek</description>
|
||||
<year>1983</year>
|
||||
<publisher>Software For All</publisher>
|
||||
<year>1982</year>
|
||||
<publisher>Epsilon</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="7235">
|
||||
<rom name="beebtrek_be(softwareforall).uef" size="7235" crc="0d25509e" sha1="512adbb3cb8d1846f06fe9b4474e35ef711bd752" offset="0" />
|
||||
<dataarea name="cass" size="7168">
|
||||
<rom name="beebtrek(epsilon).uef" size="7168" crc="729eef94" sha1="c6062440f4624d5d217a9a4deb073d45eb5144fe" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -73,6 +84,17 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="cascad50">
|
||||
<description>Cascade 50</description>
|
||||
<year>1983</year>
|
||||
<publisher>Cascade</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="37743">
|
||||
<rom name="cascade50(cascade).uef" size="37743" crc="340ab359" sha1="d59f04c761df80c319d5f9bb6bf41aa6879e0422" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="catmouse">
|
||||
<description>Cat and Mouse</description>
|
||||
<year>1982</year>
|
||||
@ -200,6 +222,17 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="micrbudg">
|
||||
<description>Micro Budget</description>
|
||||
<year>1983</year>
|
||||
<publisher>Micro Power</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="3142">
|
||||
<rom name="microbudget(micropower).uef" size="3142" crc="767e9fdd" sha1="2a869c681572194dc7796a45c8eea3b047a509c3" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="munchyma">
|
||||
<description>Munchyman</description>
|
||||
<year>1981</year>
|
||||
@ -267,7 +300,7 @@
|
||||
</software>
|
||||
|
||||
<software name="reversim">
|
||||
<description>Reversi (Micro Power)</description>
|
||||
<description>Reversi 1 (Micro Power)</description>
|
||||
<year>1982</year>
|
||||
<publisher>Micro Power</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
@ -277,6 +310,28 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="savpondb">
|
||||
<description>Savage Pond (Bug Byte)</description>
|
||||
<year>1983</year>
|
||||
<publisher>Bug Byte</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="11605">
|
||||
<rom name="savagepond(1983)(bugbyte).uef" size="11605" crc="4b1629cd" sha1="833a3c6bfd1432a754124f8adf5a07b6c63e67b3" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="savponda">
|
||||
<description>Savage Pond (ASP Software)</description>
|
||||
<year>198?</year>
|
||||
<publisher>ASP Software</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="11586">
|
||||
<rom name="savagepond(asp).uef" size="11586" crc="4efb0a68" sha1="06b20cfa0a17b7b7f1e9451f5bd2e842af8d8928" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="seek">
|
||||
<description>Seek</description>
|
||||
<year>1982</year>
|
||||
@ -288,6 +343,17 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="sigmagic">
|
||||
<description>Signals and Magic</description>
|
||||
<year>1982</year>
|
||||
<publisher>H&H Software</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="9649">
|
||||
<rom name="signalsandmagic(hnh).uef" size="9649" crc="19edfd4a" sha1="0353fbea7269b821a8174bdb51ced70e2eb36b7c" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spacinva">
|
||||
<description>Space Invaders 16K</description>
|
||||
<year>1982</year>
|
||||
@ -386,7 +452,7 @@
|
||||
<software name="wordseq">
|
||||
<description>Word Sequencing</description>
|
||||
<year>1983</year>
|
||||
<publisher>Acornsoft</publisher>
|
||||
<publisher>Acornsoft/ESM</publisher>
|
||||
<info name="release" value="SBE06" />
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="7955">
|
||||
@ -398,7 +464,7 @@
|
||||
<software name="missigns">
|
||||
<description>Missing Signs</description>
|
||||
<year>1983</year>
|
||||
<publisher>Acornsoft</publisher>
|
||||
<publisher>Acornsoft/ESM</publisher>
|
||||
<info name="release" value="SBE09" />
|
||||
<part name="cass" interface="bbc_cass">
|
||||
<dataarea name="cass" size="7977">
|
||||
|
1742
hash/bbcb_cass.xml
1742
hash/bbcb_cass.xml
File diff suppressed because it is too large
Load Diff
@ -268,7 +268,7 @@
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop2" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Data"/>
|
||||
<feature name="part_id" value="Database"/>
|
||||
<dataarea name="flop" size="105079">
|
||||
<rom name="033 acheton data.fsd" size="105079" crc="86fdca91" sha1="57f448a17868f0bdbbc6a415464220da0c418f72" offset="0" />
|
||||
</dataarea>
|
||||
@ -636,7 +636,7 @@
|
||||
|
||||
<software name="omegaorb">
|
||||
<description>Omega Orb</description>
|
||||
<year>1986</year>
|
||||
<year>1987</year>
|
||||
<publisher>Audiogenic</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="104939">
|
||||
@ -815,7 +815,7 @@
|
||||
|
||||
<software name="sphdest">
|
||||
<description>Sphere of Destiny</description>
|
||||
<year>1986</year>
|
||||
<year>1987</year>
|
||||
<publisher>Audiogenic</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="105084">
|
||||
@ -825,17 +825,17 @@
|
||||
</software>
|
||||
|
||||
<software name="colos4ch">
|
||||
<description>Colossus 4 Chess</description>
|
||||
<year>1988</year>
|
||||
<description>Colossus Chess 4</description>
|
||||
<year>1986</year>
|
||||
<publisher>CDS</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Side 1"/>
|
||||
<feature name="part_id" value="Game & Files G31-G34/G100-G118"/>
|
||||
<dataarea name="flop" size="104953">
|
||||
<rom name="000 colossus chess 4 side 1.fsd" size="104953" crc="c759e652" sha1="04a92c17cfec2827b4c6e85e4a271831346c9d00" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop2" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Side 2"/>
|
||||
<feature name="part_id" value="Files G0-G30"/>
|
||||
<dataarea name="flop" size="104953">
|
||||
<rom name="000 colossus chess 4 side 2.fsd" size="104953" crc="2eda7e43" sha1="2b25c2d66c2d9ab40a90710ea931e01471b7a5d6" offset="0" />
|
||||
</dataarea>
|
||||
@ -1107,8 +1107,8 @@
|
||||
</software>
|
||||
|
||||
<software name="yiear">
|
||||
<description>Yie Ar Kung Fu</description>
|
||||
<year>1984</year>
|
||||
<description>Yie Ar Kung-Fu</description>
|
||||
<year>1985</year>
|
||||
<publisher>Imagine</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="105081">
|
||||
@ -1460,7 +1460,7 @@
|
||||
|
||||
<software name="phancomb">
|
||||
<description>Phantom Combat (BBC Series)</description>
|
||||
<year>1985</year>
|
||||
<year>1987</year>
|
||||
<publisher>Doctor Soft</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="104944">
|
||||
@ -1532,7 +1532,7 @@
|
||||
</software>
|
||||
|
||||
<software name="wediag">
|
||||
<description>Diagnostics Disc</description>
|
||||
<description>WE Diagnostics Utility Disc</description>
|
||||
<year>1985</year>
|
||||
<publisher>Watford Electronics</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
@ -1609,9 +1609,9 @@
|
||||
</software>
|
||||
|
||||
<software name="tcrosswd">
|
||||
<description>The Times Crosswords Vol.1</description>
|
||||
<description>The Times Computer Crosswords Vol.1</description>
|
||||
<year>1988</year>
|
||||
<publisher>The Times</publisher>
|
||||
<publisher>Akom Limited</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Side 1"/>
|
||||
<dataarea name="flop" size="209879">
|
||||
@ -1988,7 +1988,7 @@
|
||||
|
||||
<software name="hobbit">
|
||||
<description>The Hobbit</description>
|
||||
<year>1983</year>
|
||||
<year>1985</year>
|
||||
<publisher>Melbourne House</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Side 1"/>
|
||||
@ -2346,7 +2346,7 @@
|
||||
|
||||
<software name="nevryon">
|
||||
<description>Nevyron</description>
|
||||
<year>1991</year>
|
||||
<year>1990</year>
|
||||
<publisher>4th Dimension</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="104937">
|
||||
@ -2478,7 +2478,7 @@
|
||||
|
||||
<software name="holedoc1">
|
||||
<description>Holed Out Extra Courses Vol.1</description>
|
||||
<year>1990</year>
|
||||
<year>1989</year>
|
||||
<publisher>4th Dimension</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="104959">
|
||||
@ -2489,7 +2489,7 @@
|
||||
|
||||
<software name="holedoc2">
|
||||
<description>Holed Out Extra Courses Vol.2</description>
|
||||
<year>1990</year>
|
||||
<year>1989</year>
|
||||
<publisher>4th Dimension</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="104959">
|
||||
@ -3036,7 +3036,7 @@
|
||||
|
||||
<software name="ravskull">
|
||||
<description>Ravenskull</description>
|
||||
<year>1987</year>
|
||||
<year>1986</year>
|
||||
<publisher>Superior Software/Acornsoft</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="104940">
|
||||
@ -4040,7 +4040,7 @@
|
||||
|
||||
<software name="teachcup">
|
||||
<description>The Teachers Cupboard</description>
|
||||
<year>198?</year>
|
||||
<year>1988</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<feature name="part_id" value="The Apple"/>
|
||||
@ -4257,7 +4257,7 @@
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop3" interface="floppy_5_25">
|
||||
<feature name="part_id" value="Punch + Judy-Rockpools"/>
|
||||
<feature name="part_id" value="Punch & Judy/Rockpools"/>
|
||||
<dataarea name="flop" size="105052">
|
||||
<rom name="290 toby at the beach punch + judy-rockpools (80 track).fsd" size="105052" crc="1becee05" sha1="9e6459a380a56bff5e682f40c82ca3019c43d721" offset="0" />
|
||||
</dataarea>
|
||||
@ -4355,7 +4355,7 @@
|
||||
|
||||
<software name="aninumbr">
|
||||
<description>Animated Numbers</description>
|
||||
<year>198?</year>
|
||||
<year>1990</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_5_25">
|
||||
<dataarea name="flop" size="104946">
|
||||
|
@ -50,7 +50,7 @@
|
||||
</software>
|
||||
|
||||
<software name="strykrun">
|
||||
<description>Strykers Run</description>
|
||||
<description>Stryker's Run</description>
|
||||
<year>1986</year>
|
||||
<publisher>Superior Software</publisher>
|
||||
<part name="cass" interface="bbc_cass">
|
||||
|
@ -10,6 +10,17 @@
|
||||
|
||||
<softwarelist name="bbcmc_flop" description="BBC Master Compact disks">
|
||||
|
||||
<software name="elite">
|
||||
<description>Elite</description>
|
||||
<year>1986</year>
|
||||
<publisher>Superior Software/Acornsoft</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="327680">
|
||||
<rom name="elite.adm" size="327680" crc="4668a225" sha1="0716a525820045f6b2092dda2eca2fa6a651b381" offset="0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="welcome">
|
||||
<description>BBC Master Compact Welcome Disc</description>
|
||||
<year>1986</year>
|
||||
@ -21,4 +32,182 @@
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Business -->
|
||||
|
||||
<software name="viewplot">
|
||||
<description>ViewPlot</description>
|
||||
<year>1986</year>
|
||||
<publisher>Acornsoft</publisher>
|
||||
<info name="release" value="SUB29" />
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="327680">
|
||||
<rom name="viewplot.adf" size="327680" crc="2ca1eade" sha1="12eaa4ac1c6a6484a886f313bb793a2c4537eb91" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Educational -->
|
||||
|
||||
<software name="aninumbr">
|
||||
<description>Animated Numbers</description>
|
||||
<year>1990</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="animated_numbers.adl" size="655360" crc="a8b8d04d" sha1="7d633419ac6012c80f9376210e47642ca3d70d82" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="connectn">
|
||||
<description>Connections</description>
|
||||
<year>1990</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Startup Disc"/>
|
||||
<dataarea name="flop" size="20224">
|
||||
<rom name="connections_master_disc.adl" size="20224" crc="b3149805" sha1="3065c72fa3226f8741a019bd6c0dce7db11bdf7a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop2" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Work Disc"/>
|
||||
<dataarea name="flop" size="327680">
|
||||
<rom name="connections_work_disc.adl" size="327680" crc="823766c6" sha1="e89ab5643b66218a3f42911976700942e72a066d" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop3" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Print Disc"/>
|
||||
<dataarea name="flop" size="327680">
|
||||
<rom name="connections_print_disc.adl" size="327680" crc="22528474" sha1="46a6ea12d2acf53ccc682bc0d8b5ffb876800793" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dreamtim">
|
||||
<description>Dreamtime</description>
|
||||
<year>1989</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="dreamtime.adl" size="655360" crc="57ff88cd" sha1="bdf7a8e3532874b74fa6658da7500fdb4d67603e" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="mapventu">
|
||||
<description>Mapventure</description>
|
||||
<year>1988</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="dreamtime.adl" size="655360" crc="033c7088" sha1="5f8b66af0b6d81f3829ac9371bbf79825536461f" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="microbug">
|
||||
<description>The Microbugs</description>
|
||||
<year>1989</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Startup Disc & Introduction"/>
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="micro_bugs_start_disc.adl" size="655360" crc="ec6f8494" sha1="47d9884a44ece0328a5adf640d88fb5edbdda12a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop2" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Adventure Disc"/>
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="micro_bugs_adventure_disc.adl" size="655360" crc="7baa88ae" sha1="28aeb331a70ccadf45bd9800821539973b5be24f" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="spacemad">
|
||||
<description>Space Mission Mada</description>
|
||||
<year>1986</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Parts 1 & 2"/>
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="space_mission_mada_12.adl" size="655360" crc="ed7ea48e" sha1="c9131e515732dfebb296eb1a7c8bbc2f0b7aefe4" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="flop2" interface="floppy_3_5">
|
||||
<feature name="part_id" value="Parts 3 + 4"/>
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="space_mission_mada_34.adl" size="655360" crc="29030385" sha1="aadaef6c3f6ca86e3cba9e250e86ab7cbb2e5403" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="stigdump">
|
||||
<description>Stig of the Dump</description>
|
||||
<year>1986</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="stig_of_the_dump.adl" size="655360" crc="d7fd696c" sha1="568ec9f8f15506564881f623d62d6faefd191d1a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="teachcup">
|
||||
<description>Teachers' Cupboard</description>
|
||||
<year>1988</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="teachers_cupboard.adl" size="655360" crc="fe49aa4c" sha1="3dd73656e1b18f74acb78fd6cd0c7ea5888b5fff" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="tpicnic">
|
||||
<description>The Teddy Bears' Picnic</description>
|
||||
<year>1989</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="teddy_bear_picnic.adl" size="655360" crc="4ff95e0e" sha1="494deb7727b3fe490a16b66ca471508e3d56e465" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="trainydy">
|
||||
<description>Teddy Bears' Rainy Day</description>
|
||||
<year>1993</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="teddy_bear_rainy_day.adl" size="655360" crc="5854e1eb" sha1="731b3609fbe8b6d09ee2b3ef6db155fb2012cca8" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="pigshome">
|
||||
<description>Three Little Pigs at Home</description>
|
||||
<year>1992</year>
|
||||
<publisher>Sherston Software</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="three_little_pigs_at_home.adl" size="655360" crc="18e63cfd" sha1="d3b272f26f395fc987d5b0749bae88ef76ba7fe1" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!-- Languages -->
|
||||
|
||||
<software name="acornc">
|
||||
<description>C (Acornsoft)</description>
|
||||
<year>1987</year>
|
||||
<publisher>Acornsoft</publisher>
|
||||
<info name="release" value="SNL28" />
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="526592">
|
||||
<rom name="acorn-c.adl" size="526592" crc="fce1d68f" sha1="a8983068eb9a699a500fa8f8ebfb369a673e7279" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
|
30
hash/e01_flop.xml
Normal file
30
hash/e01_flop.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
|
||||
|
||||
<!-- Acorn FileStore Discs -->
|
||||
|
||||
<softwarelist name="e01_flop" description="Acorn FileStore Discs">
|
||||
|
||||
<software name="fsinit">
|
||||
<description>FileStore Initial Disc</description>
|
||||
<year>198?</year>
|
||||
<publisher>Acorn</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="filestore_initial_disc.adl" size="655360" crc="9e758dec" sha1="4750e6cf1d4d948b3a88d0c96e17fef684dbb41a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fsutil">
|
||||
<description>FileStore Utility Disc</description>
|
||||
<year>198?</year>
|
||||
<publisher>Acorn</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="655360">
|
||||
<rom name="filestore_utility_disc.adl" size="655360" crc="1e41ad3a" sha1="509b353bc9956917a854df9af868aac874869a23" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
@ -340,7 +340,7 @@
|
||||
<publisher>Micro Power</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="8515">
|
||||
<rom name="adventure-Micro Power_e.uef" size="8515" crc="8eabc302" sha1="3073bb57401655b711c679f93ab10fcac037f3f4" offset="0"/>
|
||||
<rom name="adventure-micropower_e.uef" size="8515" crc="8eabc302" sha1="3073bb57401655b711c679f93ab10fcac037f3f4" offset="0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -1302,7 +1302,7 @@
|
||||
|
||||
<software name="cascad50">
|
||||
<description>Cascade 50</description>
|
||||
<year>1984</year>
|
||||
<year>1983</year>
|
||||
<publisher>Cascade</publisher>
|
||||
<part name="cass1" interface="electron_cass">
|
||||
<feature name="part_id" value="Side 1"/>
|
||||
@ -1462,11 +1462,11 @@
|
||||
|
||||
<software name="chessmp">
|
||||
<description>Chess (Micro Power)</description>
|
||||
<year>1984</year>
|
||||
<year>1983</year>
|
||||
<publisher>Micro Power</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="5959">
|
||||
<rom name="chess-Micro Power_e.uef" size="5959" crc="fa4b456e" sha1="34f86f5d22888c38e2d3bacba9b5845b89a31529" offset="0"/>
|
||||
<rom name="chess-micropower_e.uef" size="5959" crc="fa4b456e" sha1="34f86f5d22888c38e2d3bacba9b5845b89a31529" offset="0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -1484,7 +1484,7 @@
|
||||
|
||||
<software name="chipbust">
|
||||
<description>Chip Buster</description>
|
||||
<year>198?</year>
|
||||
<year>1985</year>
|
||||
<publisher>Software Invasion</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="12848">
|
||||
@ -1628,7 +1628,7 @@
|
||||
|
||||
<software name="colos4ch">
|
||||
<description>Colossus Chess 4</description>
|
||||
<year>1988</year>
|
||||
<year>1986</year>
|
||||
<publisher>CDS</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="15702">
|
||||
@ -1689,7 +1689,7 @@
|
||||
</software>
|
||||
|
||||
<software name="commandopias" cloneof="commando">
|
||||
<description>Commando (Play It Again Sam-3)</description>
|
||||
<description>Commando (Play It Again Sam 3)</description>
|
||||
<year>1989</year>
|
||||
<publisher>Superior Software/Acornsoft</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
@ -2029,7 +2029,7 @@
|
||||
|
||||
<software name="dddenis">
|
||||
<description>Dare Devil Dennis</description>
|
||||
<year>1984</year>
|
||||
<year>1983</year>
|
||||
<publisher>Visions</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="7441">
|
||||
@ -3348,7 +3348,7 @@
|
||||
|
||||
<software name="elites" cloneof="elite">
|
||||
<description>Elite (Superior Software)</description>
|
||||
<year>198?</year>
|
||||
<year>1986</year>
|
||||
<publisher>Superior Software/Acornsoft</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="24515">
|
||||
@ -3636,8 +3636,8 @@
|
||||
</software>
|
||||
|
||||
<software name="firetrak">
|
||||
<description>Fire Track</description>
|
||||
<year>198?</year>
|
||||
<description>FireTrack</description>
|
||||
<year>1989</year>
|
||||
<publisher>Superior Software/Acornsoft</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="19805">
|
||||
@ -5680,18 +5680,18 @@
|
||||
<description>Mexico 86</description>
|
||||
<year>1986</year>
|
||||
<publisher>Qualsoft</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<feature name="part_id" value="Finals"/>
|
||||
<dataarea name="cass" size="8478">
|
||||
<rom name="mexico86finals_e.uef" size="8478" crc="a70af89d" sha1="3ba32b540cd0c422406ed49e6054bea9cc9000ec" offset="0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<part name="cass1" interface="electron_cass">
|
||||
<feature name="part_id" value="Qualifiers"/>
|
||||
<dataarea name="cass" size="8557">
|
||||
<rom name="mexico86qualifiers_e.uef" size="8557" crc="2398c3a2" sha1="9610c80168d7ac65a56531ab940aecc58d013d0e" offset="0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="cass2" interface="electron_cass">
|
||||
<feature name="part_id" value="Finals"/>
|
||||
<dataarea name="cass" size="8478">
|
||||
<rom name="mexico86finals_e.uef" size="8478" crc="a70af89d" sha1="3ba32b540cd0c422406ed49e6054bea9cc9000ec" offset="0"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="microlym">
|
||||
@ -6101,7 +6101,7 @@
|
||||
|
||||
<software name="omegaorb">
|
||||
<description>Omega Orb</description>
|
||||
<year>1986</year>
|
||||
<year>1987</year>
|
||||
<publisher>Audiogenic</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="22736">
|
||||
@ -6302,7 +6302,7 @@
|
||||
|
||||
<software name="pengwyn">
|
||||
<description>Pengwyn</description>
|
||||
<year>1984</year>
|
||||
<year>1983</year>
|
||||
<publisher>Postern</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="6915">
|
||||
@ -6818,7 +6818,7 @@
|
||||
|
||||
<software name="ravskull">
|
||||
<description>Ravenskull</description>
|
||||
<year>1987</year>
|
||||
<year>1986</year>
|
||||
<publisher>Superior Software</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="24836">
|
||||
@ -6878,7 +6878,7 @@
|
||||
|
||||
<software name="redcoats">
|
||||
<description>Red Coats</description>
|
||||
<year>1985</year>
|
||||
<year>1984</year>
|
||||
<publisher>Lothlorien</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="10181">
|
||||
@ -7524,7 +7524,7 @@
|
||||
</software>
|
||||
|
||||
<software name="skirmishpias" cloneof="skirmish">
|
||||
<description>Skirmish (Play It Again Sam-12)</description>
|
||||
<description>Skirmish (Play It Again Sam 12)</description>
|
||||
<year>1990</year>
|
||||
<publisher>Superior Software/Acornsoft</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
@ -7847,7 +7847,7 @@
|
||||
|
||||
<software name="sphdest">
|
||||
<description>Sphere of Destiny</description>
|
||||
<year>1986</year>
|
||||
<year>1987</year>
|
||||
<publisher>Audiogenic</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="21816">
|
||||
@ -9155,7 +9155,7 @@
|
||||
|
||||
<software name="themine">
|
||||
<description>The Mine</description>
|
||||
<year>1984</year>
|
||||
<year>1983</year>
|
||||
<publisher>Micro Power</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="10185">
|
||||
@ -10295,8 +10295,8 @@
|
||||
</software>
|
||||
|
||||
<software name="yiear">
|
||||
<description>Yie Ar Kung Fu</description>
|
||||
<year>1984</year>
|
||||
<description>Yie Ar Kung-Fu</description>
|
||||
<year>1985</year>
|
||||
<publisher>Imagine</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
<dataarea name="cass" size="19064">
|
||||
@ -10306,7 +10306,7 @@
|
||||
</software>
|
||||
|
||||
<software name="yiear2">
|
||||
<description>Yie Ar Kung Fu 2</description>
|
||||
<description>Yie Ar Kung-Fu 2</description>
|
||||
<year>198?</year>
|
||||
<publisher>Imagine</publisher>
|
||||
<part name="cass" interface="electron_cass">
|
||||
|
@ -1558,6 +1558,22 @@ User/save disks that can be created from the game itself are not included.
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="funnybee">
|
||||
<description>Uchuu Kaitou Funny Bee</description>
|
||||
<year>1994</year>
|
||||
<publisher>Alice Soft</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="1261568">
|
||||
<rom name="uchuu kaitou funny bee (boot disk).hdm" size="1261568" crc="4bcc3120" sha1="f721efe9534554a1a9e4e2201b8f7c4102987b29" offset="000000" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="uchuu kaitou funny bee" sha1="da9c5874aaeccbf120ab9593a63a7aa1f87b4b27" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="fwc1">
|
||||
<description>Freeware Collection 1</description>
|
||||
<year>1989</year>
|
||||
@ -4266,7 +4282,7 @@ User/save disks that can be created from the game itself are not included.
|
||||
<publisher>Fujitsu</publisher>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="[os] towns system software v1.1 l20" sha1="b67bc80774182e641f713920712410be4e715171" />
|
||||
<disk name="[os] towns system software v1.1 l30" sha1="b67bc80774182e641f713920712410be4e715171" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
@ -4315,6 +4331,77 @@ User/save disks that can be created from the game itself are not included.
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ultima5">
|
||||
<description>Ultima V: Warriors of Destiny</description>
|
||||
<year>1992</year>
|
||||
<publisher>Fujitsu</publisher>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="ultima v - warriors of destiny" sha1="70aa1bf29817f583317426fde3a7ceb5a22703fa" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ultima6">
|
||||
<description>Ultima VI: The False Prophet</description>
|
||||
<year>1991</year>
|
||||
<publisher>Fujitsu</publisher>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="ultima vi - the false prophet" sha1="1add2897492af4ff236743e712ae2244dda80319" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="ultimatr">
|
||||
<description>Ultima Trilogy I-II-III</description>
|
||||
<year>1990</year>
|
||||
<publisher>Fujitsu</publisher>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="ultima trilogy i-ii-iii" sha1="75b22d990d1b70b32b3e542778b1621aa6db420c" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="uuw">
|
||||
<description>Ultima Underworld: The Stygian Abyss</description>
|
||||
<year>1993</year>
|
||||
<publisher>Electronic Arts Victor</publisher>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="ultima underworld" sha1="048ed1c5cfc5b8c7ea1d8f9cc3ea6aa7cf39390c" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="uuw2">
|
||||
<description>Ultima Underworld II: Labyrinth of Worlds</description>
|
||||
<year>1995</year>
|
||||
<publisher>Electronic Arts Victor</publisher>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="ultima underworld 2" sha1="dd93343e311ad7fe5f933a004b346ff6429855f5" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="uwaki">
|
||||
<description>Uwaki na Anata</description>
|
||||
<year>1994</year>
|
||||
<publisher>HOP</publisher>
|
||||
<part name="flop1" interface="floppy_3_5">
|
||||
<dataarea name="flop" size="1261568">
|
||||
<rom name="uwaki na anata (boot disk).hdm" size="1261568" crc="27b0fc8b" sha1="4010114d203a210175b59e3d4dc46df0cf805f03" offset="000000" />
|
||||
</dataarea>
|
||||
</part>
|
||||
<part name="cdrom" interface="fmt_cdrom">
|
||||
<diskarea name="cdrom">
|
||||
<disk name="uwaki na anata" sha1="881aa47e943a6491b0cace4761b169ff9ed9532c" />
|
||||
</diskarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="volfied">
|
||||
<description>Volfied</description>
|
||||
<year>1991</year>
|
||||
|
9302
hash/gba.xml
9302
hash/gba.xml
File diff suppressed because it is too large
Load Diff
@ -86,7 +86,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="10pinbu" cloneof="10pinb">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>10-Pin Bowling (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Majesco</publisher>
|
||||
@ -177,7 +177,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="3dupinb">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>3-D Ultra Pinball - Thrillride (USA)</description>
|
||||
<year>2000</year>
|
||||
<publisher>Sierra</publisher>
|
||||
@ -3051,7 +3051,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="cheechai">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Chee-Chai Alien (Jpn)</description>
|
||||
<year>2001</year>
|
||||
<publisher>Creatures</publisher>
|
||||
@ -6698,7 +6698,6 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="getchuu">
|
||||
<!-- Notes: Rumble support -->
|
||||
<description>Get Chuu Club - Minna no Konchuu Daizukan (Jpn)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Jaleco</publisher>
|
||||
@ -8057,7 +8056,6 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="holein1">
|
||||
<!-- Notes: Rumble support -->
|
||||
<description>Hole In One Golf (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Natsume</publisher>
|
||||
@ -9197,7 +9195,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="kawanus4" cloneof="rivking2">
|
||||
<!-- Notes: SGB enhanced, Rumble support -->
|
||||
<!-- Notes: SGB enhanced -->
|
||||
<description>Kawa no Nushi Tsuri 4 (Jpn)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Victor Interactive Software</publisher>
|
||||
@ -10446,7 +10444,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="mermaid2u" cloneof="mermaid2">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Disney's The Little Mermaid II - Pinball Frenzy (USA)</description>
|
||||
<year>2000</year>
|
||||
<publisher>Disney Interactive</publisher>
|
||||
@ -12538,7 +12536,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="missileu" cloneof="missile">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Missile Command (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Hasbro Interactive</publisher>
|
||||
@ -13556,7 +13554,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="nascchal">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>NASCAR Challenge (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Hasbro Interactive</publisher>
|
||||
@ -14086,7 +14084,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="nushiadv">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Nushi Tsuri Adventure - Kite no Bouken (Jpn)</description>
|
||||
<year>2000</year>
|
||||
<publisher>Victor Interactive Software</publisher>
|
||||
@ -14477,7 +14475,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="pdark">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Perfect Dark (Euro, USA)</description>
|
||||
<year>2000</year>
|
||||
<publisher>Nintendo</publisher>
|
||||
@ -15502,7 +15500,6 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="pokepinb">
|
||||
<!-- Notes: Rumble support -->
|
||||
<description>Pokémon Pinball (Euro)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Nintendo</publisher>
|
||||
@ -15526,7 +15523,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="pokepinbj" cloneof="pokepinb">
|
||||
<!-- Notes: SGB enhanced, Rumble support -->
|
||||
<!-- Notes: SGB enhanced -->
|
||||
<description>Pokémon Pinball (Jpn)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Nintendo</publisher>
|
||||
@ -15545,7 +15542,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="pokepinbu" cloneof="pokepinb">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Pokémon Pinball (Aus, USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Nintendo</publisher>
|
||||
@ -15645,7 +15642,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="polarsno" cloneof="snowcros">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Polaris SnoCross (USA)</description>
|
||||
<year>2000</year>
|
||||
<publisher>Vatical Entertainment</publisher>
|
||||
@ -17088,7 +17085,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="r2rumbleu" cloneof="r2rumble">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Ready 2 Rumble Boxing (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Midway</publisher>
|
||||
@ -19194,7 +19191,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="swracer">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Star Wars Episode I - Racer (Euro, USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Nintendo</publisher>
|
||||
@ -19304,7 +19301,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="sblkbass">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Super Black Bass - Real Fight (Jpn)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Starfish</publisher>
|
||||
@ -19545,7 +19542,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="srfish">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Super Real Fishing (Jpn)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Bottom Up</publisher>
|
||||
@ -20151,7 +20148,6 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="tdoffr3" cloneof="4x4world">
|
||||
<!-- Notes: Rumble support -->
|
||||
<description>Test Drive Off-Road 3 (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Infogrames</publisher>
|
||||
@ -20684,7 +20680,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="tonkaracua" cloneof="tonkarac">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Tonka Raceway (USA, Rumble Version)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Hasbro Interactive</publisher>
|
||||
@ -20828,7 +20824,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="topgearj" cloneof="tgrally">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Top Gear Pocket (Jpn)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Kemco</publisher>
|
||||
@ -20845,7 +20841,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="topgear" cloneof="tgrally">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Top Gear Pocket (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Kemco</publisher>
|
||||
@ -20860,7 +20856,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="topgear2j" cloneof="tgrally2">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Top Gear Pocket 2 (Jpn)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Kemco</publisher>
|
||||
@ -20895,7 +20891,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="tgrally">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Top Gear Rally (Euro)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Kemco</publisher>
|
||||
@ -21645,7 +21641,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="vigilnt8">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Vigilante 8 (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Vatical Entertainment</publisher>
|
||||
@ -22909,7 +22905,7 @@ Unreleased (music source code exists, possibly no prototypes exist)
|
||||
</software>
|
||||
|
||||
<software name="zebco">
|
||||
<!-- Notes: GBC only, Rumble support -->
|
||||
<!-- Notes: GBC only -->
|
||||
<description>Zebco Fishing! (USA)</description>
|
||||
<year>1999</year>
|
||||
<publisher>Vatical Entertainment</publisher>
|
||||
|
25241
hash/psx.xml
25241
hash/psx.xml
File diff suppressed because it is too large
Load Diff
@ -3,77 +3,29 @@
|
||||
|
||||
<softwarelist name="sorcerer_cass" description="Exidy Sorcerer cassettes">
|
||||
|
||||
<!-- These came from mp3s, so they're marked as bad dumps until they're redumped properly -->
|
||||
<!--
|
||||
These come from tapes.
|
||||
Load the Basic ROM PAC, then from within it type CLOAD. When it has finished loading, type RUN.
|
||||
-->
|
||||
|
||||
<software name="chomp">
|
||||
<description>Chomp</description>
|
||||
<year>1981</year>
|
||||
<publisher>W. S. King</publisher>
|
||||
<info name="usage" value="Load in Monitor with "LO" command, then type "GO 0100"" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="23392316">
|
||||
<rom name="chomp (1981)(w.s.king).wav" size="23392316" crc="95971024" sha1="62672de80e5139af35424184c76f1c9c18493c3a" offset="0" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="eliza">
|
||||
<description>Eliza</description>
|
||||
<year>19??</year>
|
||||
<software name="demo1">
|
||||
<description>DEMO1</description>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="developer" value="Paul E. Johnson"/>
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="12578876">
|
||||
<rom name="eliza (19xx)(-).wav" size="12578876" crc="9173759e" sha1="23d35784fd1ab492cb0371552bd1a981214c0192" offset="0" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="galaxian">
|
||||
<description>Galaxians</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in Monitor with "LO" command, then type "GO 0100"" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="16506020">
|
||||
<rom name="galaxians (19xx)(-).wav" size="16506020" crc="c6f686b2" sha1="41928aa796e6609de37301b3594d3a9a9eb975ac" offset="0" status="baddump" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
|
||||
<!-- These come from tapes -->
|
||||
|
||||
<software name="elizaa" cloneof="eliza">
|
||||
<description>Eliza (Alt)</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="11908260">
|
||||
<rom name="eliza.wav" size="11908260" crc="67868b2a" sha1="bd219fa2b29881add2f06fc7cdf1dc0c63bec0b0" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="demo1" supported="no">
|
||||
<description>DEMO1 (Bad?)</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Gives CRC Error" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="12770008">
|
||||
<rom name="demo1.wav" size="12770008" crc="e53951a5" sha1="612b60f3f179fa05a86305761e951211e535238e" offset="0" />
|
||||
<dataarea name="cass" size="12691590">
|
||||
<rom name="demo1.wav" size="12691590" crc="0cd9f838" sha1="2bd3e8082d5f0605d36b24ad8462c49962e64377" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="demo2">
|
||||
<description>DEMO2</description>
|
||||
<year>19??</year>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="8202538">
|
||||
<rom name="demo2.wav" size="8202538" crc="922dede4" sha1="92005d8e4957a658e2e513083cd240af575fc048" offset="0" />
|
||||
@ -83,9 +35,10 @@
|
||||
|
||||
<software name="demo3">
|
||||
<description>DEMO3</description>
|
||||
<year>19??</year>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="developer" value="Peter J. Elston"/>
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="7263870">
|
||||
<rom name="demo3.wav" size="7263870" crc="38e5b0d7" sha1="2400651c816b33d67c461c7eee561d80568891be" offset="0" />
|
||||
@ -95,9 +48,9 @@
|
||||
|
||||
<software name="demo4">
|
||||
<description>DEMO4</description>
|
||||
<year>19??</year>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="3896482">
|
||||
<rom name="demo4.wav" size="3896482" crc="e66fa049" sha1="d956b3ff42ac7b3178ee76ecb3d2ad388fed81f5" offset="0" />
|
||||
@ -107,9 +60,10 @@
|
||||
|
||||
<software name="demo5">
|
||||
<description>DEMO5</description>
|
||||
<year>19??</year>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="developer" value="Ted Crowley"/>
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="5980780">
|
||||
<rom name="demo5.wav" size="5980780" crc="32e5879c" sha1="07d08cb8d35e591d9f5a358fcc6f611df5922c7e" offset="0" />
|
||||
@ -119,21 +73,23 @@
|
||||
|
||||
<software name="demo6">
|
||||
<description>DEMO6</description>
|
||||
<year>19??</year>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="developer" value="Terry and Kathleen Beyer"/>
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="11295052">
|
||||
<rom name="demo6.wav" size="11295052" crc="1c3a212f" sha1="a641a1cfaa3c3dc272c31803c738ff3f908f4604" offset="0" />
|
||||
<dataarea name="cass" size="11325568">
|
||||
<rom name="demo6.wav" size="11325568" crc="60a7a4ee" sha1="b895cd5f2b93741e0356fe265fff96e8b6eb71b7" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="demo7">
|
||||
<description>DEMO7</description>
|
||||
<year>19??</year>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="developer" value="Jim and Linda Staley"/>
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="11678280">
|
||||
<rom name="demo7.wav" size="11678280" crc="320e3eba" sha1="f2ab46c0b33b5ea42a6ae26fdd06294b62e1331f" offset="0" />
|
||||
@ -143,27 +99,28 @@
|
||||
|
||||
<software name="demo8">
|
||||
<description>DEMO8</description>
|
||||
<year>19??</year>
|
||||
<year>1979</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Load in BASIC with "CLOAD" command, then type "RUN"" />
|
||||
<info name="developer" value="J.R.Lucas"/>
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="7556546">
|
||||
<rom name="demo8.wav" size="7556546" crc="baf9361f" sha1="30ab8a8ccafd65fbe82cbfbf5f77f27e0dfc4a78" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="martian" supported="no">
|
||||
<description>Martian Invaders (Bad?)</description>
|
||||
<year>1980?</year>
|
||||
<software name="eliza">
|
||||
<description>Eliza</description>
|
||||
<year>19??</year>
|
||||
<publisher><unknown></publisher>
|
||||
<info name="usage" value="Gives CRC Error" />
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="843548">
|
||||
<rom name="m- martian invaders (1980).wav" size="843548" crc="355d94ea" sha1="048ef7fa3a321cdcada962135de3f42161de86ab" offset="0" />
|
||||
<dataarea name="cass" size="5381548">
|
||||
<rom name="eliza.wav" size="5381548" crc="a1811e79" sha1="6a9eed4a9f4afd52fc8de318858717fcf9a8af77" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<!--
|
||||
The original tapes have died long ago, so these were loaded from the
|
||||
archived quickloads into MAME, then saved to wav files at 1200 baud.
|
||||
@ -281,9 +238,10 @@
|
||||
</software>
|
||||
<software name="revsi">
|
||||
<description>Reversi</description>
|
||||
<year>198?</year>
|
||||
<year>1979</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="308ES" />
|
||||
<info name="developer" value="Terry and Kathleen Beyer"/>
|
||||
<info name="usage" value="In Basic, CLOAD then RUN" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="10478390">
|
||||
@ -437,6 +395,301 @@
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<!--
|
||||
The original tapes have died long ago, so these were loaded from the
|
||||
archived quickloads into MAME, then saved to wav files at 1200 baud.
|
||||
Boot into the monitor and type LOG. This will Load and Run the program.
|
||||
-->
|
||||
<software name="atc">
|
||||
<description>Air Traffic Controller</description>
|
||||
<year>1979</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="500ES" />
|
||||
<info name="developer" value="David Mannering"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="2824614">
|
||||
<rom name="atc.wav" size="2824614" crc="c1bde1c3" sha1="dffc6cf0b710bb25fdddfcaad445d9af9ae1f098" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="chess1">
|
||||
<description>Sargon Chess</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="501V1ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="6366542">
|
||||
<rom name="chess1.wav" size="6366542" crc="04a98fe2" sha1="1e03968a8a867379e6d486a4fd2a8e2f8b7169ea" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="chess2" cloneof="chess1">
|
||||
<description>Chess</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="501V2ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="5951468">
|
||||
<rom name="chess2.wav" size="5951468" crc="353f6313" sha1="a1ab5a533aba0610a712cb37065452ab63c41003" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="fgam">
|
||||
<description>Fastgammon</description>
|
||||
<year>1979</year>
|
||||
<publisher>Quality Software</publisher>
|
||||
<info name="serial" value="502ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="5964438">
|
||||
<rom name="fgam.wav" size="5964438" crc="49731acf" sha1="3542902d3bc40c52d300382863ab330389d847f2" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="char">
|
||||
<description>Character Designer</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="503ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="3034584">
|
||||
<rom name="char.wav" size="3034584" crc="6d4574b0" sha1="6a08f5376d0a78816983941bb1df233e0d368af0" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="adv1">
|
||||
<description>Adventureland</description>
|
||||
<year>1979</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="504ES" />
|
||||
<info name="developer" value="Scott Adams"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="13450400">
|
||||
<rom name="adv1.wav" size="13450400" crc="c42434d2" sha1="4a3f5e2f366bb767897c705788ee38087c6dec33" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="adv3">
|
||||
<description>Mission Impossible</description>
|
||||
<year>1979</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="505ES" />
|
||||
<info name="developer" value="Scott Adams"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="13033704">
|
||||
<rom name="adv3.wav" size="13033704" crc="0b76a09b" sha1="01942e42aaba52bd8c336e5fb8258067874a1685" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="arrow">
|
||||
<description>Arrows and Alleys</description>
|
||||
<year>1980</year>
|
||||
<publisher>Quality Software</publisher>
|
||||
<info name="serial" value="506ES" />
|
||||
<info name="developer" value="Vic Tolomei"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="5533148">
|
||||
<rom name="arrow.wav" size="5533148" crc="46bcff96" sha1="5c3dc27a6e5db154c0d7578454e92536a47183ee" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="dfndr">
|
||||
<description>Defender</description>
|
||||
<year>1982</year>
|
||||
<publisher>System Software</publisher>
|
||||
<info name="serial" value="507ES" />
|
||||
<info name="developer" value="J Forster, N Leith, Leitronics"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="13867098">
|
||||
<rom name="dfndr.wav" size="13867098" crc="53f3805e" sha1="f70ec414c8e6f638a065bb258d17f7291831de69" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="chomp">
|
||||
<description>Chomp</description>
|
||||
<year>1981</year>
|
||||
<publisher>Global Software Network</publisher>
|
||||
<info name="serial" value="508R1ES" />
|
||||
<info name="developer" value="W. S. King"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="10950216">
|
||||
<rom name="chomp.wav" size="10950216" crc="c21cd588" sha1="fce7b56bd4252c991b5abfe81d3adf727990ffcc" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="ast">
|
||||
<description>Super Asteroids</description>
|
||||
<year>1981</year>
|
||||
<publisher>System Software</publisher>
|
||||
<info name="serial" value="509ES" />
|
||||
<info name="developer" value="Apollo"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="7659602">
|
||||
<rom name="ast.wav" size="7659602" crc="71091d7f" sha1="f6b2082dfb52d5868c3ffc1e1eae0712eb2a2e18" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="galax">
|
||||
<description>Galaxians (V1)</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="510V1ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="6991588">
|
||||
<rom name="galax.wav" size="6991588" crc="ea16a078" sha1="e7df201f008b6aa2693470d1a3306e45b4d63285" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="galx" cloneof="galax">
|
||||
<description>Galaxians (V2)</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="510V2ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="6977808">
|
||||
<rom name="galx.wav" size="6977808" crc="801e5109" sha1="e8b5d3bd44a6edbc8afbf47c38e1fdd21d63dc83" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="astro">
|
||||
<description>Astro Attacker</description>
|
||||
<year>1982</year>
|
||||
<publisher>Global Software Network</publisher>
|
||||
<info name="serial" value="511R1ES" />
|
||||
<info name="developer" value="David J. Ittner"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="12330830">
|
||||
<rom name="astro.wav" size="12330830" crc="e720676f" sha1="3a2a5cb8af24a7c0d646ac26d77ef644b894a745" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="spell">
|
||||
<description>Spellbinder Word Processing System</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="512ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="17617376">
|
||||
<rom name="spell.wav" size="17617376" crc="d80bcde5" sha1="b2bc223f7573800cefefae5350d0c3920c305125" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="ezy">
|
||||
<description>Ezyfile</description>
|
||||
<year>1981</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="513ES" />
|
||||
<info name="developer" value="Bob Stafford"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="6054424">
|
||||
<rom name="ezy.wav" size="6054424" crc="49995cbf" sha1="2033adc374a652fa71cfb06aae24b92cc1532d11" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="midas">
|
||||
<description>Midas</description>
|
||||
<year>1980</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="514ES" />
|
||||
<info name="developer" value="R.J.V. Stafford"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="4767850">
|
||||
<rom name="midas.wav" size="4767850" crc="7cf1cd32" sha1="3f36730eec648bc9f70be4ab1cce1ea8d2bcc121" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="l2x">
|
||||
<description>Level II Basic</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher><!-- Ported by Robbbert -->
|
||||
<info name="serial" value="517ES" />
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="11366914">
|
||||
<rom name="l2x.wav" size="11366914" crc="513e26b4" sha1="622bf808f04bffa453931a96e562496999ffa95c" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="hpad">
|
||||
<description>Memory Change (Hexpad)</description>
|
||||
<year>1980</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="519ES" />
|
||||
<info name="developer" value="Paul Grimshaw"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="1444810">
|
||||
<rom name="hpad.wav" size="1444810" crc="da63e036" sha1="df5a4876a0dbfda11838c46fe4e7ba2b47f28054" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="spx48">
|
||||
<description>Super-X 1.1</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="520ES" />
|
||||
<info name="usage" value="Boot to Basic, BYE, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="2199566">
|
||||
<rom name="spx48.wav" size="2199566" crc="c4bbb8af" sha1="3b290e41f76535a1c7e73de6b2790e87706368e7" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="minva">
|
||||
<description>Martian Invaders</description>
|
||||
<year>1980</year>
|
||||
<publisher>Quality Software</publisher>
|
||||
<info name="serial" value="526ES" />
|
||||
<info name="developer" value="James Albanese"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="3241312">
|
||||
<rom name="minva.wav" size="3241312" crc="fb292cff" sha1="834533b0efbd98d1ec897d33bf11315e3e4c436a" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="kilo">
|
||||
<description>Kilopede</description>
|
||||
<year>1982</year>
|
||||
<publisher>System Software</publisher>
|
||||
<info name="serial" value="527ES" />
|
||||
<info name="developer" value="Matthew B. Hickey"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="7199938">
|
||||
<rom name="kilo.wav" size="7199938" crc="b68041d0" sha1="22425770ca5c98b1c4a2f3bf7f92780eeb477103" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
<software name="amaze">
|
||||
<description>Amazing Maze</description>
|
||||
<year>198?</year>
|
||||
<publisher>unknown</publisher>
|
||||
<info name="serial" value="528ES" />
|
||||
<info name="developer" value="Brian Wyvill"/>
|
||||
<info name="usage" value="Boot to Monitor, LOG" />
|
||||
<part name="cass" interface="sorcerer_cass">
|
||||
<dataarea name="cass" size="4074706">
|
||||
<rom name="amaze.wav" size="4074706" crc="13d88dfc" sha1="7ea94abdd1df0b893b0121cd7ba233ca77bce8c6" offset="0" />
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
|
||||
</softwarelist>
|
||||
|
@ -170,22 +170,18 @@ float GetSpotAddend(float2 coord, float amount)
|
||||
return saturate(SigmoidSpot);
|
||||
}
|
||||
|
||||
float GetRoundCornerFactor(float2 coord, float radiusAmount, float smoothAmount)
|
||||
float GetRoundCornerFactor(float2 coord, float2 bounds, float radiusAmount, float smoothAmount)
|
||||
{
|
||||
// reduce smooth amount down to radius amount
|
||||
smoothAmount = min(smoothAmount, radiusAmount);
|
||||
|
||||
float2 quadDims = QuadDims;
|
||||
quadDims = SwapXY
|
||||
? quadDims.yx
|
||||
: quadDims.xy;
|
||||
|
||||
float range = min(quadDims.x, quadDims.y) * 0.5;
|
||||
float radius = range * max(radiusAmount, 0.0025f);
|
||||
float smooth = 1.0 / (range * max(smoothAmount, 0.0025f));
|
||||
float range = min(bounds.x, bounds.y);
|
||||
float amountMinimum = range > 0.0f ? 1.0f / range : 0.0f;
|
||||
float radius = range * max(radiusAmount, amountMinimum);
|
||||
float smooth = 1.0f / (range * max(smoothAmount, amountMinimum * 3.0f));
|
||||
|
||||
// compute box
|
||||
float box = roundBox(quadDims * (coord * 2.0f), quadDims, radius);
|
||||
float box = roundBox(bounds * (coord * 2.0f), bounds, radius);
|
||||
|
||||
// apply smooth
|
||||
box *= smooth;
|
||||
@ -279,8 +275,11 @@ float4 ps_main(PS_INPUT Input) : COLOR
|
||||
|
||||
// Round Corners Simulation
|
||||
float2 RoundCornerCoord = CornerCoordCentered;
|
||||
float2 RoundCornerBounds = SwapXY
|
||||
? QuadDims.yx
|
||||
: QuadDims.xy;
|
||||
|
||||
float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerAmount, SmoothBorderAmount);
|
||||
float roundCornerFactor = GetRoundCornerFactor(RoundCornerCoord, RoundCornerBounds, RoundCornerAmount * 0.5f, SmoothBorderAmount * 0.5f);
|
||||
BaseColor.rgb *= roundCornerFactor;
|
||||
|
||||
return BaseColor;
|
||||
|
10
hlsl/post.fx
10
hlsl/post.fx
@ -98,7 +98,7 @@ VS_OUTPUT vs_main(VS_INPUT Input)
|
||||
|
||||
Output.TexCoord = Input.TexCoord;
|
||||
Output.TexCoord += PrepareBloom
|
||||
? 0.0f / TargetDims // use half texel offset (DX9) to do the blur for first bloom layer
|
||||
? 0.0f // use half texel offset (DX9) to do the blur for first bloom layer
|
||||
: 0.5f / TargetDims; // fix half texel offset (DX9)
|
||||
|
||||
Output.ScreenCoord = Input.Position.xy / ScreenDims;
|
||||
@ -252,7 +252,13 @@ float4 ps_main(PS_INPUT Input) : COLOR
|
||||
|
||||
float ColorBrightness = 0.299f * BaseColor.r + 0.587f * BaseColor.g + 0.114 * BaseColor.b;
|
||||
|
||||
float ScanlineCoord = SourceCoord.y * SourceDims.y * ScanlineScale * PI;
|
||||
float ScanlineCoord = SourceCoord.y;
|
||||
ScanlineCoord += QuadDims.y <= SourceDims.y * 2.0f
|
||||
? 0.5f / QuadDims.y // uncenter scanlines if the quad is less than twice the size of the source
|
||||
: 0.0f;
|
||||
|
||||
ScanlineCoord *= SourceDims.y * ScanlineScale * PI;
|
||||
|
||||
float ScanlineCoordJitter = ScanlineOffset * PHI;
|
||||
float ScanlineSine = sin(ScanlineCoord + ScanlineCoordJitter);
|
||||
float ScanlineWide = ScanlineHeight + ScanlineVariation * max(1.0f, ScanlineHeight) * (1.0f - ColorBrightness);
|
||||
|
@ -1,5 +1,5 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Ryan Holtz
|
||||
// copyright-holders:Ryan Holtz,ImJezze
|
||||
//-----------------------------------------------------------------------------
|
||||
// Vector Effect
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -13,7 +13,7 @@ struct VS_OUTPUT
|
||||
float4 Position : POSITION;
|
||||
float4 Color : COLOR0;
|
||||
float2 TexCoord : TEXCOORD0;
|
||||
float2 LineInfo : TEXCOORD1;
|
||||
float2 SizeInfo : TEXCOORD1;
|
||||
};
|
||||
|
||||
struct VS_INPUT
|
||||
@ -21,16 +21,26 @@ struct VS_INPUT
|
||||
float3 Position : POSITION;
|
||||
float4 Color : COLOR0;
|
||||
float2 TexCoord : TEXCOORD0;
|
||||
float2 LineInfo : TEXCOORD1;
|
||||
float2 SizeInfo : TEXCOORD1;
|
||||
};
|
||||
|
||||
struct PS_INPUT
|
||||
{
|
||||
float4 Color : COLOR0;
|
||||
float2 TexCoord : TEXCOORD0;
|
||||
float2 LineInfo : TEXCOORD1; // x is the line length, y is unused
|
||||
float2 SizeInfo : TEXCOORD1;
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Functions
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// www.iquilezles.org/www/articles/distfunctions/distfunctions.htm
|
||||
float roundBox(float2 p, float2 b, float r)
|
||||
{
|
||||
return length(max(abs(p) - b + r, 0.0f)) - r;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Vector Vertex Shader
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -49,7 +59,7 @@ VS_OUTPUT vs_main(VS_INPUT Input)
|
||||
Output.Position.xy *= 2.0f; // zoom
|
||||
|
||||
Output.TexCoord = Input.TexCoord;
|
||||
Output.LineInfo = Input.LineInfo;
|
||||
Output.SizeInfo = Input.SizeInfo;
|
||||
|
||||
Output.Color = Input.Color;
|
||||
|
||||
@ -64,10 +74,35 @@ uniform float TimeRatio; // Frame time of the vector (not set)
|
||||
uniform float TimeScale; // How much frame time affects the vector's fade (not set)
|
||||
uniform float LengthRatio; // Size at which fade is maximum
|
||||
uniform float LengthScale; // How much length affects the vector's fade
|
||||
uniform float BeamSmooth;
|
||||
|
||||
float GetRoundCornerFactor(float2 coord, float2 bounds, float radiusAmount, float smoothAmount)
|
||||
{
|
||||
// reduce smooth amount down to radius amount
|
||||
smoothAmount = min(smoothAmount, radiusAmount);
|
||||
|
||||
float range = min(bounds.x, bounds.y);
|
||||
float amountMinimum = range > 0.0f ? 1.0f / range : 0.0f;
|
||||
float radius = range * max(radiusAmount, amountMinimum);
|
||||
float smooth = 1.0f / (range * max(smoothAmount, amountMinimum * 3.0f));
|
||||
|
||||
// compute box
|
||||
float box = roundBox(bounds * (coord * 2.0f), bounds, radius);
|
||||
|
||||
// apply smooth
|
||||
box *= smooth;
|
||||
box += 1.0f - pow(smooth * 0.5f, 0.5f);
|
||||
|
||||
float border = smoothstep(1.0f, 0.0f, box);
|
||||
|
||||
return saturate(border);
|
||||
}
|
||||
|
||||
float4 ps_main(PS_INPUT Input) : COLOR
|
||||
{
|
||||
float lineLength = Input.LineInfo.x / max(QuadDims.x, QuadDims.y); // normalize
|
||||
float2 lineSize = Input.SizeInfo / max(QuadDims.x, QuadDims.y); // normalize
|
||||
|
||||
float lineLength = lineSize.x;
|
||||
float lineLengthRatio = LengthRatio;
|
||||
float lineLengthScale = LengthScale;
|
||||
|
||||
@ -78,6 +113,9 @@ float4 ps_main(PS_INPUT Input) : COLOR
|
||||
float4 outColor = float4(timeLengthModulate, timeLengthModulate, timeLengthModulate, 1.0f);
|
||||
outColor *= Input.Color;
|
||||
|
||||
float RoundCornerFactor = GetRoundCornerFactor(Input.TexCoord - 0.5f, Input.SizeInfo, 1.0f, BeamSmooth);
|
||||
outColor.rgb *= RoundCornerFactor;
|
||||
|
||||
return outColor;
|
||||
}
|
||||
|
||||
|
@ -6,8 +6,7 @@ gamma 0.50
|
||||
#
|
||||
# CORE VECTOR OPTIONS
|
||||
#
|
||||
antialias 1
|
||||
beam_width_min 0.75
|
||||
beam_width_min 1.00
|
||||
beam_width_max 4.00
|
||||
beam_intensity_weight 0.75
|
||||
flicker 0.15
|
||||
@ -48,6 +47,7 @@ yiq_enable 0
|
||||
#
|
||||
# VECTOR POST-PROCESSING OPTIONS
|
||||
#
|
||||
vector_beam_smooth 0.0
|
||||
vector_length_scale 0.5
|
||||
vector_length_ratio 0.5
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
#
|
||||
# CORE VECTOR OPTIONS
|
||||
#
|
||||
antialias 1
|
||||
beam_width_min 0.75
|
||||
beam_width_min 1.00
|
||||
beam_width_max 4.00
|
||||
beam_intensity_weight 0.75
|
||||
flicker 0.15
|
||||
@ -51,6 +50,7 @@ yiq_enable 0
|
||||
#
|
||||
# VECTOR POST-PROCESSING OPTIONS
|
||||
#
|
||||
vector_beam_smooth 0.0
|
||||
vector_length_scale 0.5
|
||||
vector_length_ratio 0.5
|
||||
|
||||
|
79
makefile
79
makefile
@ -1043,27 +1043,31 @@ ifdef FASTBUILD
|
||||
$(SILENT) fbuild.exe -config $(PROJECTDIR_WIN)/vs2015-fastbuild/ftbuild.bff $(FASTBUILD_PARAMS)
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
# android-ndk
|
||||
#-------------------------------------------------
|
||||
|
||||
.PHONY: android-ndk
|
||||
android-ndk:
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_ROOT
|
||||
$(error ANDROID_NDK_ROOT is not set)
|
||||
endif
|
||||
|
||||
#-------------------------------------------------
|
||||
# android-arm
|
||||
#-------------------------------------------------
|
||||
|
||||
$(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile $(SCRIPTS) $(GENIE)
|
||||
$(PROJECTDIR_SDL)/gmake-android-arm/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE)
|
||||
ifndef ANDROID_NDK_ARM
|
||||
$(error ANDROID_NDK_ARM is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
|
||||
|
||||
.PHONY: android-arm
|
||||
android-arm: generate $(PROJECTDIR_SDL)/gmake-android-arm/Makefile
|
||||
ifndef ANDROID_NDK_ARM
|
||||
$(error ANDROID_NDK_ARM is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG) precompile
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm config=$(CONFIG)
|
||||
|
||||
@ -1071,23 +1075,14 @@ endif
|
||||
# android-arm64
|
||||
#-------------------------------------------------
|
||||
|
||||
$(PROJECTDIR_SDL)/gmake-android-arm64/Makefile: makefile $(SCRIPTS) $(GENIE)
|
||||
$(PROJECTDIR_SDL)/gmake-android-arm64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE)
|
||||
ifndef ANDROID_NDK_ARM64
|
||||
$(error ANDROID_NDK_ARM64 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-arm64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=arm64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
|
||||
|
||||
.PHONY: android-arm64
|
||||
android-arm64: generate $(PROJECTDIR_SDL)/gmake-android-arm64/Makefile
|
||||
ifndef ANDROID_NDK_ARM64
|
||||
$(error ANDROID_NDK_ARM64 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG) precompile
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-arm64 config=$(CONFIG)
|
||||
|
||||
@ -1095,23 +1090,14 @@ endif
|
||||
# android-mips
|
||||
#-------------------------------------------------
|
||||
|
||||
$(PROJECTDIR_SDL)/gmake-android-mips/Makefile: makefile $(SCRIPTS) $(GENIE)
|
||||
$(PROJECTDIR_SDL)/gmake-android-mips/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE)
|
||||
ifndef ANDROID_NDK_MIPS
|
||||
$(error ANDROID_NDK_MIPS is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
|
||||
|
||||
.PHONY: android-mips
|
||||
android-mips: generate $(PROJECTDIR_SDL)/gmake-android-mips/Makefile
|
||||
ifndef ANDROID_NDK_MIPS
|
||||
$(error ANDROID_NDK_MIPS is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG) precompile
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips config=$(CONFIG)
|
||||
|
||||
@ -1119,23 +1105,14 @@ endif
|
||||
# android-mips64
|
||||
#-------------------------------------------------
|
||||
|
||||
$(PROJECTDIR_SDL)/gmake-android-mips64/Makefile: makefile $(SCRIPTS) $(GENIE)
|
||||
$(PROJECTDIR_SDL)/gmake-android-mips64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE)
|
||||
ifndef ANDROID_NDK_MIPS64
|
||||
$(error ANDROID_NDK_MIPS64 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-mips64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=mips64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 --NOASM=1 gmake
|
||||
|
||||
.PHONY: android-mips64
|
||||
android-mips64: generate $(PROJECTDIR_SDL)/gmake-android-mips64/Makefile
|
||||
ifndef ANDROID_NDK_MIPS64
|
||||
$(error ANDROID_NDK_MIPS64 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG) precompile
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-mips64 config=$(CONFIG)
|
||||
|
||||
@ -1143,23 +1120,14 @@ endif
|
||||
# android-x86
|
||||
#-------------------------------------------------
|
||||
|
||||
$(PROJECTDIR_SDL)/gmake-android-x86/Makefile: makefile $(SCRIPTS) $(GENIE)
|
||||
$(PROJECTDIR_SDL)/gmake-android-x86/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE)
|
||||
ifndef ANDROID_NDK_X86
|
||||
$(error ANDROID_NDK_X86 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-x86 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x86 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake
|
||||
|
||||
.PHONY: android-x86
|
||||
android-x86: generate $(PROJECTDIR_SDL)/gmake-android-x86/Makefile
|
||||
ifndef ANDROID_NDK_X86
|
||||
$(error ANDROID_NDK_X86 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG) precompile
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x86 config=$(CONFIG)
|
||||
|
||||
@ -1167,23 +1135,14 @@ endif
|
||||
# android-x64
|
||||
#-------------------------------------------------
|
||||
|
||||
$(PROJECTDIR_SDL)/gmake-android-x64/Makefile: makefile $(SCRIPTS) $(GENIE)
|
||||
$(PROJECTDIR_SDL)/gmake-android-x64/Makefile: makefile android-ndk $(SCRIPTS) $(GENIE)
|
||||
ifndef ANDROID_NDK_X64
|
||||
$(error ANDROID_NDK_X64 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(GENIE) $(PARAMS) --gcc=android-x64 --gcc_version=3.8.0 --osd=sdl --targetos=android --PLATFORM=x64 --NO_USE_MIDI=1 --NO_OPENGL=1 --USE_QTDEBUG=0 --NO_X11=1 --DONT_USE_NETWORK=1 gmake
|
||||
|
||||
.PHONY: android-x64
|
||||
android-x64: generate $(PROJECTDIR_SDL)/gmake-android-x64/Makefile
|
||||
ifndef ANDROID_NDK_X64
|
||||
$(error ANDROID_NDK_X64 is not set)
|
||||
endif
|
||||
ifndef ANDROID_NDK_LLVM
|
||||
$(error ANDROID_NDK_LLVM is not set)
|
||||
endif
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG) precompile
|
||||
$(SILENT) $(MAKE) $(MAKEPARAMS) -C $(PROJECTDIR_SDL)/gmake-android-x64 config=$(CONFIG)
|
||||
|
||||
|
@ -574,6 +574,19 @@ if (BUSES["ECONET"]~=null) then
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/electron/exp.h,BUSES["ELECTRON"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["ELECTRON"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/electron/exp.cpp",
|
||||
MAME_DIR .. "src/devices/bus/electron/exp.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/ep64/exp.h,BUSES["EP64"] = true
|
||||
|
@ -1449,7 +1449,7 @@ end
|
||||
|
||||
--------------------------------------------------
|
||||
-- PATINHO FEIO - Escola Politecnica - USP (Brazil)
|
||||
--@src/devices/cpu/patinhofeio/patinho_feio.h,CPUS["PATINHOFEIO"] = true
|
||||
--@src/devices/cpu/patinhofeio/patinhofeio_cpu.h,CPUS["PATINHOFEIO"] = true
|
||||
--------------------------------------------------
|
||||
|
||||
if (CPUS["PATINHOFEIO"]~=null) then
|
||||
|
@ -145,6 +145,8 @@ project "formats"
|
||||
MAME_DIR .. "src/lib/formats/adam_cas.h",
|
||||
MAME_DIR .. "src/lib/formats/adam_dsk.cpp",
|
||||
MAME_DIR .. "src/lib/formats/adam_dsk.h",
|
||||
MAME_DIR .. "src/lib/formats/afs_dsk.cpp",
|
||||
MAME_DIR .. "src/lib/formats/afs_dsk.h",
|
||||
MAME_DIR .. "src/lib/formats/ami_dsk.cpp",
|
||||
MAME_DIR .. "src/lib/formats/ami_dsk.h",
|
||||
MAME_DIR .. "src/lib/formats/ap2_dsk.cpp",
|
||||
|
@ -96,6 +96,8 @@ function osdmodulesbuild()
|
||||
MAME_DIR .. "src/osd/modules/output/none.cpp",
|
||||
MAME_DIR .. "src/osd/modules/output/console.cpp",
|
||||
MAME_DIR .. "src/osd/modules/output/network.cpp",
|
||||
MAME_DIR .. "src/osd/modules/output/win32_output.cpp",
|
||||
MAME_DIR .. "src/osd/modules/output/win32_output.h",
|
||||
MAME_DIR .. "src/osd/modules/ipc/tcp_connection.cpp",
|
||||
MAME_DIR .. "src/osd/modules/ipc/tcp_connection.h",
|
||||
MAME_DIR .. "src/osd/modules/ipc/tcp_server.cpp",
|
||||
|
@ -259,3 +259,35 @@ project ("ocore_" .. _OPTIONS["osd"])
|
||||
MAME_DIR .. "src/osd/modules/file/winsocket.cpp",
|
||||
MAME_DIR .. "src/osd/modules/lib/osdlib_win32.cpp",
|
||||
}
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------
|
||||
-- ledutil
|
||||
--------------------------------------------------
|
||||
|
||||
if _OPTIONS["with-tools"] then
|
||||
project("ledutil")
|
||||
uuid ("061293ca-7290-44ac-b2b5-5913ae8dc9c0")
|
||||
kind "ConsoleApp"
|
||||
|
||||
flags {
|
||||
"Symbols", -- always include minimum symbols for executables
|
||||
}
|
||||
|
||||
if _OPTIONS["SEPARATE_BIN"]~="1" then
|
||||
targetdir(MAME_DIR)
|
||||
end
|
||||
|
||||
links {
|
||||
"ocore_" .. _OPTIONS["osd"],
|
||||
}
|
||||
|
||||
includedirs {
|
||||
MAME_DIR .. "src/osd",
|
||||
}
|
||||
|
||||
files {
|
||||
MAME_DIR .. "src/osd/windows/ledutil.cpp",
|
||||
}
|
||||
end
|
||||
|
@ -618,6 +618,7 @@ BUSES["CRVISION"] = true
|
||||
BUSES["DMV"] = true
|
||||
BUSES["ECBBUS"] = true
|
||||
BUSES["ECONET"] = true
|
||||
BUSES["ELECTRON"] = true
|
||||
BUSES["EP64"] = true
|
||||
BUSES["EPSON_SIO"] = true
|
||||
BUSES["GAMEBOY"] = true
|
||||
@ -1067,7 +1068,7 @@ files {
|
||||
MAME_DIR .. "src/mame/machine/xbox.cpp",
|
||||
MAME_DIR .. "src/mame/includes/saturn.h",
|
||||
MAME_DIR .. "src/mame/drivers/saturn.cpp",
|
||||
MAME_DIR .. "src/mame/machine/saturn.cpp",
|
||||
MAME_DIR .. "src/mame/machine/saturn.cpp",
|
||||
}
|
||||
end
|
||||
--------------------------------------------------
|
||||
@ -1859,6 +1860,8 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/ipc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/ipds.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/isbc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/isbc8010.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/isbc8030.cpp",
|
||||
MAME_DIR .. "src/mame/machine/isbc_215g.cpp",
|
||||
MAME_DIR .. "src/mame/machine/isbc_215g.h",
|
||||
MAME_DIR .. "src/mame/drivers/rex6000.cpp",
|
||||
@ -2611,6 +2614,7 @@ files {
|
||||
MAME_DIR .. "src/mame/drivers/sun1.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/sun2.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/sun3.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/sun3x.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/sun4.cpp",
|
||||
}
|
||||
|
||||
|
@ -95,6 +95,8 @@ function toolchain(_buildDir, _subDir)
|
||||
local androidPlatform = "android-14"
|
||||
if _OPTIONS["with-android"] then
|
||||
androidPlatform = "android-" .. _OPTIONS["with-android"]
|
||||
elseif _OPTIONS["PLATFORM"]:find("64", -2) then
|
||||
androidPlatform = "android-21"
|
||||
end
|
||||
|
||||
local iosPlatform = ""
|
||||
@ -115,73 +117,40 @@ function toolchain(_buildDir, _subDir)
|
||||
end
|
||||
|
||||
if string.find(_OPTIONS["gcc"], "android") then
|
||||
if not os.getenv("ANDROID_NDK_LLVM") then
|
||||
print("Set ANDROID_NDK_LLVM envrionment variables.")
|
||||
-- 64-bit android platform requires >= 21
|
||||
if _OPTIONS["PLATFORM"]:find("64", -2) and tonumber(androidPlatform:sub(9)) < 21 then
|
||||
error("64-bit android requires platform 21 or higher")
|
||||
end
|
||||
if not os.getenv("ANDROID_NDK_ROOT") then
|
||||
print("Set ANDROID_NDK_ROOT environment variable.")
|
||||
end
|
||||
if not os.getenv("ANDROID_NDK_LLVM") then
|
||||
print("Set ANDROID_NDK_LLVM envrionment variable.")
|
||||
end
|
||||
platform_ndk_env = "ANDROID_NDK_" .. _OPTIONS["PLATFORM"]:upper()
|
||||
if not os.getenv(platform_ndk_env) then
|
||||
print("Set " .. platform_ndk_env .. " environment variable.")
|
||||
end
|
||||
|
||||
local platformToolchainMap = {
|
||||
['arm'] = "arm-linux-androideabi",
|
||||
['arm64'] = "aarch64-linux-android",
|
||||
['mips64'] = "mips64el-linux-android",
|
||||
['mips'] = "mipsel-linux-android",
|
||||
['x86'] = "i686-linux-android",
|
||||
['x64'] = "x86_64-linux-android",
|
||||
}
|
||||
|
||||
toolchainPrefix = os.getenv(platform_ndk_env) .. "/bin/" .. platformToolchainMap[_OPTIONS["PLATFORM"]] .. "-"
|
||||
|
||||
premake.gcc.cc = "$(ANDROID_NDK_LLVM)/bin/clang"
|
||||
premake.gcc.cxx = "$(ANDROID_NDK_LLVM)/bin/clang++"
|
||||
premake.gcc.ar = toolchainPrefix .. "ar"
|
||||
premake.gcc.llvm = true
|
||||
|
||||
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-" .. _OPTIONS["PLATFORM"])
|
||||
end
|
||||
|
||||
if "android-arm" == _OPTIONS["gcc"] then
|
||||
if not os.getenv("ANDROID_NDK_ARM") then
|
||||
print("Set ANDROID_NDK_ARM envrionment variables.")
|
||||
end
|
||||
|
||||
premake.gcc.ar = "$(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-ar"
|
||||
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm")
|
||||
end
|
||||
|
||||
if "android-arm64" == _OPTIONS["gcc"] then
|
||||
if not os.getenv("ANDROID_NDK_ARM64") then
|
||||
print("Set ANDROID_NDK_ARM64 envrionment variables.")
|
||||
end
|
||||
|
||||
premake.gcc.ar = "$(ANDROID_NDK_ARM64)/bin/aarch64-linux-android-ar"
|
||||
premake.gcc.llvm = true
|
||||
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-arm64")
|
||||
end
|
||||
|
||||
if "android-mips" == _OPTIONS["gcc"] then
|
||||
if not os.getenv("ANDROID_NDK_MIPS") then
|
||||
print("Set ANDROID_NDK_MIPS envrionment variables.")
|
||||
end
|
||||
|
||||
premake.gcc.ar = "$(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-ar"
|
||||
premake.gcc.llvm = true
|
||||
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips")
|
||||
end
|
||||
|
||||
if "android-mips64" == _OPTIONS["gcc"] then
|
||||
if not os.getenv("ANDROID_NDK_MIPS64") then
|
||||
print("Set ANDROID_NDK_MIPS64 envrionment variables.")
|
||||
end
|
||||
|
||||
premake.gcc.ar = "$(ANDROID_NDK_MIPS64)/bin/mips64el-linux-android-ar"
|
||||
premake.gcc.llvm = true
|
||||
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-mips64")
|
||||
end
|
||||
|
||||
if "android-x86" == _OPTIONS["gcc"] then
|
||||
if not os.getenv("ANDROID_NDK_X86") then
|
||||
print("Set ANDROID_NDK_X86 envrionment variables.")
|
||||
end
|
||||
|
||||
premake.gcc.ar = "$(ANDROID_NDK_X86)/bin/i686-linux-android-ar"
|
||||
premake.gcc.llvm = true
|
||||
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x86")
|
||||
end
|
||||
|
||||
if "android-x64" == _OPTIONS["gcc"] then
|
||||
if not os.getenv("ANDROID_NDK_X64") then
|
||||
print("Set ANDROID_NDK_X64 envrionment variables.")
|
||||
end
|
||||
|
||||
premake.gcc.ar = "$(ANDROID_NDK_X64)/bin/x86_64-linux-android-ar"
|
||||
premake.gcc.llvm = true
|
||||
location (_buildDir .. "projects/" .. _subDir .. "/".. _ACTION .. "-android-x64")
|
||||
end
|
||||
if "asmjs" == _OPTIONS["gcc"] then
|
||||
|
||||
if not os.getenv("EMSCRIPTEN") then
|
||||
@ -804,6 +773,8 @@ function toolchain(_buildDir, _subDir)
|
||||
targetdir (_buildDir .. "openbsd" .. "/bin/x64/Debug")
|
||||
|
||||
configuration { "android-*" }
|
||||
targetdir (_buildDir .. "android-" .. _OPTIONS["PLATFORM"] .. "/bin")
|
||||
objdir (_buildDir .. "android-" .. _OPTIONS["PLATFORM"] .. "/obj")
|
||||
includedirs {
|
||||
MAME_DIR .. "3rdparty/bgfx/3rdparty/khronos",
|
||||
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libcxx/include",
|
||||
@ -848,8 +819,6 @@ function toolchain(_buildDir, _subDir)
|
||||
|
||||
|
||||
configuration { "android-arm" }
|
||||
targetdir (_buildDir .. "android-arm" .. "/bin")
|
||||
objdir (_buildDir .. "android-arm" .. "/obj")
|
||||
libdirs {
|
||||
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a",
|
||||
"$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm/usr/lib",
|
||||
@ -876,9 +845,6 @@ function toolchain(_buildDir, _subDir)
|
||||
}
|
||||
|
||||
configuration { "android-arm64" }
|
||||
androidPlatform = "android-21" -- supported from API 21
|
||||
targetdir (_buildDir .. "android-arm64" .. "/bin")
|
||||
objdir (_buildDir .. "android-arm64" .. "/obj")
|
||||
libdirs {
|
||||
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/arm64-v8a",
|
||||
"$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-arm64/usr/lib64",
|
||||
@ -899,8 +865,6 @@ function toolchain(_buildDir, _subDir)
|
||||
}
|
||||
|
||||
configuration { "android-mips" }
|
||||
targetdir (_buildDir .. "android-mips" .. "/bin")
|
||||
objdir (_buildDir .. "android-mips" .. "/obj")
|
||||
libdirs {
|
||||
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/mips",
|
||||
"$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips/usr/lib/",
|
||||
@ -921,9 +885,6 @@ function toolchain(_buildDir, _subDir)
|
||||
}
|
||||
|
||||
configuration { "android-mips64" }
|
||||
androidPlatform = "android-21" -- supported from API 21
|
||||
targetdir (_buildDir .. "android-mips64" .. "/bin")
|
||||
objdir (_buildDir .. "android-mips64" .. "/obj")
|
||||
libdirs {
|
||||
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/mips64",
|
||||
"$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-mips64/usr/lib64/",
|
||||
@ -944,8 +905,6 @@ function toolchain(_buildDir, _subDir)
|
||||
}
|
||||
|
||||
configuration { "android-x86" }
|
||||
targetdir (_buildDir .. "android-x86" .. "/bin")
|
||||
objdir (_buildDir .. "android-x86" .. "/obj")
|
||||
libdirs {
|
||||
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86",
|
||||
"$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86/usr/lib",
|
||||
@ -968,9 +927,6 @@ function toolchain(_buildDir, _subDir)
|
||||
}
|
||||
|
||||
configuration { "android-x64" }
|
||||
androidPlatform = "android-21" -- supported from API 21
|
||||
targetdir (_buildDir .. "android-x64" .. "/bin")
|
||||
objdir (_buildDir .. "android-x64" .. "/obj")
|
||||
libdirs {
|
||||
"$(ANDROID_NDK_ROOT)/sources/cxx-stl/llvm-libc++/libs/x86_64",
|
||||
"$(ANDROID_NDK_ROOT)/platforms/" .. androidPlatform .. "/arch-x86_64/usr/lib64",
|
||||
@ -1092,22 +1048,10 @@ function strip()
|
||||
"$(SILENT) " .. (_OPTIONS['TOOLCHAIN'] and toolchainPrefix) .. "strip \"$(TARGET)\"",
|
||||
}
|
||||
|
||||
configuration { "android-arm", "Release" }
|
||||
configuration { "android-*", "Release" }
|
||||
postbuildcommands {
|
||||
"$(SILENT) echo Stripping symbols.",
|
||||
"$(SILENT) $(ANDROID_NDK_ARM)/bin/arm-linux-androideabi-strip -s \"$(TARGET)\""
|
||||
}
|
||||
|
||||
configuration { "android-mips", "Release" }
|
||||
postbuildcommands {
|
||||
"$(SILENT) echo Stripping symbols.",
|
||||
"$(SILENT) $(ANDROID_NDK_MIPS)/bin/mipsel-linux-android-strip -s \"$(TARGET)\""
|
||||
}
|
||||
|
||||
configuration { "android-x86", "Release" }
|
||||
postbuildcommands {
|
||||
"$(SILENT) echo Stripping symbols.",
|
||||
"$(SILENT) $(ANDROID_NDK_X86)/bin/i686-linux-android-strip -s \"$(TARGET)\""
|
||||
"$(SILENT) " .. toolchainPrefix .. "strip -s \"$(TARGET)\""
|
||||
}
|
||||
|
||||
configuration { "linux-* or rpi", "Release" }
|
||||
|
@ -53,7 +53,7 @@
|
||||
|
||||
#include "e01.h"
|
||||
#include "bus/scsi/scsihd.h"
|
||||
|
||||
#include "softlist.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -166,6 +166,10 @@ WRITE_LINE_MEMBER( e01_device::clk_en_w )
|
||||
m_clk_en = state;
|
||||
}
|
||||
|
||||
FLOPPY_FORMATS_MEMBER( floppy_formats_afs )
|
||||
FLOPPY_AFS_FORMAT
|
||||
FLOPPY_FORMATS_END0
|
||||
|
||||
static SLOT_INTERFACE_START( e01_floppies )
|
||||
SLOT_INTERFACE( "35dd", FLOPPY_35_DD ) // NEC FD1036 A
|
||||
SLOT_INTERFACE_END
|
||||
@ -253,8 +257,9 @@ static MACHINE_CONFIG_FRAGMENT( e01 )
|
||||
MCFG_WD2793_ADD(WD2793_TAG, XTAL_8MHz/4)
|
||||
MCFG_WD_FDC_INTRQ_CALLBACK(WRITELINE(e01_device, fdc_irq_w))
|
||||
MCFG_WD_FDC_DRQ_CALLBACK(WRITELINE(e01_device, fdc_drq_w))
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", e01_floppies, "35dd", floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", e01_floppies, "35dd", floppy_image_device::default_floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":0", e01_floppies, "35dd", floppy_formats_afs)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD2793_TAG":1", e01_floppies, "35dd", floppy_formats_afs)
|
||||
MCFG_SOFTWARE_LIST_ADD("flop_ls_e01", "e01_flop")
|
||||
|
||||
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
|
||||
MCFG_CENTRONICS_ACK_HANDLER(DEVWRITELINE(R6522_TAG, via6522_device, write_ca1))
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include "machine/mc6854.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/wd_fdc.h"
|
||||
#include "formats/afs_dsk.h"
|
||||
|
||||
class e01_device : public device_t,
|
||||
public device_econet_interface
|
||||
@ -37,6 +38,8 @@ public:
|
||||
TYPE_E01S
|
||||
};
|
||||
|
||||
DECLARE_FLOPPY_FORMATS(floppy_formats_afs);
|
||||
|
||||
DECLARE_READ8_MEMBER( read );
|
||||
DECLARE_WRITE8_MEMBER( write );
|
||||
DECLARE_READ8_MEMBER( ram_select_r );
|
||||
|
104
src/devices/bus/electron/exp.cpp
Normal file
104
src/devices/bus/electron/exp.cpp
Normal file
@ -0,0 +1,104 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
Electron Expansion Port emulation
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "exp.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type ELECTRON_EXPANSION_SLOT = &device_creator<electron_expansion_slot_device>;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE ELECTRON_EXPANSION CARD INTERFACE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_electron_expansion_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_electron_expansion_interface::device_electron_expansion_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_slot_card_interface(mconfig, device)
|
||||
{
|
||||
m_slot = dynamic_cast<electron_expansion_slot_device *>(device.owner());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ~device_electron_expansion_card_interface - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_electron_expansion_interface::~device_electron_expansion_interface()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// electron_expansion_slot_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
electron_expansion_slot_device::electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, ELECTRON_EXPANSION_SLOT, "Expansion port", tag, owner, clock, "electron_expansion_slot", __FILE__),
|
||||
device_slot_interface(mconfig, *this)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void electron_expansion_slot_device::device_start()
|
||||
{
|
||||
m_card = dynamic_cast<device_electron_expansion_interface *>(get_card_device());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void electron_expansion_slot_device::device_reset()
|
||||
{
|
||||
if (get_card_device())
|
||||
{
|
||||
get_card_device()->reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( electron_expansion_devices )
|
||||
//-------------------------------------------------
|
||||
|
||||
|
||||
// slot devices
|
||||
//#include "plus1.h"
|
||||
//#include "plus3.h"
|
||||
//#include "aplus3.h"
|
||||
//#include "aplus5.h"
|
||||
//#include "slogger.h"
|
||||
//#include "fbjoy.h"
|
||||
//#include "m2105.h"
|
||||
|
||||
|
||||
SLOT_INTERFACE_START( electron_expansion_devices )
|
||||
//SLOT_INTERFACE("plus1", ELECTRON_PLUS1)
|
||||
//SLOT_INTERFACE("plus3", ELECTRON_PLUS3)
|
||||
//SLOT_INTERFACE("aplus3", ELECTRON_APLUS3)
|
||||
//SLOT_INTERFACE("aplus5", ELECTRON_APLUS5)
|
||||
//SLOT_INTERFACE("slogger", ELECTRON_SLOGGER)
|
||||
//SLOT_INTERFACE("fbjoy", ELECTRON_FBJOY)
|
||||
//SLOT_INTERFACE("m2105", ELECTRON_M2105)
|
||||
SLOT_INTERFACE_END
|
158
src/devices/bus/electron/exp.h
Normal file
158
src/devices/bus/electron/exp.h
Normal file
@ -0,0 +1,158 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
Electron Expansion Port emulation
|
||||
|
||||
**********************************************************************
|
||||
|
||||
Pinout:
|
||||
|
||||
18V AC 2 1 18V AC
|
||||
AC RETURN 4 3 AC RETURN
|
||||
-5V 6 5 -5V
|
||||
0V 8 7 0V
|
||||
+5V 10 9 +5V
|
||||
16MHz 12 11 SOUND O/P
|
||||
PHI OUT 14 13 ÷13 IN
|
||||
NMI 16 15 RST
|
||||
R/W 18 17 IRQ
|
||||
D6 20 19 D7
|
||||
D4 22 21 D5
|
||||
D2 24 23 D3
|
||||
D0 26 25 D1
|
||||
NC 28 27 RDY
|
||||
SLOT 30 29 SLOT
|
||||
A14 32 31 A15
|
||||
A12 34 33 A13
|
||||
A10 36 35 A11
|
||||
A0 38 37 A9
|
||||
A2 40 39 A1
|
||||
A4 42 41 A3
|
||||
A6 44 43 A5
|
||||
A8 46 45 A7
|
||||
0V 48 47 0V
|
||||
+5V 50 49 +5V
|
||||
|
||||
Signal Definitions:
|
||||
|
||||
18V AC (pins 1,2) - These lines are connected directly to the output from the Electron mains power
|
||||
AC RETURNS (pins 3,4) - adaptor. A total of 6W may be drawn from these lines as long as no power is
|
||||
taken from +5V (pins 9,10,49,50). For safety reasons these lines must never
|
||||
be used as an AC input to the Electron.
|
||||
-5V (pins 5,6) - A -5V supply from the Electron. Up to 20mA (total) may safely be drawn
|
||||
from this line by expansion modules.
|
||||
0V (pins 7,8,47,48) - Ground. Expansion modules with their own power supply must have the 0V
|
||||
lines commoned with the Electron.
|
||||
+5V (pins 9,10,49,50) - A +5V supply from the Electron. Up to 500mA (total) may safely be drawn
|
||||
from this line by expansion modules as long as no power is taken from 18V
|
||||
AC (pins 1,2,3,4).
|
||||
SOUND O/P (pin 11) - Sound output. A 3V peak to peak source via a 1K series resistor from the
|
||||
Electron ULA.
|
||||
16 MHz (pin 12) - 16 Megahertz from the Electron main oscillator. This output may be used
|
||||
for clock generation within an expansion module.
|
||||
/13 IN (pin 13) - 16 Megahertz divided by 13. This output may be used for baud rate
|
||||
generation. If divided by 1024 it will give approximately 1200Hz.
|
||||
PHI OUT (pin 14) - The 6502 input clock. The low time is nominally 250ns. The high time may
|
||||
be 250ns (2MHz operation when reading ROMs) or 750ns or 1250ns
|
||||
(stretched clock for a 1MHz access, the length depending on the phase of the
|
||||
2MHz clock) or up to 40us (if in modes 0-3)
|
||||
RST (pin 15) - Reset (active low). This is an OUTPUT ONLY for the system reset line. It
|
||||
may be used to initialise expansion modules on power up and when the
|
||||
BREAK key is pressed.
|
||||
NMI (pin 16) - Non-Maskable Interrupt (negative edge triggered). This is the system NMI
|
||||
line which is open collector (wire-OR) and may be asserted by an expansion
|
||||
module. The pull-up resistor on this line inside the ULA is 3k3. Care must
|
||||
be taken to avoid masking other interrupts by holding the line low. Using
|
||||
NMI on the Electron requires knowledge of operating system protocols.
|
||||
IRQ (pin 17) - Interrupt Request (active low). This is the system IRQ line which is open
|
||||
collector (wire-OR) and may be asserted by an expansion module. The pull-
|
||||
up resistor on this line inside the ULA is 3k3. It is essential for the correct
|
||||
operation of the machine that interrupts to not occur until the software is
|
||||
capable of dealing with them. Interrupts on the Electron expansion bus should
|
||||
therefore be disabled on power-up and reset. Significant use of interrupt
|
||||
service time may affect other machine functions, eg the real time clock.
|
||||
R/W (pin 18) - The system read/write line from the 6502.
|
||||
D7-D0 (pins 19-26) - Bi-directional data bus. The direction of data is determined by R/W.
|
||||
RDY (pin 27) - 6502 ready line (active low). May be asserted by an expansion module to
|
||||
stop the processor when reading slow memory. This line works on read only
|
||||
(R/W=1).
|
||||
(pin 28) - No connection
|
||||
(pins 29,30) - Polarising key connector.
|
||||
A0-A15 (pins 31-46) - 6502 address bus.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __ELECTRON_EXPANSION_SLOT__
|
||||
#define __ELECTRON_EXPANSION_SLOT__
|
||||
|
||||
#include "emu.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// CONSTANTS
|
||||
//**************************************************************************
|
||||
|
||||
#define ELECTRON_EXPANSION_SLOT_TAG "exp"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_ELECTRON_EXPANSION_SLOT_ADD(_tag, _slot_intf, _def_slot) \
|
||||
MCFG_DEVICE_ADD(_tag, ELECTRON_EXPANSION_SLOT, 0) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
|
||||
|
||||
#define MCFG_ELECTRON_PASSTHRU_EXPANSION_SLOT_ADD() \
|
||||
MCFG_ELECTRON_EXPANSION_SLOT_ADD(ELECTRON_EXPANSION_SLOT_TAG, 0, electron_expansion_devices, nullptr)
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> electron_expansion_slot_device
|
||||
|
||||
class device_electron_expansion_interface;
|
||||
|
||||
class electron_expansion_slot_device : public device_t,
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
electron_expansion_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual ~electron_expansion_slot_device() {}
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
device_electron_expansion_interface *m_card;
|
||||
};
|
||||
|
||||
|
||||
// ======================> device_electron_expansion_card_interface
|
||||
|
||||
class device_electron_expansion_interface : public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
device_electron_expansion_interface(const machine_config &mconfig, device_t &device);
|
||||
virtual ~device_electron_expansion_interface();
|
||||
|
||||
protected:
|
||||
electron_expansion_slot_device *m_slot;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type ELECTRON_EXPANSION_SLOT;
|
||||
|
||||
SLOT_INTERFACE_EXTERN( electron_expansion_devices );
|
||||
|
||||
|
||||
#endif
|
@ -5,7 +5,7 @@
|
||||
Game Boy carts with MBC (Memory Bank Controller)
|
||||
|
||||
|
||||
TODO: add proper RTC and Rumble support
|
||||
TODO: RTC runs too fast while in-game, in MBC-3 games... find the problem!
|
||||
|
||||
***********************************************************************************************************/
|
||||
|
||||
@ -179,13 +179,15 @@ void gb_rom_mbc_device::shared_reset()
|
||||
void gb_rom_mbc3_device::device_start()
|
||||
{
|
||||
shared_start();
|
||||
save_item(NAME(m_rtc_map));
|
||||
save_item(NAME(m_rtc_regs));
|
||||
save_item(NAME(m_rtc_ready));
|
||||
}
|
||||
|
||||
void gb_rom_mbc3_device::device_reset()
|
||||
{
|
||||
shared_reset();
|
||||
memset(m_rtc_map, 0, sizeof(m_rtc_map));
|
||||
memset(m_rtc_regs, 0, sizeof(m_rtc_regs));
|
||||
m_rtc_ready = 0;
|
||||
}
|
||||
|
||||
void gb_rom_mbc6_device::device_start()
|
||||
@ -446,6 +448,18 @@ WRITE8_MEMBER(gb_rom_mbc2_device::write_ram)
|
||||
|
||||
// MBC3
|
||||
|
||||
void gb_rom_mbc3_device::update_rtc()
|
||||
{
|
||||
system_time curtime;
|
||||
machine().current_datetime(curtime);
|
||||
|
||||
m_rtc_regs[0] = curtime.local_time.second;
|
||||
m_rtc_regs[1] = curtime.local_time.minute;
|
||||
m_rtc_regs[2] = curtime.local_time.hour;
|
||||
m_rtc_regs[3] = curtime.local_time.day & 0xff;
|
||||
m_rtc_regs[4] = (m_rtc_regs[4] & 0xf0) | (curtime.local_time.day >> 8);
|
||||
}
|
||||
|
||||
READ8_MEMBER(gb_rom_mbc3_device::read_rom)
|
||||
{
|
||||
if (offset < 0x4000)
|
||||
@ -472,16 +486,14 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_bank)
|
||||
{
|
||||
m_ram_bank = data;
|
||||
}
|
||||
else
|
||||
else if (has_timer)
|
||||
{
|
||||
if (has_timer)
|
||||
if (m_rtc_ready == 1 && data == 0)
|
||||
m_rtc_ready = 0;
|
||||
if (m_rtc_ready == 0 && data == 1)
|
||||
{
|
||||
/* FIXME: RTC Latch goes here */
|
||||
m_rtc_map[0] = 50; /* Seconds */
|
||||
m_rtc_map[1] = 40; /* Minutes */
|
||||
m_rtc_map[2] = 15; /* Hours */
|
||||
m_rtc_map[3] = 25; /* Day counter lowest 8 bits */
|
||||
m_rtc_map[4] = 0x01; /* Day counter upper bit, timer off, no day overflow occurred (bit7) */
|
||||
m_rtc_ready = 1;
|
||||
update_rtc();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -489,14 +501,16 @@ WRITE8_MEMBER(gb_rom_mbc3_device::write_bank)
|
||||
READ8_MEMBER(gb_rom_mbc3_device::read_ram)
|
||||
{
|
||||
if (m_ram_bank < 4 && m_ram_enable)
|
||||
{ // RAM
|
||||
{
|
||||
// RAM
|
||||
if (!m_ram.empty())
|
||||
return m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)];
|
||||
}
|
||||
if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc)
|
||||
{ // RAM
|
||||
{
|
||||
// RTC registers
|
||||
if (has_timer)
|
||||
return m_rtc_map[m_ram_bank - 8];
|
||||
return m_rtc_regs[m_ram_bank - 8];
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
@ -504,16 +518,16 @@ READ8_MEMBER(gb_rom_mbc3_device::read_ram)
|
||||
WRITE8_MEMBER(gb_rom_mbc3_device::write_ram)
|
||||
{
|
||||
if (m_ram_bank < 4 && m_ram_enable)
|
||||
{ // RAM
|
||||
{
|
||||
// RAM
|
||||
if (!m_ram.empty())
|
||||
m_ram[ram_bank_map[m_ram_bank] * 0x2000 + (offset & 0x1fff)] = data;
|
||||
}
|
||||
if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc)
|
||||
{ // RAM
|
||||
if (m_ram_bank >= 0x8 && m_ram_bank <= 0xc && m_ram_enable)
|
||||
{
|
||||
// RTC registers are writeable too
|
||||
if (has_timer)
|
||||
{
|
||||
// what to do here?
|
||||
}
|
||||
m_rtc_regs[m_ram_bank - 8] = data;
|
||||
}
|
||||
}
|
||||
|
||||
@ -547,7 +561,10 @@ WRITE8_MEMBER(gb_rom_mbc5_device::write_bank)
|
||||
{
|
||||
data &= 0x0f;
|
||||
if (has_rumble)
|
||||
{
|
||||
machine().output().set_value("Rumble", BIT(data, 3));
|
||||
data &= 0x7;
|
||||
}
|
||||
m_ram_bank = data;
|
||||
}
|
||||
}
|
||||
@ -1071,8 +1088,6 @@ WRITE8_MEMBER(gb_rom_sintax_device::write_bank)
|
||||
else if (offset < 0x5000)
|
||||
{
|
||||
data &= 0x0f;
|
||||
if (has_rumble)
|
||||
data &= 0x7;
|
||||
m_ram_bank = data;
|
||||
}
|
||||
else if (offset < 0x6000)
|
||||
@ -1167,8 +1182,6 @@ WRITE8_MEMBER(gb_rom_digimon_device::write_bank)
|
||||
{
|
||||
// printf("written $05-$06 %X at %X\n", data, offset);
|
||||
data &= 0x0f;
|
||||
if (has_rumble)
|
||||
data &= 0x7;
|
||||
m_ram_bank = data;
|
||||
}
|
||||
// else
|
||||
|
@ -93,7 +93,11 @@ public:
|
||||
virtual DECLARE_WRITE8_MEMBER(write_bank) override;
|
||||
virtual DECLARE_READ8_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(write_ram) override;
|
||||
UINT8 m_rtc_map[5];
|
||||
|
||||
private:
|
||||
void update_rtc();
|
||||
UINT8 m_rtc_regs[5];
|
||||
int m_rtc_ready;
|
||||
};
|
||||
|
||||
// ======================> gb_rom_mbc5_device
|
||||
|
@ -134,12 +134,18 @@ static const gba_slot slot_list[] =
|
||||
{
|
||||
{ GBA_STD, "gba_rom" },
|
||||
{ GBA_SRAM, "gba_sram" },
|
||||
{ GBA_DRILLDOZ, "gba_drilldoz" },
|
||||
{ GBA_WARIOTWS, "gba_wariotws" },
|
||||
{ GBA_EEPROM, "gba_eeprom" },
|
||||
{ GBA_EEPROM4, "gba_eeprom_4k" },
|
||||
{ GBA_YOSHIUG, "gba_yoshiug" },
|
||||
{ GBA_EEPROM64, "gba_eeprom_64k" },
|
||||
{ GBA_BOKTAI, "gba_boktai" },
|
||||
{ GBA_FLASH, "gba_flash" },
|
||||
{ GBA_FLASH_RTC, "gba_flash_rtc" },
|
||||
{ GBA_FLASH512, "gba_flash_512" },
|
||||
{ GBA_FLASH1M, "gba_flash_1m" },
|
||||
{ GBA_FLASH1M_RTC, "gba_flash_1m_rtc" },
|
||||
{ GBA_3DMATRIX, "gba_3dmatrix" },
|
||||
};
|
||||
|
||||
@ -204,7 +210,7 @@ bool gba_cart_slot_device::call_load()
|
||||
osd_printf_info("GBA: Detected (XML) %s\n", pcb_name ? pcb_name : "NONE");
|
||||
}
|
||||
|
||||
if (m_type == GBA_SRAM)
|
||||
if (m_type == GBA_SRAM || m_type == GBA_DRILLDOZ || m_type == GBA_WARIOTWS)
|
||||
m_cart->nvram_alloc(0x10000);
|
||||
|
||||
// mirror the ROM
|
||||
@ -300,6 +306,8 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len)
|
||||
{
|
||||
UINT32 chip = 0;
|
||||
int type = GBA_STD;
|
||||
bool has_rtc = false;
|
||||
bool has_rumble = false;
|
||||
|
||||
// first detect nvram type based on strings inside the file
|
||||
for (int i = 0; i < len; i++)
|
||||
@ -359,19 +367,30 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len)
|
||||
|
||||
for (auto & elem : gba_chip_fix_eeprom_list)
|
||||
{
|
||||
const gba_chip_fix_eeprom_item *item = &elem;
|
||||
const gba_chip_fix_item *item = &elem;
|
||||
if (!strcmp(game_code, item->game_code))
|
||||
{
|
||||
chip = (chip & ~GBA_CHIP_EEPROM) | GBA_CHIP_EEPROM_64K;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (auto & elem : gba_chip_fix_rumble_list)
|
||||
{
|
||||
const gba_chip_fix_item *item = &elem;
|
||||
if (!strcmp(game_code, item->game_code))
|
||||
{
|
||||
has_rumble = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (chip & GBA_CHIP_RTC)
|
||||
{
|
||||
osd_printf_info("game has RTC - not emulated at the moment\n");
|
||||
//osd_printf_info("game has RTC - not emulated at the moment\n");
|
||||
chip &= ~GBA_CHIP_RTC;
|
||||
has_rtc = true;
|
||||
}
|
||||
|
||||
osd_printf_info("GBA: Emulate %s\n", gba_chip_string(chip).c_str());
|
||||
@ -383,21 +402,29 @@ int gba_cart_slot_device::get_cart_type(UINT8 *ROM, UINT32 len)
|
||||
break;
|
||||
case GBA_CHIP_EEPROM:
|
||||
type = GBA_EEPROM;
|
||||
if (has_rumble)
|
||||
type = GBA_YOSHIUG;
|
||||
break;
|
||||
case GBA_CHIP_EEPROM_4K:
|
||||
type = GBA_EEPROM4;
|
||||
break;
|
||||
case GBA_CHIP_EEPROM_64K:
|
||||
type = GBA_EEPROM64;
|
||||
if (has_rtc)
|
||||
type = GBA_BOKTAI;
|
||||
break;
|
||||
case GBA_CHIP_FLASH:
|
||||
type = GBA_FLASH;
|
||||
if (has_rtc)
|
||||
type = GBA_FLASH_RTC;
|
||||
break;
|
||||
case GBA_CHIP_FLASH_512:
|
||||
type = GBA_FLASH512;
|
||||
break;
|
||||
case GBA_CHIP_FLASH_1M:
|
||||
type = GBA_FLASH1M;
|
||||
if (has_rtc)
|
||||
type = GBA_FLASH1M_RTC;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -455,6 +482,14 @@ READ32_MEMBER(gba_cart_slot_device::read_ram)
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
READ32_MEMBER(gba_cart_slot_device::read_gpio)
|
||||
{
|
||||
if (m_cart)
|
||||
return m_cart->read_gpio(space, offset, mem_mask);
|
||||
else
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
write
|
||||
@ -466,6 +501,12 @@ WRITE32_MEMBER(gba_cart_slot_device::write_ram)
|
||||
m_cart->write_ram(space, offset, data, mem_mask);
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(gba_cart_slot_device::write_gpio)
|
||||
{
|
||||
if (m_cart)
|
||||
m_cart->write_gpio(space, offset, data, mem_mask);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
Internal header logging
|
||||
|
@ -13,12 +13,18 @@ enum
|
||||
{
|
||||
GBA_STD = 0,
|
||||
GBA_SRAM,
|
||||
GBA_DRILLDOZ,
|
||||
GBA_WARIOTWS,
|
||||
GBA_EEPROM,
|
||||
GBA_EEPROM4,
|
||||
GBA_YOSHIUG,
|
||||
GBA_EEPROM64,
|
||||
GBA_BOKTAI,
|
||||
GBA_FLASH,
|
||||
GBA_FLASH_RTC,
|
||||
GBA_FLASH512,
|
||||
GBA_FLASH1M,
|
||||
GBA_FLASH1M_RTC,
|
||||
GBA_3DMATRIX
|
||||
};
|
||||
|
||||
@ -35,7 +41,11 @@ public:
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_rom) { return 0xffffffff; }
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) { return 0xffffffff; }
|
||||
virtual DECLARE_READ32_MEMBER(read_gpio) { return 0; }
|
||||
virtual DECLARE_READ32_MEMBER(read_tilt) { return 0xffffffff; }
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) {};
|
||||
virtual DECLARE_WRITE32_MEMBER(write_gpio) {};
|
||||
virtual DECLARE_WRITE32_MEMBER(write_tilt) {};
|
||||
virtual DECLARE_WRITE32_MEMBER(write_mapper) {};
|
||||
|
||||
void rom_alloc(UINT32 size, const char *tag);
|
||||
@ -103,8 +113,12 @@ public:
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_rom);
|
||||
virtual DECLARE_READ32_MEMBER(read_ram);
|
||||
virtual DECLARE_READ32_MEMBER(read_gpio);
|
||||
virtual DECLARE_READ32_MEMBER(read_tilt) { if (m_cart) return m_cart->read_tilt(space, offset, mem_mask); else return 0xffffffff; }
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram);
|
||||
virtual DECLARE_WRITE32_MEMBER(write_mapper) { if (m_cart) return m_cart->write_mapper(space, offset, data, mem_mask); };
|
||||
virtual DECLARE_WRITE32_MEMBER(write_gpio);
|
||||
virtual DECLARE_WRITE32_MEMBER(write_tilt) { if (m_cart) m_cart->write_tilt(space, offset, data, mem_mask); }
|
||||
virtual DECLARE_WRITE32_MEMBER(write_mapper) { if (m_cart) m_cart->write_mapper(space, offset, data, mem_mask); }
|
||||
|
||||
|
||||
protected:
|
||||
@ -193,12 +207,12 @@ static const gba_chip_fix_conflict_item gba_chip_fix_conflict_list[] =
|
||||
{ "BYUJ", GBA_CHIP_EEPROM_64K }, // 2322 - Yggdra Union (JPN)
|
||||
};
|
||||
|
||||
struct gba_chip_fix_eeprom_item
|
||||
struct gba_chip_fix_item
|
||||
{
|
||||
char game_code[5];
|
||||
};
|
||||
|
||||
static const gba_chip_fix_eeprom_item gba_chip_fix_eeprom_list[] =
|
||||
static const gba_chip_fix_item gba_chip_fix_eeprom_list[] =
|
||||
{
|
||||
// gba scan no. 7
|
||||
{ "AKTJ" }, // 0145 - Hello Kitty Collection - Miracle Fashion Maker (JPN)
|
||||
@ -588,4 +602,13 @@ static const gba_chip_fix_eeprom_item gba_chip_fix_eeprom_list[] =
|
||||
{ "A3IJ" }, // bokura no taiyou - taiyou action rpg - kabunushi go-yuutai ban (japan) (demo)
|
||||
};
|
||||
|
||||
static const gba_chip_fix_item gba_chip_fix_rumble_list[] =
|
||||
{
|
||||
{ "KYGP" }, // Yoshi's Universal Gravitation (EUR)
|
||||
{ "KYGE" }, // Yoshi - Topsy-Turvy (USA)
|
||||
{ "KYGJ" }, // Yoshi no Banyuuinryoku (JPN)
|
||||
{ "KHPJ" } // Koro Koro Puzzle - Happy Panechu! (JPN)
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -23,10 +23,16 @@
|
||||
|
||||
const device_type GBA_ROM_STD = &device_creator<gba_rom_device>;
|
||||
const device_type GBA_ROM_SRAM = &device_creator<gba_rom_sram_device>;
|
||||
const device_type GBA_ROM_DRILLDOZ = &device_creator<gba_rom_drilldoz_device>;
|
||||
const device_type GBA_ROM_WARIOTWS = &device_creator<gba_rom_wariotws_device>;
|
||||
const device_type GBA_ROM_EEPROM = &device_creator<gba_rom_eeprom_device>;
|
||||
const device_type GBA_ROM_YOSHIUG = &device_creator<gba_rom_yoshiug_device>;
|
||||
const device_type GBA_ROM_EEPROM64 = &device_creator<gba_rom_eeprom64_device>;
|
||||
const device_type GBA_ROM_BOKTAI = &device_creator<gba_rom_boktai_device>;
|
||||
const device_type GBA_ROM_FLASH = &device_creator<gba_rom_flash_device>;
|
||||
const device_type GBA_ROM_FLASH_RTC = &device_creator<gba_rom_flash_rtc_device>;
|
||||
const device_type GBA_ROM_FLASH1M = &device_creator<gba_rom_flash1m_device>;
|
||||
const device_type GBA_ROM_FLASH1M_RTC = &device_creator<gba_rom_flash1m_rtc_device>;
|
||||
const device_type GBA_ROM_3DMATRIX = &device_creator<gba_rom_3dmatrix_device>;
|
||||
|
||||
|
||||
@ -42,33 +48,98 @@ gba_rom_device::gba_rom_device(const machine_config &mconfig, const char *tag, d
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_sram_device::gba_rom_sram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_sram_device::gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_device(mconfig, GBA_ROM_SRAM, "GBA Carts + SRAM", tag, owner, clock, "gba_sram", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_drilldoz_device::gba_rom_drilldoz_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_sram_device(mconfig, GBA_ROM_DRILLDOZ, "GBA Carts + SRAM + Rumble", tag, owner, clock, "gba_drilldoz", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_wariotws_device::gba_rom_wariotws_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_sram_device(mconfig, GBA_ROM_WARIOTWS, "GBA Carts + SRAM + Rumble + Gyroscope", tag, owner, clock, "gba_wariotws", __FILE__),
|
||||
m_gyro_z(*this, "GYROZ")
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_eeprom_device::gba_rom_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_eeprom_device::gba_rom_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_device(mconfig, GBA_ROM_EEPROM, "GBA Carts + EEPROM", tag, owner, clock, "gba_eeprom", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_yoshiug_device::gba_rom_yoshiug_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_eeprom_device(mconfig, GBA_ROM_YOSHIUG, "GBA Carts + EEPROM + Tilt Sensor", tag, owner, clock, "gba_yoshiug", __FILE__),
|
||||
m_tilt_x(*this, "TILTX"),
|
||||
m_tilt_y(*this, "TILTY")
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_eeprom64_device::gba_rom_eeprom64_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_eeprom64_device::gba_rom_eeprom64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_device(mconfig, GBA_ROM_EEPROM64, "GBA Carts + EEPROM 64K", tag, owner, clock, "gba_eeprom64", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_boktai_device::gba_rom_boktai_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_eeprom64_device(mconfig, GBA_ROM_BOKTAI, "GBA Carts + EEPROM 64K + RTC", tag, owner, clock, "gba_boktai", __FILE__),
|
||||
m_sensor(*this, "LIGHTSENSE")
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_flash_device::gba_rom_flash_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
m_flash_mask(0),
|
||||
m_flash(*this, "flash")
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_flash_device::gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_device(mconfig, GBA_ROM_FLASH, "GBA Carts + Panasonic Flash", tag, owner, clock, "gba_flash", __FILE__), m_flash_mask(0),
|
||||
: gba_rom_device(mconfig, GBA_ROM_FLASH, "GBA Carts + Panasonic Flash", tag, owner, clock, "gba_flash", __FILE__),
|
||||
m_flash_mask(0),
|
||||
m_flash(*this, "flash")
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_flash_rtc_device::gba_rom_flash_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_flash_device(mconfig, GBA_ROM_FLASH_RTC, "GBA Carts + Panasonic Flash + RTC", tag, owner, clock, "gba_flash_rtc", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_flash1m_device::gba_rom_flash1m_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
|
||||
: gba_rom_device(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
m_flash_mask(0),
|
||||
m_flash(*this, "flash")
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_flash1m_device::gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_device(mconfig, GBA_ROM_FLASH1M, "GBA Carts + Sanyo Flash", tag, owner, clock, "gba_flash1m", __FILE__), m_flash_mask(0),
|
||||
: gba_rom_device(mconfig, GBA_ROM_FLASH1M, "GBA Carts + Sanyo Flash", tag, owner, clock, "gba_flash1m", __FILE__),
|
||||
m_flash_mask(0),
|
||||
m_flash(*this, "flash")
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_flash1m_rtc_device::gba_rom_flash1m_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_flash1m_device(mconfig, GBA_ROM_FLASH1M_RTC, "GBA Carts + Sanyo Flash + RTC", tag, owner, clock, "gba_flash1m_rtc", __FILE__)
|
||||
{
|
||||
}
|
||||
|
||||
gba_rom_3dmatrix_device::gba_rom_3dmatrix_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: gba_rom_device(mconfig, GBA_ROM_3DMATRIX, "GBA Carts + 3D Matrix Memory Mapper", tag, owner, clock, "gba_3dmatrix", __FILE__)
|
||||
{
|
||||
@ -81,10 +152,31 @@ gba_rom_3dmatrix_device::gba_rom_3dmatrix_device(const machine_config &mconfig,
|
||||
|
||||
void gba_rom_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_gpio_regs));
|
||||
save_item(NAME(m_gpio_write_only));
|
||||
save_item(NAME(m_gpio_dirs));
|
||||
}
|
||||
|
||||
void gba_rom_device::device_reset()
|
||||
{
|
||||
m_gpio_regs[0] = 0;
|
||||
m_gpio_regs[1] = 0;
|
||||
m_gpio_regs[2] = 0;
|
||||
m_gpio_regs[3] = 0;
|
||||
m_gpio_write_only = 0;
|
||||
m_gpio_dirs = 0;
|
||||
}
|
||||
|
||||
void gba_rom_wariotws_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_last_val));
|
||||
save_item(NAME(m_counter));
|
||||
}
|
||||
|
||||
void gba_rom_wariotws_device::device_reset()
|
||||
{
|
||||
m_last_val = 0;
|
||||
m_counter = 0;
|
||||
}
|
||||
|
||||
void gba_rom_flash_device::device_reset()
|
||||
@ -105,6 +197,22 @@ void gba_rom_eeprom_device::device_start()
|
||||
m_eeprom = std::make_unique<gba_eeprom_device>(machine(), (UINT8*)get_nvram_base(), get_nvram_size(), 6);
|
||||
}
|
||||
|
||||
void gba_rom_yoshiug_device::device_start()
|
||||
{
|
||||
gba_rom_eeprom_device::device_start();
|
||||
save_item(NAME(m_tilt_ready));
|
||||
save_item(NAME(m_xpos));
|
||||
save_item(NAME(m_ypos));
|
||||
}
|
||||
|
||||
void gba_rom_yoshiug_device::device_reset()
|
||||
{
|
||||
m_tilt_ready = 0;
|
||||
m_xpos = 0;
|
||||
m_ypos = 0;
|
||||
}
|
||||
|
||||
|
||||
void gba_rom_eeprom64_device::device_start()
|
||||
{
|
||||
// for the moment we use a custom eeprom implementation, so we alloc/save it as nvram
|
||||
@ -112,6 +220,31 @@ void gba_rom_eeprom64_device::device_start()
|
||||
m_eeprom = std::make_unique<gba_eeprom_device>(machine(), (UINT8*)get_nvram_base(), get_nvram_size(), 14);
|
||||
}
|
||||
|
||||
void gba_rom_boktai_device::device_start()
|
||||
{
|
||||
gba_rom_eeprom64_device::device_start();
|
||||
m_rtc = std::make_unique<gba_s3511_device>(machine());
|
||||
|
||||
save_item(NAME(m_last_val));
|
||||
save_item(NAME(m_counter));
|
||||
}
|
||||
|
||||
void gba_rom_boktai_device::device_reset()
|
||||
{
|
||||
m_last_val = 0;
|
||||
m_counter = 0;
|
||||
}
|
||||
|
||||
void gba_rom_flash_rtc_device::device_start()
|
||||
{
|
||||
m_rtc = std::make_unique<gba_s3511_device>(machine());
|
||||
}
|
||||
|
||||
void gba_rom_flash1m_rtc_device::device_start()
|
||||
{
|
||||
m_rtc = std::make_unique<gba_s3511_device>(machine());
|
||||
}
|
||||
|
||||
void gba_rom_3dmatrix_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_src));
|
||||
@ -131,6 +264,75 @@ void gba_rom_3dmatrix_device::device_reset()
|
||||
mapper specific handlers
|
||||
-------------------------------------------------*/
|
||||
|
||||
/*-------------------------------------------------
|
||||
This is a preliminary implementation of the
|
||||
General Purpose I/O Port embedded in the GBA PCBs
|
||||
as described at : http://problemkaputt.de/gbatek.htm#gbacartioportgpio
|
||||
|
||||
Functions read_gpio/write_gpio only give the
|
||||
I/O interface while the actual on-cart devices
|
||||
are read and written through gpio_dev_read/gpio_dev_write
|
||||
which are virtual methods defined in the specific
|
||||
cart types.
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ32_MEMBER(gba_rom_device::read_gpio)
|
||||
{
|
||||
logerror("read GPIO offs %X\n", offset);
|
||||
if (!m_gpio_write_only)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
{
|
||||
UINT16 ret = gpio_dev_read(m_gpio_dirs);
|
||||
return ret;
|
||||
}
|
||||
if (ACCESSING_BITS_16_31)
|
||||
return m_gpio_regs[1] << 16;
|
||||
case 1:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
return m_gpio_regs[2];
|
||||
if (ACCESSING_BITS_16_31)
|
||||
return m_gpio_regs[3] << 16;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
return m_rom[offset + 0xc4/4];
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(gba_rom_device::write_gpio)
|
||||
{
|
||||
logerror("write GPIO offs %X data %X\n", offset, data);
|
||||
switch (offset)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
{
|
||||
gpio_dev_write(data & 0xffff, m_gpio_dirs);
|
||||
}
|
||||
if (ACCESSING_BITS_16_31)
|
||||
{
|
||||
m_gpio_dirs = (data >> 16) & 0x0f;
|
||||
m_gpio_regs[1] = (data >> 16) & 0xffff;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
{
|
||||
m_gpio_write_only = BIT(data, 0) ? 0 : 1;
|
||||
m_gpio_regs[2] = data & 0xffff;
|
||||
}
|
||||
if (ACCESSING_BITS_16_31)
|
||||
m_gpio_regs[3] = (data >> 16) & 0xffff;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
Carts with SRAM
|
||||
@ -151,6 +353,60 @@ WRITE32_MEMBER(gba_rom_sram_device::write_ram)
|
||||
}
|
||||
|
||||
|
||||
// SRAM cart variant with additional Rumble motor (used by Drill Dozer)
|
||||
|
||||
void gba_rom_drilldoz_device::gpio_dev_write(UINT16 data, int gpio_dirs)
|
||||
{
|
||||
if ((gpio_dirs & 0x08))
|
||||
{
|
||||
// send impulse to Rumble sensor
|
||||
machine().output().set_value("Rumble", BIT(data, 3));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// SRAM cart variant with additional Rumble motor + Gyroscope (used by Warioware Twist)
|
||||
|
||||
static INPUT_PORTS_START( wariotws_gyroscope )
|
||||
PORT_START("GYROZ")
|
||||
PORT_BIT( 0xfff, 0x6c0, IPT_AD_STICK_Z ) PORT_MINMAX(0x354,0x9e3) PORT_SENSITIVITY(0x10) PORT_KEYDELTA(0x50)
|
||||
INPUT_PORTS_END
|
||||
|
||||
ioport_constructor gba_rom_wariotws_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( wariotws_gyroscope );
|
||||
}
|
||||
|
||||
UINT16 gba_rom_wariotws_device::gpio_dev_read(int gpio_dirs)
|
||||
{
|
||||
int gyro = 0;
|
||||
if (gpio_dirs == 0x0b)
|
||||
gyro = BIT(m_gyro_z->read(), m_counter);
|
||||
return (gyro << 2);
|
||||
}
|
||||
|
||||
void gba_rom_wariotws_device::gpio_dev_write(UINT16 data, int gpio_dirs)
|
||||
{
|
||||
if ((gpio_dirs & 0x08))
|
||||
{
|
||||
// send impulse to Rumble sensor
|
||||
machine().output().set_value("Rumble", BIT(data, 3));
|
||||
}
|
||||
|
||||
if (gpio_dirs == 0x0b)
|
||||
{
|
||||
if ((data & 2) && (m_counter > 0))
|
||||
m_counter--;
|
||||
|
||||
if (data & 1)
|
||||
m_counter = 15;
|
||||
|
||||
m_last_val = data & 0x0b;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
Carts with Flash RAM
|
||||
-------------------------------------------------*/
|
||||
@ -257,164 +513,34 @@ WRITE32_MEMBER(gba_rom_flash1m_device::write_ram)
|
||||
}
|
||||
}
|
||||
|
||||
// cart variants with additional S3511 RTC
|
||||
|
||||
UINT16 gba_rom_flash_rtc_device::gpio_dev_read(int gpio_dirs)
|
||||
{
|
||||
return 5 | (m_rtc->read_line() << 1);
|
||||
}
|
||||
|
||||
void gba_rom_flash_rtc_device::gpio_dev_write(UINT16 data, int gpio_dirs)
|
||||
{
|
||||
m_rtc->write(data, gpio_dirs);
|
||||
}
|
||||
|
||||
|
||||
UINT16 gba_rom_flash1m_rtc_device::gpio_dev_read(int gpio_dirs)
|
||||
{
|
||||
return 5 | (m_rtc->read_line() << 1);
|
||||
}
|
||||
|
||||
void gba_rom_flash1m_rtc_device::gpio_dev_write(UINT16 data, int gpio_dirs)
|
||||
{
|
||||
m_rtc->write(data, gpio_dirs);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
Carts with EEPROM
|
||||
|
||||
TODO: can this sketchy EEPROM device be merged
|
||||
with the core implementation?
|
||||
-------------------------------------------------*/
|
||||
|
||||
// GBA EEPROM Device
|
||||
|
||||
gba_eeprom_device::gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits) :
|
||||
m_state(EEP_IDLE),
|
||||
m_machine(machine)
|
||||
{
|
||||
m_data = eeprom;
|
||||
m_data_size = size;
|
||||
m_addr_bits = addr_bits;
|
||||
|
||||
m_machine.save().save_item(m_state, "GBA_EEPROM/m_state");
|
||||
m_machine.save().save_item(m_command, "GBA_EEPROM/m_command");
|
||||
m_machine.save().save_item(m_count, "GBA_EEPROM/m_count");
|
||||
m_machine.save().save_item(m_addr, "GBA_EEPROM/m_addr");
|
||||
m_machine.save().save_item(m_bits, "GBA_EEPROM/m_bits");
|
||||
m_machine.save().save_item(m_eep_data, "GBA_EEPROM/m_eep_data");
|
||||
}
|
||||
|
||||
UINT32 gba_eeprom_device::read()
|
||||
{
|
||||
UINT32 out;
|
||||
|
||||
switch (m_state)
|
||||
{
|
||||
case EEP_IDLE:
|
||||
// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, activecpu_get_pc(), 1);
|
||||
return 0x00010001; // "ready"
|
||||
|
||||
case EEP_READFIRST:
|
||||
m_count--;
|
||||
|
||||
if (!m_count)
|
||||
{
|
||||
m_count = 64;
|
||||
m_bits = 0;
|
||||
m_eep_data = 0;
|
||||
m_state = EEP_READ;
|
||||
}
|
||||
break;
|
||||
case EEP_READ:
|
||||
if ((m_bits == 0) && (m_count))
|
||||
{
|
||||
if (m_addr >= m_data_size)
|
||||
{
|
||||
fatalerror("eeprom: invalid address (%x)\n", m_addr);
|
||||
}
|
||||
m_eep_data = m_data[m_addr];
|
||||
//printf("EEPROM read @ %x = %x (%x)\n", m_addr, m_eep_data, (m_eep_data & 0x80) ? 1 : 0);
|
||||
m_addr++;
|
||||
m_bits = 8;
|
||||
}
|
||||
|
||||
out = (m_eep_data & 0x80) ? 1 : 0;
|
||||
out |= (out<<16);
|
||||
m_eep_data <<= 1;
|
||||
|
||||
m_bits--;
|
||||
m_count--;
|
||||
|
||||
if (!m_count)
|
||||
{
|
||||
m_state = EEP_IDLE;
|
||||
}
|
||||
|
||||
// printf("out = %08x\n", out);
|
||||
// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, m_state, activecpu_get_pc(), out);
|
||||
return out;
|
||||
}
|
||||
// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, space.device().safe_pc(), 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void gba_eeprom_device::write(UINT32 data)
|
||||
{
|
||||
// printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, m_state, space.device().safe_pc());
|
||||
switch (m_state)
|
||||
{
|
||||
case EEP_IDLE:
|
||||
if (data == 1)
|
||||
m_state++;
|
||||
break;
|
||||
|
||||
case EEP_COMMAND:
|
||||
if (data == 1)
|
||||
m_command = EEP_READFIRST;
|
||||
else
|
||||
m_command = EEP_WRITE;
|
||||
m_state = EEP_ADDR;
|
||||
m_count = m_addr_bits;
|
||||
m_addr = 0;
|
||||
break;
|
||||
|
||||
case EEP_ADDR:
|
||||
m_addr <<= 1;
|
||||
m_addr |= (data & 1);
|
||||
m_count--;
|
||||
if (!m_count)
|
||||
{
|
||||
m_addr *= 8; // each address points to 8 bytes
|
||||
if (m_command == EEP_READFIRST)
|
||||
m_state = EEP_AFTERADDR;
|
||||
else
|
||||
{
|
||||
m_count = 64;
|
||||
m_bits = 8;
|
||||
m_state = EEP_WRITE;
|
||||
m_eep_data = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EEP_AFTERADDR:
|
||||
m_state = m_command;
|
||||
m_count = 64;
|
||||
m_bits = 0;
|
||||
m_eep_data = 0;
|
||||
if (m_state == EEP_READFIRST)
|
||||
m_count = 4;
|
||||
break;
|
||||
|
||||
case EEP_WRITE:
|
||||
m_eep_data <<= 1;
|
||||
m_eep_data |= (data & 1);
|
||||
m_bits--;
|
||||
m_count--;
|
||||
|
||||
if (m_bits == 0)
|
||||
{
|
||||
osd_printf_verbose("%08x: EEPROM: %02x to %x\n", machine().device("maincpu")->safe_pc(), m_eep_data, m_addr);
|
||||
if (m_addr >= m_data_size)
|
||||
fatalerror("eeprom: invalid address (%x)\n", m_addr);
|
||||
|
||||
m_data[m_addr] = m_eep_data;
|
||||
m_addr++;
|
||||
m_eep_data = 0;
|
||||
m_bits = 8;
|
||||
}
|
||||
|
||||
if (!m_count)
|
||||
m_state = EEP_AFTERWRITE;
|
||||
break;
|
||||
|
||||
case EEP_AFTERWRITE:
|
||||
m_state = EEP_IDLE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
READ32_MEMBER(gba_rom_eeprom_device::read_ram)
|
||||
{
|
||||
// Larger games have smaller access to EERPOM content
|
||||
@ -458,6 +584,137 @@ WRITE32_MEMBER(gba_rom_eeprom64_device::write_ram)
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
Carts with EEPROM + Tilt Sensor
|
||||
|
||||
Note about the calibration: this can seem a bit
|
||||
tricky at first, because the emulated screen
|
||||
does not turn as the GBA would...
|
||||
In order to properly calibrate the sensor, just
|
||||
keep pressed right for a few seconds when requested
|
||||
to calibrate right inclination (first calibration
|
||||
screen in Yoshi Universal Gravitation) so to get the
|
||||
full right range; then keep pressed for left for a
|
||||
few seconds when requested to calibrate left
|
||||
inclination (second calibration screen in Yoshi
|
||||
Universal Gravitation) so to get the full left range
|
||||
|
||||
-------------------------------------------------*/
|
||||
|
||||
static INPUT_PORTS_START( yoshiug_tilt )
|
||||
PORT_START("TILTX")
|
||||
PORT_BIT( 0xfff, 0x3a0, IPT_AD_STICK_X ) PORT_MINMAX(0x2af,0x477) PORT_SENSITIVITY(0x30) PORT_KEYDELTA(0x50)
|
||||
PORT_START("TILTY")
|
||||
PORT_BIT( 0xfff, 0x3a0, IPT_AD_STICK_Y ) PORT_MINMAX(0x2c3,0x480) PORT_SENSITIVITY(0x30) PORT_KEYDELTA(0x50)
|
||||
INPUT_PORTS_END
|
||||
|
||||
ioport_constructor gba_rom_yoshiug_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( yoshiug_tilt );
|
||||
}
|
||||
|
||||
|
||||
READ32_MEMBER(gba_rom_yoshiug_device::read_tilt)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x200/4:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
return (m_xpos & 0xff);
|
||||
break;
|
||||
case 0x300/4:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
return ((m_xpos >> 8) & 0x0f) | 0x80;
|
||||
break;
|
||||
case 0x400/4:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
return (m_ypos & 0xff);
|
||||
break;
|
||||
case 0x500/4:
|
||||
if (ACCESSING_BITS_0_15)
|
||||
return ((m_ypos >> 8) & 0x0f);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0xffffffff;
|
||||
}
|
||||
|
||||
WRITE32_MEMBER(gba_rom_yoshiug_device::write_tilt)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x000/4:
|
||||
if (data == 0x55) m_tilt_ready = 1;
|
||||
break;
|
||||
case 0x100/4:
|
||||
if (data == 0xaa)
|
||||
{
|
||||
m_xpos = m_tilt_x->read();
|
||||
m_ypos = m_tilt_y->read();
|
||||
m_tilt_ready = 0;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
Carts with EEPROM + S3511 RTC + Light Sensor
|
||||
-------------------------------------------------*/
|
||||
|
||||
static INPUT_PORTS_START( boktai_sensor )
|
||||
PORT_START("LIGHTSENSE")
|
||||
PORT_CONFNAME( 0xff, 0xe8, "Light Sensor" )
|
||||
PORT_CONFSETTING( 0xe8, "Complete Darkness" )
|
||||
PORT_CONFSETTING( 0xe4, "10%" )
|
||||
PORT_CONFSETTING( 0xdc, "20%" )
|
||||
PORT_CONFSETTING( 0xd4, "30%" )
|
||||
PORT_CONFSETTING( 0xc8, "40%" )
|
||||
PORT_CONFSETTING( 0xb8, "50%" )
|
||||
PORT_CONFSETTING( 0xa8, "60%" )
|
||||
PORT_CONFSETTING( 0x98, "70%" )
|
||||
PORT_CONFSETTING( 0x88, "80%" )
|
||||
PORT_CONFSETTING( 0x68, "90%" )
|
||||
PORT_CONFSETTING( 0x48, "Very Bright" )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
ioport_constructor gba_rom_boktai_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( boktai_sensor );
|
||||
}
|
||||
|
||||
UINT16 gba_rom_boktai_device::gpio_dev_read(int gpio_dirs)
|
||||
{
|
||||
int light = (gpio_dirs == 7 && m_counter >= m_sensor->read()) ? 1 : 0;
|
||||
return 5 | (m_rtc->read_line() << 1) | (light << 3);
|
||||
}
|
||||
|
||||
void gba_rom_boktai_device::gpio_dev_write(UINT16 data, int gpio_dirs)
|
||||
{
|
||||
m_rtc->write(data, gpio_dirs);
|
||||
if (gpio_dirs == 7)
|
||||
{
|
||||
if (data & 2)
|
||||
m_counter = 0;
|
||||
|
||||
if ((data & 1) && !(m_last_val & 1))
|
||||
{
|
||||
m_counter++;
|
||||
if (m_counter == 0x100)
|
||||
m_counter = 0;
|
||||
}
|
||||
|
||||
m_last_val = data & 7;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
Carts with 3D Matrix Memory controller
|
||||
|
||||
@ -511,3 +768,328 @@ WRITE32_MEMBER(gba_rom_3dmatrix_device::write_mapper)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Additional devices, to be moved to separate source files at a later stage
|
||||
|
||||
/*-------------------------------------------------
|
||||
Seiko S-3511 RTC implementation
|
||||
|
||||
TODO: transform this into a separate device, using
|
||||
also dirtc.cpp!
|
||||
-------------------------------------------------*/
|
||||
|
||||
gba_s3511_device::gba_s3511_device(running_machine &machine) :
|
||||
m_phase(S3511_RTC_IDLE),
|
||||
m_machine(machine)
|
||||
{
|
||||
m_last_val = 0;
|
||||
m_bits = 0;
|
||||
m_command = 0;
|
||||
m_data_len = 1;
|
||||
m_data[0] = 0;
|
||||
|
||||
m_machine.save().save_item(m_phase, "GBA_RTC/m_phase");
|
||||
m_machine.save().save_item(m_data, "GBA_RTC/m_data");
|
||||
m_machine.save().save_item(m_last_val, "GBA_RTC/m_last_val");
|
||||
m_machine.save().save_item(m_bits, "GBA_RTC/m_bits");
|
||||
m_machine.save().save_item(m_command, "GBA_RTC/m_command");
|
||||
m_machine.save().save_item(m_data_len, "GBA_RTC/m_data_len");
|
||||
}
|
||||
|
||||
|
||||
UINT8 gba_s3511_device::convert_to_bcd(int val)
|
||||
{
|
||||
return (((val % 100) / 10) << 4) | (val % 10);
|
||||
}
|
||||
|
||||
void gba_s3511_device::update_time(int len)
|
||||
{
|
||||
system_time curtime;
|
||||
m_machine.current_datetime(curtime);
|
||||
|
||||
if (len == 7)
|
||||
{
|
||||
m_data[0] = convert_to_bcd(curtime.local_time.year);
|
||||
m_data[1] = convert_to_bcd(curtime.local_time.month + 1);
|
||||
m_data[2] = convert_to_bcd(curtime.local_time.mday);
|
||||
m_data[3] = convert_to_bcd(curtime.local_time.weekday);
|
||||
m_data[4] = convert_to_bcd(curtime.local_time.hour);
|
||||
m_data[5] = convert_to_bcd(curtime.local_time.minute);
|
||||
m_data[6] = convert_to_bcd(curtime.local_time.second);
|
||||
}
|
||||
else if (len == 3)
|
||||
{
|
||||
m_data[0] = convert_to_bcd(curtime.local_time.hour);
|
||||
m_data[1] = convert_to_bcd(curtime.local_time.minute);
|
||||
m_data[2] = convert_to_bcd(curtime.local_time.second);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int gba_s3511_device::read_line()
|
||||
{
|
||||
int pin = 0;
|
||||
switch (m_phase)
|
||||
{
|
||||
case S3511_RTC_DATAOUT:
|
||||
//printf("mmm %d - %X - %d - %d\n", m_bits, m_data[m_bits >> 3], m_bits >> 3, BIT(m_data[m_bits >> 3], (m_bits & 7)));
|
||||
pin = BIT(m_data[m_bits >> 3], (m_bits & 7));
|
||||
m_bits++;
|
||||
if (m_bits == 8 * m_data_len)
|
||||
{
|
||||
//for (int i = 0; i < m_data_len; i++)
|
||||
// printf("RTC DATA OUT COMPLETE %X (reg %d) \n", m_data[i], i);
|
||||
m_bits = 0;
|
||||
m_phase = S3511_RTC_IDLE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return pin;
|
||||
}
|
||||
|
||||
|
||||
void gba_s3511_device::write(UINT16 data, int gpio_dirs)
|
||||
{
|
||||
// printf("gpio_dev_write data %X\n", data);
|
||||
if (m_phase == S3511_RTC_IDLE && (m_last_val & 5) == 1 && (data & 5) == 5)
|
||||
{
|
||||
m_phase = S3511_RTC_COMMAND;
|
||||
m_bits = 0;
|
||||
m_command = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// if (m_phase == 3)
|
||||
// printf("RTC command OK\n");
|
||||
if (!(m_last_val & 1) && (data & 1))
|
||||
{
|
||||
// bit transfer
|
||||
m_last_val = data & 0xff;
|
||||
switch (m_phase)
|
||||
{
|
||||
case S3511_RTC_DATAIN:
|
||||
if (!BIT(gpio_dirs, 1))
|
||||
{
|
||||
m_data[m_bits >> 3] = (m_data[m_bits >> 3] >> 1) | ((data << 6) & 0x80);
|
||||
m_bits++;
|
||||
if (m_bits == 8 * m_data_len)
|
||||
{
|
||||
//for (int i = 0; i < m_data_len; i++)
|
||||
// printf("RTC DATA IN COMPLETE %X (reg %d) \n", m_data[i], i);
|
||||
m_bits = 0;
|
||||
m_phase = S3511_RTC_IDLE;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case S3511_RTC_DATAOUT:
|
||||
break;
|
||||
case S3511_RTC_COMMAND:
|
||||
m_command |= (BIT(data, 1) << (7 - m_bits));
|
||||
m_bits++;
|
||||
if (m_bits == 8)
|
||||
{
|
||||
m_bits = 0;
|
||||
//printf("RTC command %X ENTERED!!!\n", m_command);
|
||||
switch (m_command)
|
||||
{
|
||||
case 0x60:
|
||||
// reset?
|
||||
m_phase = S3511_RTC_IDLE;
|
||||
m_bits = 0;
|
||||
break;
|
||||
case 0x62:
|
||||
m_phase = S3511_RTC_DATAIN;
|
||||
m_data_len = 1;
|
||||
break;
|
||||
case 0x63:
|
||||
m_data_len = 1;
|
||||
m_data[0] = 0x40;
|
||||
m_phase = S3511_RTC_DATAOUT;
|
||||
break;
|
||||
case 0x64:
|
||||
break;
|
||||
case 0x65:
|
||||
m_data_len = 7;
|
||||
update_time(m_data_len);
|
||||
m_phase = S3511_RTC_DATAOUT;
|
||||
break;
|
||||
case 0x67:
|
||||
m_data_len = 3;
|
||||
update_time(m_data_len);
|
||||
m_phase = S3511_RTC_DATAOUT;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown RTC command %02X\n", m_command);
|
||||
m_phase = S3511_RTC_IDLE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case S3511_RTC_IDLE:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
m_last_val = data & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
GBA EEPROM Device
|
||||
|
||||
TODO: can this sketchy EEPROM device be merged
|
||||
with the core implementation?
|
||||
-------------------------------------------------*/
|
||||
|
||||
//
|
||||
|
||||
gba_eeprom_device::gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits) :
|
||||
m_state(EEP_IDLE),
|
||||
m_machine(machine)
|
||||
{
|
||||
m_data = eeprom;
|
||||
m_data_size = size;
|
||||
m_addr_bits = addr_bits;
|
||||
|
||||
m_machine.save().save_item(m_state, "GBA_EEPROM/m_state");
|
||||
m_machine.save().save_item(m_command, "GBA_EEPROM/m_command");
|
||||
m_machine.save().save_item(m_count, "GBA_EEPROM/m_count");
|
||||
m_machine.save().save_item(m_addr, "GBA_EEPROM/m_addr");
|
||||
m_machine.save().save_item(m_bits, "GBA_EEPROM/m_bits");
|
||||
m_machine.save().save_item(m_eep_data, "GBA_EEPROM/m_eep_data");
|
||||
}
|
||||
|
||||
UINT32 gba_eeprom_device::read()
|
||||
{
|
||||
UINT32 out;
|
||||
|
||||
switch (m_state)
|
||||
{
|
||||
case EEP_IDLE:
|
||||
// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, activecpu_get_pc(), 1);
|
||||
return 0x00010001; // "ready"
|
||||
|
||||
case EEP_READFIRST:
|
||||
m_count--;
|
||||
|
||||
if (!m_count)
|
||||
{
|
||||
m_count = 64;
|
||||
m_bits = 0;
|
||||
m_eep_data = 0;
|
||||
m_state = EEP_READ;
|
||||
}
|
||||
break;
|
||||
case EEP_READ:
|
||||
if ((m_bits == 0) && (m_count))
|
||||
{
|
||||
if (m_addr >= m_data_size)
|
||||
{
|
||||
fatalerror("eeprom: invalid address (%x)\n", m_addr);
|
||||
}
|
||||
m_eep_data = m_data[m_addr];
|
||||
//printf("EEPROM read @ %x = %x (%x)\n", m_addr, m_eep_data, (m_eep_data & 0x80) ? 1 : 0);
|
||||
m_addr++;
|
||||
m_bits = 8;
|
||||
}
|
||||
|
||||
out = (m_eep_data & 0x80) ? 1 : 0;
|
||||
out |= (out<<16);
|
||||
m_eep_data <<= 1;
|
||||
|
||||
m_bits--;
|
||||
m_count--;
|
||||
|
||||
if (!m_count)
|
||||
{
|
||||
m_state = EEP_IDLE;
|
||||
}
|
||||
|
||||
// printf("out = %08x\n", out);
|
||||
// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %08x\n", offset, ~mem_mask, m_state, activecpu_get_pc(), out);
|
||||
return out;
|
||||
}
|
||||
// printf("eeprom_r: @ %x, mask %08x (state %d) (PC=%x) = %d\n", offset, ~mem_mask, m_state, space.device().safe_pc(), 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void gba_eeprom_device::write(UINT32 data)
|
||||
{
|
||||
// printf("eeprom_w: %x @ %x (state %d) (PC=%x)\n", data, offset, m_state, space.device().safe_pc());
|
||||
switch (m_state)
|
||||
{
|
||||
case EEP_IDLE:
|
||||
if (data == 1)
|
||||
m_state++;
|
||||
break;
|
||||
|
||||
case EEP_COMMAND:
|
||||
if (data == 1)
|
||||
m_command = EEP_READFIRST;
|
||||
else
|
||||
m_command = EEP_WRITE;
|
||||
m_state = EEP_ADDR;
|
||||
m_count = m_addr_bits;
|
||||
m_addr = 0;
|
||||
break;
|
||||
|
||||
case EEP_ADDR:
|
||||
m_addr <<= 1;
|
||||
m_addr |= (data & 1);
|
||||
m_count--;
|
||||
if (!m_count)
|
||||
{
|
||||
m_addr *= 8; // each address points to 8 bytes
|
||||
if (m_command == EEP_READFIRST)
|
||||
m_state = EEP_AFTERADDR;
|
||||
else
|
||||
{
|
||||
m_count = 64;
|
||||
m_bits = 8;
|
||||
m_state = EEP_WRITE;
|
||||
m_eep_data = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case EEP_AFTERADDR:
|
||||
m_state = m_command;
|
||||
m_count = 64;
|
||||
m_bits = 0;
|
||||
m_eep_data = 0;
|
||||
if (m_state == EEP_READFIRST)
|
||||
m_count = 4;
|
||||
break;
|
||||
|
||||
case EEP_WRITE:
|
||||
m_eep_data <<= 1;
|
||||
m_eep_data |= (data & 1);
|
||||
m_bits--;
|
||||
m_count--;
|
||||
|
||||
if (m_bits == 0)
|
||||
{
|
||||
osd_printf_verbose("%08x: EEPROM: %02x to %x\n", machine().device("maincpu")->safe_pc(), m_eep_data, m_addr);
|
||||
if (m_addr >= m_data_size)
|
||||
fatalerror("eeprom: invalid address (%x)\n", m_addr);
|
||||
|
||||
m_data[m_addr] = m_eep_data;
|
||||
m_addr++;
|
||||
m_eep_data = 0;
|
||||
m_bits = 8;
|
||||
}
|
||||
|
||||
if (!m_count)
|
||||
m_state = EEP_AFTERWRITE;
|
||||
break;
|
||||
|
||||
case EEP_AFTERWRITE:
|
||||
m_state = EEP_IDLE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,81 +6,37 @@
|
||||
#include "gba_slot.h"
|
||||
#include "machine/intelfsh.h"
|
||||
|
||||
// GBA RTC device
|
||||
|
||||
// ======================> gba_rom_device
|
||||
|
||||
class gba_rom_device : public device_t,
|
||||
public device_gba_cart_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
gba_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_rom) override { return m_rom[offset]; }
|
||||
enum {
|
||||
S3511_RTC_IDLE = 0,
|
||||
S3511_RTC_DATAOUT,
|
||||
S3511_RTC_DATAIN,
|
||||
S3511_RTC_COMMAND
|
||||
};
|
||||
|
||||
// ======================> gba_rom_sram_device
|
||||
|
||||
class gba_rom_sram_device : public gba_rom_device
|
||||
class gba_s3511_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) override;
|
||||
gba_s3511_device(running_machine &machine);
|
||||
running_machine &machine() const { return m_machine; }
|
||||
|
||||
void update_time(int len);
|
||||
UINT8 convert_to_bcd(int val);
|
||||
|
||||
int read_line();
|
||||
void write(UINT16 data, int gpio_dirs);
|
||||
|
||||
protected:
|
||||
int m_phase;
|
||||
UINT8 m_last_val, m_bits, m_command;
|
||||
int m_data_len;
|
||||
UINT8 m_data[7];
|
||||
|
||||
running_machine& m_machine;
|
||||
};
|
||||
|
||||
// ======================> gba_rom_flash_device
|
||||
|
||||
class gba_rom_flash_device : public gba_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) override;
|
||||
|
||||
private:
|
||||
//UINT32 m_flash_size;
|
||||
UINT32 m_flash_mask;
|
||||
required_device<intelfsh8_device> m_flash;
|
||||
};
|
||||
|
||||
// ======================> gba_rom_flash1m_device
|
||||
|
||||
class gba_rom_flash1m_device : public gba_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) override;
|
||||
|
||||
private:
|
||||
//UINT32 m_flash_size;
|
||||
UINT32 m_flash_mask;
|
||||
required_device<intelfsh8_device> m_flash;
|
||||
};
|
||||
|
||||
// GBA EEPROM device
|
||||
// TODO: is it possible to merge this with the standard EEPROM devices in the core?
|
||||
@ -102,10 +58,10 @@ class gba_eeprom_device
|
||||
public:
|
||||
gba_eeprom_device(running_machine &machine, UINT8 *eeprom, UINT32 size, int addr_bits);
|
||||
running_machine &machine() const { return m_machine; }
|
||||
|
||||
|
||||
UINT32 read();
|
||||
void write(UINT32 data);
|
||||
|
||||
|
||||
protected:
|
||||
UINT8 *m_data;
|
||||
UINT32 m_data_size;
|
||||
@ -116,17 +72,184 @@ protected:
|
||||
int m_bits;
|
||||
int m_addr_bits;
|
||||
UINT8 m_eep_data;
|
||||
|
||||
|
||||
running_machine& m_machine;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ======================> gba_rom_device
|
||||
|
||||
class gba_rom_device : public device_t,
|
||||
public device_gba_cart_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
gba_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_rom) override { return m_rom[offset]; }
|
||||
|
||||
virtual DECLARE_READ32_MEMBER(read_gpio) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_gpio) override;
|
||||
|
||||
virtual UINT16 gpio_dev_read(int gpio_dirs) { return 0; }
|
||||
virtual void gpio_dev_write(UINT16 data, int gpio_dirs) {}
|
||||
|
||||
private:
|
||||
UINT16 m_gpio_regs[4];
|
||||
UINT8 m_gpio_write_only, m_gpio_dirs;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_sram_device
|
||||
|
||||
class gba_rom_sram_device : public gba_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_sram_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
gba_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) override;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_drilldoz_device
|
||||
|
||||
class gba_rom_drilldoz_device : public gba_rom_sram_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_drilldoz_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_wariotws_device
|
||||
|
||||
class gba_rom_wariotws_device : public gba_rom_sram_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_wariotws_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
virtual UINT16 gpio_dev_read(int gpio_dirs) override;
|
||||
virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override;
|
||||
|
||||
private:
|
||||
UINT8 m_last_val;
|
||||
int m_counter;
|
||||
required_ioport m_gyro_z;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_flash_device
|
||||
|
||||
class gba_rom_flash_device : public gba_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_flash_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
gba_rom_flash_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) override;
|
||||
|
||||
protected:
|
||||
//UINT32 m_flash_size;
|
||||
UINT32 m_flash_mask;
|
||||
required_device<intelfsh8_device> m_flash;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_flash_rtc_device
|
||||
|
||||
class gba_rom_flash_rtc_device : public gba_rom_flash_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_flash_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual UINT16 gpio_dev_read(int gpio_dirs) override;
|
||||
virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<gba_s3511_device> m_rtc;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_flash1m_device
|
||||
|
||||
class gba_rom_flash1m_device : public gba_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_flash1m_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
gba_rom_flash1m_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) override;
|
||||
|
||||
protected:
|
||||
//UINT32 m_flash_size;
|
||||
UINT32 m_flash_mask;
|
||||
required_device<intelfsh8_device> m_flash;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_flash1m_rtc_device
|
||||
|
||||
class gba_rom_flash1m_rtc_device : public gba_rom_flash1m_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_flash1m_rtc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual UINT16 gpio_dev_read(int gpio_dirs) override;
|
||||
virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<gba_s3511_device> m_rtc;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_eeprom_device
|
||||
|
||||
class gba_rom_eeprom_device : public gba_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_eeprom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
gba_rom_eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
@ -141,12 +264,38 @@ private:
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_yoshiug_device
|
||||
|
||||
class gba_rom_yoshiug_device : public gba_rom_eeprom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_yoshiug_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
// reading and writing
|
||||
virtual DECLARE_READ32_MEMBER(read_tilt) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_tilt) override;
|
||||
|
||||
private:
|
||||
int m_tilt_ready;
|
||||
UINT16 m_xpos, m_ypos;
|
||||
required_ioport m_tilt_x;
|
||||
required_ioport m_tilt_y;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_eeprom64_device
|
||||
|
||||
class gba_rom_eeprom64_device : public gba_rom_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_eeprom64_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
gba_rom_eeprom64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
@ -156,11 +305,35 @@ public:
|
||||
virtual DECLARE_READ32_MEMBER(read_ram) override;
|
||||
virtual DECLARE_WRITE32_MEMBER(write_ram) override;
|
||||
|
||||
private:
|
||||
protected:
|
||||
std::unique_ptr<gba_eeprom_device> m_eeprom;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_boktai_device
|
||||
|
||||
class gba_rom_boktai_device : public gba_rom_eeprom64_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
gba_rom_boktai_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
virtual UINT16 gpio_dev_read(int gpio_dirs) override;
|
||||
virtual void gpio_dev_write(UINT16 data, int gpio_dirs) override;
|
||||
|
||||
private:
|
||||
std::unique_ptr<gba_s3511_device> m_rtc;
|
||||
required_ioport m_sensor;
|
||||
UINT8 m_last_val;
|
||||
int m_counter;
|
||||
};
|
||||
|
||||
|
||||
// ======================> gba_rom_3dmatrix_device
|
||||
|
||||
class gba_rom_3dmatrix_device : public gba_rom_device
|
||||
@ -184,10 +357,16 @@ private:
|
||||
// device type definition
|
||||
extern const device_type GBA_ROM_STD;
|
||||
extern const device_type GBA_ROM_SRAM;
|
||||
extern const device_type GBA_ROM_DRILLDOZ;
|
||||
extern const device_type GBA_ROM_WARIOTWS;
|
||||
extern const device_type GBA_ROM_EEPROM;
|
||||
extern const device_type GBA_ROM_YOSHIUG;
|
||||
extern const device_type GBA_ROM_EEPROM64;
|
||||
extern const device_type GBA_ROM_BOKTAI;
|
||||
extern const device_type GBA_ROM_FLASH;
|
||||
extern const device_type GBA_ROM_FLASH_RTC;
|
||||
extern const device_type GBA_ROM_FLASH1M;
|
||||
extern const device_type GBA_ROM_FLASH1M_RTC;
|
||||
extern const device_type GBA_ROM_3DMATRIX;
|
||||
|
||||
|
||||
|
@ -31,7 +31,6 @@ public:
|
||||
UINT32 garouh_bank_base(UINT16 sel);
|
||||
UINT32 mslug3_bank_base(UINT16 sel);
|
||||
UINT32 kof2000_bank_base(UINT16 sel);
|
||||
void sma_install_random_read_handler(cpu_device* maincpu, int addr1, int addr2 );
|
||||
void kof99_decrypt_68k(UINT8* base);
|
||||
void garou_decrypt_68k(UINT8* base);
|
||||
void garouh_decrypt_68k(UINT8* base);
|
||||
|
@ -42,13 +42,6 @@ public:
|
||||
DECLARE_WRITE8_MEMBER( anout_w );
|
||||
DECLARE_READ8_MEMBER( anin_r );
|
||||
DECLARE_WRITE8_MEMBER( anio_w );
|
||||
DECLARE_READ8_MEMBER( st0_r );
|
||||
DECLARE_READ8_MEMBER( st1_r );
|
||||
DECLARE_READ8_MEMBER( st2_r );
|
||||
DECLARE_READ8_MEMBER( usbs_r );
|
||||
DECLARE_WRITE8_MEMBER( usbs_w );
|
||||
DECLARE_WRITE8_MEMBER( paging_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( acia_tx );
|
||||
DECLARE_WRITE_LINE_MEMBER( acia_interrupt );
|
||||
DECLARE_WRITE_LINE_MEMBER( ctc_z2_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( adc_eoc_w );
|
||||
|
@ -23,7 +23,7 @@ Connections
|
||||
E ----- | 2 | joy 1 down
|
||||
| 7 |
|
||||
D ----- | 3 | joy 1 left
|
||||
| 8 |
|
||||
A ----- | 8 | ground
|
||||
C ----- | 4 | joy 1 right
|
||||
| 9 |
|
||||
| 5 |
|
||||
@ -35,13 +35,14 @@ Connections
|
||||
K ----- | 2 | joy 2 down
|
||||
| 7 |
|
||||
J ----- | 3 | joy 2 left
|
||||
| 8 |
|
||||
N ----- | 8 | ground
|
||||
H ----- | 4 | joy 2 right
|
||||
| 9 |
|
||||
| 5 |
|
||||
\____|
|
||||
|
||||
M ----- audio amplifier
|
||||
M ----- / audio
|
||||
N ----- \ amplifier
|
||||
|
||||
*/
|
||||
|
||||
@ -139,7 +140,6 @@ void pet_userport_joystick_and_sound_device::device_start()
|
||||
|
||||
void pet_userport_joystick_and_sound_device::update_port1()
|
||||
{
|
||||
// printf( "update port1\n" );
|
||||
output_f(m_up1 && m_fire1);
|
||||
output_e(m_down1 && m_fire1);
|
||||
}
|
||||
@ -151,7 +151,6 @@ void pet_userport_joystick_and_sound_device::update_port1()
|
||||
|
||||
void pet_userport_joystick_and_sound_device::update_port2()
|
||||
{
|
||||
// printf( "update port2\n" );
|
||||
output_l(m_up2 && m_fire2);
|
||||
output_k(m_down2 && m_fire2);
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> pet_userport_joystick_adapter_device
|
||||
// ======================> pet_userport_joystick_and_sound_device
|
||||
|
||||
class pet_userport_joystick_and_sound_device : public device_t,
|
||||
public device_pet_user_port_interface
|
||||
|
@ -38,8 +38,6 @@ public:
|
||||
virtual UINT8 pet_bd_r(address_space &space, offs_t offset, UINT8 data, int &sel) override;
|
||||
virtual void pet_bd_w(address_space &space, offs_t offset, UINT8 data, int &sel) override;
|
||||
|
||||
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
@ -63,6 +63,8 @@ public:
|
||||
m_counter(0),
|
||||
m_addressed(true),
|
||||
m_ready(true) { };
|
||||
|
||||
virtual ~waitstate_generator() { }
|
||||
void select_in(bool addressed);
|
||||
virtual void ready_in(line_state ready) =0;
|
||||
virtual void clock_in(line_state clkout) =0;
|
||||
|
@ -1321,20 +1321,20 @@ void alto2_cpu_device::init_ether(int task)
|
||||
m_ether_a42 = prom_load(machine(), &pl_enet_a42, memregion("ether_a42")->base());
|
||||
m_ether_a49 = prom_load(machine(), &pl_enet_a49, memregion("ether_a49")->base());
|
||||
|
||||
set_bs(task, bs_ether_eidfct, &alto2_cpu_device::bs_early_eidfct, 0);
|
||||
set_bs(task, bs_ether_eidfct, &alto2_cpu_device::bs_early_eidfct, nullptr);
|
||||
|
||||
set_f1(task, f1_block, &alto2_cpu_device::f1_early_eth_block, 0);
|
||||
set_f1(task, f1_ether_eilfct, &alto2_cpu_device::f1_early_eilfct, 0);
|
||||
set_f1(task, f1_ether_epfct, &alto2_cpu_device::f1_early_epfct, 0);
|
||||
set_f1(task, f1_ether_ewfct, 0, &alto2_cpu_device::f1_late_ewfct);
|
||||
set_f1(task, f1_block, &alto2_cpu_device::f1_early_eth_block, nullptr);
|
||||
set_f1(task, f1_ether_eilfct, &alto2_cpu_device::f1_early_eilfct, nullptr);
|
||||
set_f1(task, f1_ether_epfct, &alto2_cpu_device::f1_early_epfct, nullptr);
|
||||
set_f1(task, f1_ether_ewfct, nullptr, &alto2_cpu_device::f1_late_ewfct);
|
||||
|
||||
set_f2(task, f2_ether_eodfct, 0, &alto2_cpu_device::f2_late_eodfct);
|
||||
set_f2(task, f2_ether_eosfct, 0, &alto2_cpu_device::f2_late_eosfct);
|
||||
set_f2(task, f2_ether_erbfct, 0, &alto2_cpu_device::f2_late_erbfct);
|
||||
set_f2(task, f2_ether_eefct, 0, &alto2_cpu_device::f2_late_eefct);
|
||||
set_f2(task, f2_ether_ebfct, 0, &alto2_cpu_device::f2_late_ebfct);
|
||||
set_f2(task, f2_ether_ecbfct, 0, &alto2_cpu_device::f2_late_ecbfct);
|
||||
set_f2(task, f2_ether_eisfct, 0, &alto2_cpu_device::f2_late_eisfct);
|
||||
set_f2(task, f2_ether_eodfct, nullptr, &alto2_cpu_device::f2_late_eodfct);
|
||||
set_f2(task, f2_ether_eosfct, nullptr, &alto2_cpu_device::f2_late_eosfct);
|
||||
set_f2(task, f2_ether_erbfct, nullptr, &alto2_cpu_device::f2_late_erbfct);
|
||||
set_f2(task, f2_ether_eefct, nullptr, &alto2_cpu_device::f2_late_eefct);
|
||||
set_f2(task, f2_ether_ebfct, nullptr, &alto2_cpu_device::f2_late_ebfct);
|
||||
set_f2(task, f2_ether_ecbfct, nullptr, &alto2_cpu_device::f2_late_ecbfct);
|
||||
set_f2(task, f2_ether_eisfct, nullptr, &alto2_cpu_device::f2_late_eisfct);
|
||||
|
||||
m_active_callback[task] = &alto2_cpu_device::activate_eth;
|
||||
|
||||
|
@ -2713,23 +2713,23 @@ void alto2_cpu_device::hard_reset()
|
||||
if (0 == (m_reset_mode & (1 << task)))
|
||||
m_task_mpc[task] |= ALTO2_UCODE_RAM_BASE;
|
||||
|
||||
set_bs(task, bs_read_r, &alto2_cpu_device::bs_early_read_r, 0);
|
||||
set_bs(task, bs_read_r, &alto2_cpu_device::bs_early_read_r, nullptr);
|
||||
set_bs(task, bs_load_r, &alto2_cpu_device::bs_early_load_r, &alto2_cpu_device::bs_late_load_r);
|
||||
set_bs(task, bs_no_source, 0, 0);
|
||||
set_bs(task, bs_no_source, nullptr, nullptr);
|
||||
set_bs(task, bs_task_3, &alto2_cpu_device::fn_bs_bad_0, &alto2_cpu_device::fn_bs_bad_1); // task specific
|
||||
set_bs(task, bs_task_4, &alto2_cpu_device::fn_bs_bad_0, &alto2_cpu_device::fn_bs_bad_1); // task specific
|
||||
set_bs(task, bs_read_md, &alto2_cpu_device::bs_early_read_md, 0);
|
||||
set_bs(task, bs_mouse, &alto2_cpu_device::bs_early_mouse, 0);
|
||||
set_bs(task, bs_disp, &alto2_cpu_device::bs_early_disp, 0);
|
||||
set_bs(task, bs_read_md, &alto2_cpu_device::bs_early_read_md, nullptr);
|
||||
set_bs(task, bs_mouse, &alto2_cpu_device::bs_early_mouse, nullptr);
|
||||
set_bs(task, bs_disp, &alto2_cpu_device::bs_early_disp, nullptr);
|
||||
|
||||
set_f1(task, f1_nop, 0, 0);
|
||||
set_f1(task, f1_load_mar, 0, &alto2_cpu_device::f1_late_load_mar);
|
||||
set_f1(task, f1_task, &alto2_cpu_device::f1_early_task, 0);
|
||||
set_f1(task, f1_nop, nullptr, nullptr);
|
||||
set_f1(task, f1_load_mar, nullptr, &alto2_cpu_device::f1_late_load_mar);
|
||||
set_f1(task, f1_task, &alto2_cpu_device::f1_early_task, nullptr);
|
||||
set_f1(task, f1_block, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // not all tasks have the f1_block
|
||||
set_f1(task, f1_l_lsh_1, 0, &alto2_cpu_device::f1_late_l_lsh_1);
|
||||
set_f1(task, f1_l_rsh_1, 0, &alto2_cpu_device::f1_late_l_rsh_1);
|
||||
set_f1(task, f1_l_lcy_8, 0, &alto2_cpu_device::f1_late_l_lcy_8);
|
||||
set_f1(task, f1_const, 0, 0);
|
||||
set_f1(task, f1_l_lsh_1, nullptr, &alto2_cpu_device::f1_late_l_lsh_1);
|
||||
set_f1(task, f1_l_rsh_1, nullptr, &alto2_cpu_device::f1_late_l_rsh_1);
|
||||
set_f1(task, f1_l_lcy_8, nullptr, &alto2_cpu_device::f1_late_l_lcy_8);
|
||||
set_f1(task, f1_const, nullptr, nullptr);
|
||||
set_f1(task, f1_task_10, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific
|
||||
set_f1(task, f1_task_11, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific
|
||||
set_f1(task, f1_task_12, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific
|
||||
@ -2739,14 +2739,14 @@ void alto2_cpu_device::hard_reset()
|
||||
set_f1(task, f1_task_16, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific
|
||||
set_f1(task, f1_task_17, &alto2_cpu_device::fn_f1_bad_0, &alto2_cpu_device::fn_f1_bad_1); // f1_task_10 to f1_task_17 are task specific
|
||||
|
||||
set_f2(task, f2_nop, 0, 0);
|
||||
set_f2(task, f2_bus_eq_zero, 0, &alto2_cpu_device::f2_late_bus_eq_zero);
|
||||
set_f2(task, f2_shifter_lt_zero,0, &alto2_cpu_device::f2_late_shifter_lt_zero);
|
||||
set_f2(task, f2_shifter_eq_zero,0, &alto2_cpu_device::f2_late_shifter_eq_zero);
|
||||
set_f2(task, f2_bus, 0, &alto2_cpu_device::f2_late_bus);
|
||||
set_f2(task, f2_alucy, 0, &alto2_cpu_device::f2_late_alucy);
|
||||
set_f2(task, f2_load_md, 0, &alto2_cpu_device::f2_late_load_md);
|
||||
set_f2(task, f2_const, 0, 0);
|
||||
set_f2(task, f2_nop, nullptr, nullptr);
|
||||
set_f2(task, f2_bus_eq_zero, nullptr, &alto2_cpu_device::f2_late_bus_eq_zero);
|
||||
set_f2(task, f2_shifter_lt_zero,nullptr, &alto2_cpu_device::f2_late_shifter_lt_zero);
|
||||
set_f2(task, f2_shifter_eq_zero,nullptr, &alto2_cpu_device::f2_late_shifter_eq_zero);
|
||||
set_f2(task, f2_bus, nullptr, &alto2_cpu_device::f2_late_bus);
|
||||
set_f2(task, f2_alucy, nullptr, &alto2_cpu_device::f2_late_alucy);
|
||||
set_f2(task, f2_load_md, nullptr, &alto2_cpu_device::f2_late_load_md);
|
||||
set_f2(task, f2_const, nullptr, nullptr);
|
||||
set_f2(task, f2_task_10, &alto2_cpu_device::fn_f2_bad_0, &alto2_cpu_device::fn_f2_bad_1); // f2_task_10 to f2_task_17 are task specific
|
||||
set_f2(task, f2_task_11, &alto2_cpu_device::fn_f2_bad_0, &alto2_cpu_device::fn_f2_bad_1); // f2_task_10 to f2_task_17 are task specific
|
||||
set_f2(task, f2_task_12, &alto2_cpu_device::fn_f2_bad_0, &alto2_cpu_device::fn_f2_bad_1); // f2_task_10 to f2_task_17 are task specific
|
||||
|
@ -186,7 +186,7 @@ static inline int MAKE_INT_8(int A) {return (A & 0x80) ? A | ~0xff : A & 0xff;}
|
||||
#define CLK_W_S 2
|
||||
#define CLK_W_SIY 5
|
||||
|
||||
#define CLK(A) CLOCKS -= (m_cpu_type == CPU_TYPE_G65816 ? A : A*6)
|
||||
#define CLK(A) CLOCKS -= A
|
||||
#define CLK_BUS(A) CLOCKS -= A
|
||||
#define USE_ALL_CLKS() CLOCKS = 0
|
||||
|
||||
|
@ -114,8 +114,8 @@ void h8_device::device_start()
|
||||
inst_substate = 0;
|
||||
count_before_instruction_step = 0;
|
||||
requested_state = -1;
|
||||
dma_device = NULL;
|
||||
dtc_device = NULL;
|
||||
dma_device = nullptr;
|
||||
dtc_device = nullptr;
|
||||
}
|
||||
|
||||
void h8_device::device_reset()
|
||||
@ -130,8 +130,8 @@ void h8_device::device_reset()
|
||||
irq_nmi = false;
|
||||
taken_irq_vector = 0;
|
||||
taken_irq_level = -1;
|
||||
current_dma = NULL;
|
||||
current_dtc = NULL;
|
||||
current_dma = nullptr;
|
||||
current_dtc = nullptr;
|
||||
}
|
||||
|
||||
bool h8_device::trigger_dma(int vector)
|
||||
|
@ -77,10 +77,10 @@ WRITE8_MEMBER(h8_dtc_device::dtvecr_w)
|
||||
|
||||
void h8_dtc_device::edge(int vector)
|
||||
{
|
||||
for(std::list<int>::const_iterator i = waiting_vector.begin(); i != waiting_vector.end(); i++)
|
||||
for(std::list<int>::const_iterator i = waiting_vector.begin(); i != waiting_vector.end(); ++i)
|
||||
if(*i == vector)
|
||||
return;
|
||||
for(std::list<int>::const_iterator i = waiting_writeback.begin(); i != waiting_writeback.end(); i++)
|
||||
for(std::list<int>::const_iterator i = waiting_writeback.begin(); i != waiting_writeback.end(); ++i)
|
||||
if(*i == vector)
|
||||
return;
|
||||
if(waiting_vector.empty() && waiting_writeback.empty())
|
||||
@ -120,7 +120,7 @@ void h8_dtc_device::queue(int vector)
|
||||
void h8_dtc_device::vector_done(int vector)
|
||||
{
|
||||
std::list<int>::iterator wi;
|
||||
for(wi = waiting_vector.begin(); wi != waiting_vector.end() && *wi != vector && *wi != vector + DTC_CHAINED; wi++);
|
||||
for(wi = waiting_vector.begin(); wi != waiting_vector.end() && *wi != vector && *wi != vector + DTC_CHAINED; ++wi) {};
|
||||
assert(wi != waiting_vector.end());
|
||||
waiting_vector.erase(wi);
|
||||
|
||||
@ -167,7 +167,7 @@ void h8_dtc_device::vector_done(int vector)
|
||||
void h8_dtc_device::writeback_done(int vector)
|
||||
{
|
||||
std::list<int>::iterator wi;
|
||||
for(wi = waiting_writeback.begin(); wi != waiting_writeback.end() && *wi != vector; wi++);
|
||||
for(wi = waiting_writeback.begin(); wi != waiting_writeback.end() && *wi != vector; ++wi) {};
|
||||
assert(wi != waiting_writeback.end());
|
||||
waiting_writeback.erase(wi);
|
||||
|
||||
|
@ -7,25 +7,34 @@
|
||||
// I searched for a while for any kind of documentation about them but found nothing at all.
|
||||
// Some time later I found the mnemonics in the binary dump of assembly development option ROM:
|
||||
// CIM & SIM, respectively. From the mnemonic I deduced their function: Clear & Set Interrupt Mask.
|
||||
// I think they are basically used to temporarily disable/enable interrupt recognition inside
|
||||
// ISRs. This is consistent with their usage in PPU firmware and test ROM. The official EIR &
|
||||
// DIR instructions cannot be used while servicing an interrupt because they probably reset
|
||||
// the "in ISR" condition of the processor.
|
||||
// Using CIM&SIM only makes sense in low-level ISRs because high-level ones can't be interrupted
|
||||
// by anyone.
|
||||
// Now, I still have some doubts about the "polarity" of interrupt mask. Is interrupt
|
||||
// recognition disabled when the mask is cleared or is it the opposite?
|
||||
// I'm leaning towards the "no interrupts with mask cleared" interpretation, but I'm not 100%
|
||||
// convinced. CIM & SIM at the moment are implemented with this interpretation (see also
|
||||
// NO_ISR_WITH_IM_CLEARED macro below).
|
||||
// After a few experiments, crashes, etc. here's my opinion on their purpose.
|
||||
// When the CPU receives an interrupt, its AEC registers can be in any state so it could
|
||||
// be impossible to properly save state, fetch the interrupt vector and start executing the ISR.
|
||||
// The solution is having an hidden "interrupt mask" flag that gets set when an interrupt (either
|
||||
// low or high priority) is acknowledged and is cleared when the "ret 0,p" instruction that ends
|
||||
// the ISR is executed. The effects of having the interrupt mask set are:
|
||||
// * No interrupts are recognized
|
||||
// * A few essential AEC registers are overridden to establish a "safe" environment to save state
|
||||
// and execute ISR (see hp_5061_3001_cpu_device::add_mae).
|
||||
// Inside the ISR, CIM & SIM instructions can be used to change the interrupt mask and switch
|
||||
// between normal & overridden settings of AEC.
|
||||
// As an example of CIM&SIM usage, we can have a look at the keyboard ISR in 9845B PPU processor:
|
||||
// * A key is pressed and IRQ 0 is set
|
||||
// * Interrupt 0 is recognized, IM is set
|
||||
// * R register is used to save program counter in block = 1 (overriding any R36 value)
|
||||
// * Vector is fetched and execution begins in block 5 (overriding R33 value)
|
||||
// * Registers are saved to RAM (again in overridden block 1)
|
||||
// * AEC registers are set to correct value for ISR execution
|
||||
// * CIM is used to exit the special behaviour of AEC and to allow high-priority interrupts
|
||||
// * Useful ISR processing is done
|
||||
// * SIM is used to re-enter special behaviour of AEC and to block any interrupt
|
||||
// * State is restored (including all AEC registers)
|
||||
// * RET 0,P is executed to end ISR: return program counter is popped off the stack and IM is cleared
|
||||
|
||||
#include "emu.h"
|
||||
#include "debugger.h"
|
||||
#include "hphybrid.h"
|
||||
|
||||
// Define this to have "IM cleared" == "No interrupt recognition"
|
||||
#define NO_ISR_WITH_IM_CLEARED
|
||||
|
||||
enum {
|
||||
HPHYBRID_A,
|
||||
HPHYBRID_B,
|
||||
@ -539,9 +548,11 @@ UINT16 hp_hybrid_cpu_device::execute_one_sub(UINT16 opcode)
|
||||
memmove(&m_reg_PA[ 0 ] , &m_reg_PA[ 1 ] , HPHYBRID_INT_LVLS);
|
||||
m_pa_changed_func((UINT8)CURRENT_PA);
|
||||
}
|
||||
BIT_CLR(m_flags, HPHYBRID_IM_BIT);
|
||||
tmp = RM(AEC_CASE_C , m_reg_R--) + (opcode & 0x1f);
|
||||
BIT_CLR(m_flags, HPHYBRID_IM_BIT);
|
||||
} else {
|
||||
tmp = RM(AEC_CASE_C , m_reg_R--) + (opcode & 0x1f);
|
||||
}
|
||||
tmp = RM(AEC_CASE_C , m_reg_R--) + (opcode & 0x1f);
|
||||
return BIT(opcode , 5) ? tmp - 0x20 : tmp;
|
||||
} else {
|
||||
switch (opcode) {
|
||||
@ -1483,11 +1494,7 @@ UINT16 hp_5061_3001_cpu_device::execute_no_bpc_ioc(UINT16 opcode)
|
||||
// Probably "Clear Interrupt Mask"
|
||||
// No idea at all about exec. time: make it 9 cycles
|
||||
m_icount -= 9;
|
||||
#ifndef NO_ISR_WITH_IM_CLEARED
|
||||
BIT_CLR(m_flags, HPHYBRID_IM_BIT);
|
||||
#else
|
||||
BIT_SET(m_flags, HPHYBRID_IM_BIT);
|
||||
#endif
|
||||
logerror("hp-5061-3001: CIM, P = %06x flags = %05x\n" , m_genpc , m_flags);
|
||||
break;
|
||||
|
||||
@ -1497,11 +1504,7 @@ UINT16 hp_5061_3001_cpu_device::execute_no_bpc_ioc(UINT16 opcode)
|
||||
// Probably "Set Interrupt Mask"
|
||||
// No idea at all about exec. time: make it 9 cycles
|
||||
m_icount -= 9;
|
||||
#ifndef NO_ISR_WITH_IM_CLEARED
|
||||
BIT_SET(m_flags, HPHYBRID_IM_BIT);
|
||||
#else
|
||||
BIT_CLR(m_flags, HPHYBRID_IM_BIT);
|
||||
#endif
|
||||
logerror("hp-5061-3001: SIM, P = %06x flags = %05x\n" , m_genpc , m_flags);
|
||||
break;
|
||||
|
||||
@ -1532,51 +1535,63 @@ offs_t hp_5061_3001_cpu_device::disasm_disassemble(char *buffer, offs_t pc, cons
|
||||
|
||||
UINT32 hp_5061_3001_cpu_device::add_mae(aec_cases_t aec_case , UINT16 addr)
|
||||
{
|
||||
UINT16 bsc_reg;
|
||||
bool top_half = BIT(addr , 15) != 0;
|
||||
UINT16 bsc_reg;
|
||||
bool top_half = BIT(addr , 15) != 0;
|
||||
|
||||
// Detect accesses to top half of base page
|
||||
if ((aec_case == AEC_CASE_C || aec_case == AEC_CASE_I) && (addr & 0xfe00) == 0xfe00) {
|
||||
aec_case = AEC_CASE_B;
|
||||
// Detect accesses to top half of base page
|
||||
if ((aec_case == AEC_CASE_C || aec_case == AEC_CASE_I) && (addr & 0xfe00) == 0xfe00) {
|
||||
aec_case = AEC_CASE_B;
|
||||
}
|
||||
|
||||
switch (aec_case) {
|
||||
case AEC_CASE_A:
|
||||
if (top_half) {
|
||||
bsc_reg = m_reg_aec[ HP_REG_R34_ADDR - HP_REG_R32_ADDR ];
|
||||
} else {
|
||||
// Block 5 is used when IM bit overrides R33 value
|
||||
bsc_reg = BIT(m_flags , HPHYBRID_IM_BIT) ? 5 : m_reg_aec[ HP_REG_R33_ADDR - HP_REG_R32_ADDR ];
|
||||
}
|
||||
break;
|
||||
|
||||
switch (aec_case) {
|
||||
case AEC_CASE_A:
|
||||
bsc_reg = top_half ? HP_REG_R34_ADDR : HP_REG_R33_ADDR;
|
||||
break;
|
||||
|
||||
case AEC_CASE_B:
|
||||
bsc_reg = top_half ? HP_REG_R36_ADDR : HP_REG_R33_ADDR;
|
||||
break;
|
||||
|
||||
case AEC_CASE_C:
|
||||
bsc_reg = top_half ? HP_REG_R32_ADDR : HP_REG_R35_ADDR;
|
||||
break;
|
||||
|
||||
case AEC_CASE_D:
|
||||
bsc_reg = top_half ? HP_REG_R32_ADDR : HP_REG_R37_ADDR;
|
||||
break;
|
||||
|
||||
case AEC_CASE_I:
|
||||
// Behaviour of AEC during interrupt vector fetch is undocumented but it can be guessed from 9845B firmware.
|
||||
// Basically in this case the integrated AEC seems to do what the discrete implementation in 9845A does:
|
||||
// top half of memory is mapped to block 0 (fixed) and bottom half is mapped according to content of R35
|
||||
// (see pg 334 of patent).
|
||||
bsc_reg = top_half ? 0 : HP_REG_R35_ADDR;
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("hphybrid: aec_case=%d\n" , aec_case);
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT16 aec_reg = (bsc_reg != 0) ? (m_reg_aec[ bsc_reg - HP_REG_R32_ADDR ] & BSC_REG_MASK) : 0;
|
||||
|
||||
if (m_forced_bsc_25) {
|
||||
aec_reg = (aec_reg & 0xf) | 0x20;
|
||||
case AEC_CASE_B:
|
||||
if (top_half) {
|
||||
// Block 1 is used when IM bit overrides R36 value
|
||||
bsc_reg = BIT(m_flags , HPHYBRID_IM_BIT) ? 1 : m_reg_aec[ HP_REG_R36_ADDR - HP_REG_R32_ADDR ];
|
||||
} else {
|
||||
// Block 5 is used when IM bit overrides R33 value
|
||||
bsc_reg = BIT(m_flags , HPHYBRID_IM_BIT) ? 5 : m_reg_aec[ HP_REG_R33_ADDR - HP_REG_R32_ADDR ];
|
||||
}
|
||||
break;
|
||||
|
||||
return (UINT32)addr | ((UINT32)aec_reg << 16);
|
||||
case AEC_CASE_C:
|
||||
bsc_reg = top_half ? m_reg_aec[ HP_REG_R32_ADDR - HP_REG_R32_ADDR ] : m_reg_aec[ HP_REG_R35_ADDR - HP_REG_R32_ADDR ];
|
||||
break;
|
||||
|
||||
case AEC_CASE_D:
|
||||
bsc_reg = top_half ? m_reg_aec[ HP_REG_R32_ADDR - HP_REG_R32_ADDR ] : m_reg_aec[ HP_REG_R37_ADDR - HP_REG_R32_ADDR ];
|
||||
break;
|
||||
|
||||
case AEC_CASE_I:
|
||||
// Behaviour of AEC during interrupt vector fetch is undocumented but it can be guessed from 9845B firmware.
|
||||
// Basically in this case the integrated AEC seems to do what the discrete implementation in 9845A does:
|
||||
// top half of memory is mapped to block 0 (fixed) and bottom half is mapped according to content of R35
|
||||
// (see pg 334 of patent).
|
||||
// I'm beginning to suspect that these values actually come from IM overriding case "C"
|
||||
bsc_reg = top_half ? 0 : m_reg_aec[ HP_REG_R35_ADDR - HP_REG_R32_ADDR ];
|
||||
break;
|
||||
|
||||
default:
|
||||
logerror("hphybrid: aec_case=%d\n" , aec_case);
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT16 aec_reg = bsc_reg & BSC_REG_MASK;
|
||||
|
||||
if (m_forced_bsc_25) {
|
||||
aec_reg = (aec_reg & 0xf) | 0x20;
|
||||
}
|
||||
|
||||
return (UINT32)addr | ((UINT32)aec_reg << 16);
|
||||
}
|
||||
|
||||
UINT16 hp_5061_3001_cpu_device::read_non_common_reg(UINT16 addr)
|
||||
@ -1655,10 +1670,8 @@ void hp_5061_3001_cpu_device::write_non_common_reg(UINT16 addr , UINT16 v)
|
||||
|
||||
void hp_5061_3001_cpu_device::enter_isr(void)
|
||||
{
|
||||
// Set interrupt mask when entering an ISR
|
||||
#ifndef NO_ISR_WITH_IM_CLEARED
|
||||
BIT_SET(m_flags, HPHYBRID_IM_BIT);
|
||||
#endif
|
||||
// Set interrupt mask when entering an ISR
|
||||
BIT_SET(m_flags, HPHYBRID_IM_BIT);
|
||||
}
|
||||
|
||||
hp_5061_3011_cpu_device::hp_5061_3011_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
|
@ -11,7 +11,6 @@
|
||||
#include "sharcfe.h"
|
||||
|
||||
|
||||
#define ENABLE_DRC 0
|
||||
#define DISABLE_FAST_REGISTERS 1
|
||||
|
||||
|
||||
@ -76,6 +75,7 @@ adsp21062_device::adsp21062_device(const machine_config &mconfig, const char *ta
|
||||
, m_cache(CACHE_SIZE + sizeof(sharc_internal_state))
|
||||
, m_drcuml(nullptr)
|
||||
, m_drcfe(nullptr)
|
||||
, m_enable_drc(false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -86,6 +86,11 @@ offs_t adsp21062_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8
|
||||
return CPU_DISASSEMBLE_NAME(sharc)(this, buffer, pc, oprom, opram, options);
|
||||
}
|
||||
|
||||
void adsp21062_device::enable_recompiler()
|
||||
{
|
||||
m_enable_drc = true;
|
||||
}
|
||||
|
||||
|
||||
void adsp21062_device::CHANGE_PC(UINT32 newpc)
|
||||
{
|
||||
@ -892,45 +897,48 @@ void adsp21062_device::check_interrupts()
|
||||
|
||||
void adsp21062_device::execute_run()
|
||||
{
|
||||
#if ENABLE_DRC
|
||||
if (m_core->irq_pending != 0)
|
||||
if (m_enable_drc)
|
||||
{
|
||||
m_core->idle = 0;
|
||||
}
|
||||
execute_run_drc();
|
||||
return;
|
||||
#else
|
||||
if (m_core->idle && m_core->irq_pending == 0)
|
||||
{
|
||||
m_core->icount = 0;
|
||||
debugger_instruction_hook(this, m_core->daddr);
|
||||
}
|
||||
if (m_core->irq_pending != 0)
|
||||
{
|
||||
check_interrupts();
|
||||
m_core->idle = 0;
|
||||
}
|
||||
|
||||
while (m_core->icount > 0 && !m_core->idle)
|
||||
{
|
||||
m_core->pc = m_core->daddr;
|
||||
m_core->daddr = m_core->faddr;
|
||||
m_core->faddr = m_core->nfaddr;
|
||||
m_core->nfaddr++;
|
||||
|
||||
m_core->astat_old_old_old = m_core->astat_old_old;
|
||||
m_core->astat_old_old = m_core->astat_old;
|
||||
m_core->astat_old = m_core->astat;
|
||||
|
||||
debugger_instruction_hook(this, m_core->pc);
|
||||
|
||||
m_core->opcode = ROPCODE(m_core->pc);
|
||||
|
||||
// handle looping
|
||||
if (m_core->pc == m_core->laddr.addr)
|
||||
if (m_core->irq_pending != 0)
|
||||
{
|
||||
switch (m_core->laddr.loop_type)
|
||||
m_core->idle = 0;
|
||||
}
|
||||
execute_run_drc();
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_core->idle && m_core->irq_pending == 0)
|
||||
{
|
||||
m_core->icount = 0;
|
||||
debugger_instruction_hook(this, m_core->daddr);
|
||||
}
|
||||
if (m_core->irq_pending != 0)
|
||||
{
|
||||
check_interrupts();
|
||||
m_core->idle = 0;
|
||||
}
|
||||
|
||||
while (m_core->icount > 0 && !m_core->idle)
|
||||
{
|
||||
m_core->pc = m_core->daddr;
|
||||
m_core->daddr = m_core->faddr;
|
||||
m_core->faddr = m_core->nfaddr;
|
||||
m_core->nfaddr++;
|
||||
|
||||
m_core->astat_old_old_old = m_core->astat_old_old;
|
||||
m_core->astat_old_old = m_core->astat_old;
|
||||
m_core->astat_old = m_core->astat;
|
||||
|
||||
debugger_instruction_hook(this, m_core->pc);
|
||||
|
||||
m_core->opcode = ROPCODE(m_core->pc);
|
||||
|
||||
// handle looping
|
||||
if (m_core->pc == m_core->laddr.addr)
|
||||
{
|
||||
switch (m_core->laddr.loop_type)
|
||||
{
|
||||
case 0: // arithmetic condition-based
|
||||
{
|
||||
int condition = m_core->laddr.code;
|
||||
@ -980,27 +988,27 @@ void adsp21062_device::execute_run()
|
||||
CHANGE_PC(TOP_PC());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
(this->*m_sharc_op[(m_core->opcode >> 39) & 0x1ff])();
|
||||
(this->*m_sharc_op[(m_core->opcode >> 39) & 0x1ff])();
|
||||
|
||||
|
||||
|
||||
|
||||
// System register latency effect
|
||||
if (m_core->systemreg_latency_cycles > 0)
|
||||
{
|
||||
--m_core->systemreg_latency_cycles;
|
||||
if (m_core->systemreg_latency_cycles <= 0)
|
||||
// System register latency effect
|
||||
if (m_core->systemreg_latency_cycles > 0)
|
||||
{
|
||||
systemreg_write_latency_effect();
|
||||
--m_core->systemreg_latency_cycles;
|
||||
if (m_core->systemreg_latency_cycles <= 0)
|
||||
{
|
||||
systemreg_write_latency_effect();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
--m_core->icount;
|
||||
};
|
||||
#endif
|
||||
--m_core->icount;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
bool adsp21062_device::memory_read(address_spacenum spacenum, offs_t offset, int size, UINT64 &value)
|
||||
|
@ -168,6 +168,8 @@ public:
|
||||
void sharc_cfunc_unimplemented_shiftimm();
|
||||
void sharc_cfunc_write_snoop();
|
||||
|
||||
void enable_recompiler();
|
||||
|
||||
enum ASTAT_FLAGS
|
||||
{
|
||||
// ASTAT flags
|
||||
@ -452,6 +454,8 @@ private:
|
||||
|
||||
UINT16 m_internal_ram[2 * 0x10000]; // 2x 128KB
|
||||
|
||||
bool m_enable_drc;
|
||||
|
||||
inline void CHANGE_PC(UINT32 newpc);
|
||||
inline void CHANGE_PC_DELAYED(UINT32 newpc);
|
||||
void sharc_iop_delayed_w(UINT32 reg, UINT32 data, int cycles);
|
||||
|
@ -803,10 +803,10 @@ hp_taco_device::tape_pos_t hp_taco_device::word_end_pos(const tape_track_t::iter
|
||||
void hp_taco_device::adjust_it(tape_track_t& track , tape_track_t::iterator& it , tape_pos_t pos)
|
||||
{
|
||||
if (it != track.begin()) {
|
||||
it--;
|
||||
if (word_end_pos(it) <= pos) {
|
||||
it++;
|
||||
}
|
||||
--it;
|
||||
if (word_end_pos(it) <= pos) {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -873,11 +873,11 @@ bool hp_taco_device::next_data(tape_track_t::iterator& it , tape_pos_t pos , boo
|
||||
} else {
|
||||
// Never more than 2 iterations
|
||||
do {
|
||||
if (it == track.begin()) {
|
||||
it = track.end();
|
||||
return false;
|
||||
}
|
||||
it--;
|
||||
if (it == track.begin()) {
|
||||
it = track.end();
|
||||
return false;
|
||||
}
|
||||
--it;
|
||||
} while (!inclusive && word_end_pos(it) > pos);
|
||||
return true;
|
||||
}
|
||||
@ -887,23 +887,23 @@ hp_taco_device::adv_res_t hp_taco_device::adv_it(tape_track_t::iterator& it)
|
||||
{
|
||||
tape_track_t& track = current_track();
|
||||
if (m_tape_fwd) {
|
||||
tape_pos_t prev_pos = word_end_pos(it);
|
||||
it++;
|
||||
tape_pos_t prev_pos = word_end_pos(it);
|
||||
++it;
|
||||
if (it == track.end()) {
|
||||
return ADV_NO_MORE_DATA;
|
||||
return ADV_NO_MORE_DATA;
|
||||
} else {
|
||||
adv_res_t res = prev_pos == it->first ? ADV_CONT_DATA : ADV_DISCONT_DATA;
|
||||
return res;
|
||||
adv_res_t res = prev_pos == it->first ? ADV_CONT_DATA : ADV_DISCONT_DATA;
|
||||
return res;
|
||||
}
|
||||
} else {
|
||||
if (it == track.begin()) {
|
||||
it = track.end();
|
||||
return ADV_NO_MORE_DATA;
|
||||
} else {
|
||||
tape_pos_t prev_pos = it->first;
|
||||
it--;
|
||||
return prev_pos == word_end_pos(it) ? ADV_CONT_DATA : ADV_DISCONT_DATA;
|
||||
}
|
||||
if (it == track.begin()) {
|
||||
it = track.end();
|
||||
return ADV_NO_MORE_DATA;
|
||||
} else {
|
||||
tape_pos_t prev_pos = it->first;
|
||||
--it;
|
||||
return prev_pos == word_end_pos(it) ? ADV_CONT_DATA : ADV_DISCONT_DATA;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1025,51 +1025,51 @@ void hp_taco_device::clear_tape(void)
|
||||
|
||||
void hp_taco_device::dump_sequence(tape_track_t::const_iterator it_start , unsigned n_words)
|
||||
{
|
||||
if (n_words) {
|
||||
UINT32 tmp32;
|
||||
UINT16 tmp16;
|
||||
if (n_words) {
|
||||
UINT32 tmp32;
|
||||
UINT16 tmp16;
|
||||
|
||||
tmp32 = n_words;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
tmp32 = it_start->first;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
tmp32 = n_words;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
tmp32 = it_start->first;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
|
||||
for (unsigned i = 0; i < n_words; i++) {
|
||||
tmp16 = it_start->second;
|
||||
fwrite(&tmp16 , sizeof(tmp16));
|
||||
it_start++;
|
||||
}
|
||||
for (unsigned i = 0; i < n_words; i++) {
|
||||
tmp16 = it_start->second;
|
||||
fwrite(&tmp16 , sizeof(tmp16));
|
||||
++it_start;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void hp_taco_device::save_tape(void)
|
||||
{
|
||||
UINT32 tmp32;
|
||||
UINT32 tmp32;
|
||||
|
||||
fseek(0, SEEK_SET);
|
||||
fseek(0, SEEK_SET);
|
||||
|
||||
tmp32 = FILE_MAGIC;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
tmp32 = FILE_MAGIC;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
|
||||
for (unsigned track_n = 0; track_n < 2; track_n++) {
|
||||
const tape_track_t& track = m_tracks[ track_n ];
|
||||
tape_pos_t next_pos = (tape_pos_t)-1;
|
||||
unsigned n_words = 0;
|
||||
tape_track_t::const_iterator it_start;
|
||||
for (tape_track_t::const_iterator it = track.cbegin(); it != track.cend(); it++) {
|
||||
if (it->first != next_pos) {
|
||||
dump_sequence(it_start , n_words);
|
||||
it_start = it;
|
||||
n_words = 0;
|
||||
}
|
||||
next_pos = it->first + word_length(it->second);
|
||||
n_words++;
|
||||
for (unsigned track_n = 0; track_n < 2; track_n++) {
|
||||
const tape_track_t& track = m_tracks[ track_n ];
|
||||
tape_pos_t next_pos = (tape_pos_t)-1;
|
||||
unsigned n_words = 0;
|
||||
tape_track_t::const_iterator it_start;
|
||||
for (tape_track_t::const_iterator it = track.cbegin(); it != track.cend(); ++it) {
|
||||
if (it->first != next_pos) {
|
||||
dump_sequence(it_start , n_words);
|
||||
it_start = it;
|
||||
n_words = 0;
|
||||
}
|
||||
dump_sequence(it_start , n_words);
|
||||
// End of track
|
||||
tmp32 = (UINT32)-1;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
next_pos = it->first + word_length(it->second);
|
||||
n_words++;
|
||||
}
|
||||
dump_sequence(it_start , n_words);
|
||||
// End of track
|
||||
tmp32 = (UINT32)-1;
|
||||
fwrite(&tmp32 , sizeof(tmp32));
|
||||
}
|
||||
}
|
||||
|
||||
bool hp_taco_device::load_track(tape_track_t& track)
|
||||
|
@ -319,7 +319,7 @@ WRITE8_MEMBER( generic_terminal_device::kbd_put )
|
||||
***************************************************************************/
|
||||
|
||||
static MACHINE_CONFIG_FRAGMENT( generic_terminal )
|
||||
MCFG_SCREEN_ADD_MONOCHROME(TERMINAL_SCREEN_TAG, RASTER, rgb_t::green)
|
||||
MCFG_SCREEN_ADD_MONOCHROME(TERMINAL_SCREEN_TAG, RASTER, rgb_t::white)
|
||||
MCFG_SCREEN_REFRESH_RATE(50)
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
|
||||
MCFG_SCREEN_SIZE(TERMINAL_WIDTH*8, TERMINAL_HEIGHT*10)
|
||||
|
@ -569,7 +569,7 @@ void s14001a_device::ClearStatistics()
|
||||
m_uNControlWords = 0;
|
||||
}
|
||||
|
||||
void s14001a_device::GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 uNControlWords)
|
||||
void s14001a_device::GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 &uNControlWords)
|
||||
{
|
||||
uNPitchPeriods = m_uNPitchPeriods;
|
||||
uNVoiced = m_uNVoiced;
|
||||
|
@ -56,7 +56,7 @@ private:
|
||||
void CalculateIncrement(bool bVoicedP2, UINT8 uPPQtrP2, bool bPPQStartP2, UINT8 uDeltaP2, UINT8 uDeltaOldP2, UINT8 &uDeltaOldP1, UINT8 &uIncrementP2, bool &bAddP2);
|
||||
UINT8 CalculateOutput(bool bVoicedP2, bool bXSilenceP2, UINT8 uPPQtrP2, bool bPPQStartP2, UINT8 uLOutputP2, UINT8 uIncrementP2, bool bAddP2);
|
||||
void ClearStatistics();
|
||||
void GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 uNControlWords);
|
||||
void GetStatistics(UINT32 &uNPitchPeriods, UINT32 &uNVoiced, UINT32 &uNControlWords);
|
||||
void SetPrintLevel(UINT32 uPrintLevel) { m_uPrintLevel = uPrintLevel; }
|
||||
|
||||
// internal state
|
||||
|
@ -69,7 +69,6 @@ protected:
|
||||
// inline helper
|
||||
|
||||
private:
|
||||
void screen_scanning( int force_clear );
|
||||
void set_video_mode(void);
|
||||
void draw_border(UINT16 line);
|
||||
|
||||
|
@ -145,7 +145,7 @@ void vector_device::clear_list(void)
|
||||
|
||||
UINT32 vector_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
||||
{
|
||||
UINT32 flags = PRIMFLAG_ANTIALIAS(machine().options().antialias() ? 1 : 0) | PRIMFLAG_BLENDMODE(BLENDMODE_ADD) | PRIMFLAG_VECTOR(1);
|
||||
UINT32 flags = PRIMFLAG_ANTIALIAS(1) | PRIMFLAG_BLENDMODE(BLENDMODE_ADD) | PRIMFLAG_VECTOR(1);
|
||||
const rectangle &visarea = screen.visible_area();
|
||||
float xscale = 1.0f / (65536 * visarea.width());
|
||||
float yscale = 1.0f / (65536 * visarea.height());
|
||||
|
@ -53,18 +53,6 @@ public:
|
||||
|
||||
void add_point(int x, int y, rgb_t color, int intensity);
|
||||
|
||||
void set_flicker(float newval);
|
||||
float get_flicker();
|
||||
|
||||
void set_beam_width_min(float newval);
|
||||
float get_beam_width_min();
|
||||
|
||||
void set_beam_width_max(float newval);
|
||||
float get_beam_width_max();
|
||||
|
||||
void set_beam_intensity_weight(float newval);
|
||||
float get_beam_intensity_weight();
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
|
@ -3333,7 +3333,7 @@ INT32 voodoo_device::lfb_w(voodoo_device* vd, offs_t offset, UINT32 data, UINT32
|
||||
/* pixel pipeline part 2 handles color blending, fog, alpha, and final output */
|
||||
PIXEL_PIPELINE_END(vd, stats, dither, dither4, dither_lookup, x, dest, depth,
|
||||
vd->reg[fbzMode].u, vd->reg[fbzColorPath].u, vd->reg[alphaMode].u, vd->reg[fogMode].u,
|
||||
iterz, iterw, iterargb);
|
||||
iterz, iterw, iterargb) { };
|
||||
nextpixel:
|
||||
/* advance our pointers */
|
||||
x++;
|
||||
|
@ -112,10 +112,11 @@ static void execute_focus(running_machine &machine, int ref, int params, const c
|
||||
static void execute_ignore(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_observe(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_next(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_comment(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_comment_add(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_comment_del(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_comment_save(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_comment_list(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_comment_commit(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_bpset(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_bpclear(running_machine &machine, int ref, int params, const char **param);
|
||||
static void execute_bpdisenable(running_machine &machine, int ref, int params, const char **param);
|
||||
@ -296,12 +297,14 @@ void debug_command_init(running_machine &machine)
|
||||
debug_console_register_command(machine, "ignore", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, execute_ignore);
|
||||
debug_console_register_command(machine, "observe", CMDFLAG_NONE, 0, 0, MAX_COMMAND_PARAMS, execute_observe);
|
||||
|
||||
debug_console_register_command(machine, "comadd", CMDFLAG_NONE, 0, 1, 2, execute_comment);
|
||||
debug_console_register_command(machine, "//", CMDFLAG_NONE, 0, 1, 2, execute_comment);
|
||||
debug_console_register_command(machine, "comadd", CMDFLAG_NONE, 0, 1, 2, execute_comment_add);
|
||||
debug_console_register_command(machine, "//", CMDFLAG_NONE, 0, 1, 2, execute_comment_add);
|
||||
debug_console_register_command(machine, "comdelete", CMDFLAG_NONE, 0, 1, 1, execute_comment_del);
|
||||
debug_console_register_command(machine, "comsave", CMDFLAG_NONE, 0, 0, 0, execute_comment_save);
|
||||
debug_console_register_command(machine, "comlist", CMDFLAG_NONE, 0, 0, 0, execute_comment_list);
|
||||
|
||||
debug_console_register_command(machine, "commit", CMDFLAG_NONE, 0, 1, 2, execute_comment_commit);
|
||||
debug_console_register_command(machine, "/*", CMDFLAG_NONE, 0, 1, 2, execute_comment_commit);
|
||||
|
||||
debug_console_register_command(machine, "bpset", CMDFLAG_NONE, 0, 1, 3, execute_bpset);
|
||||
debug_console_register_command(machine, "bp", CMDFLAG_NONE, 0, 1, 3, execute_bpset);
|
||||
debug_console_register_command(machine, "bpclear", CMDFLAG_NONE, 0, 0, 1, execute_bpclear);
|
||||
@ -1130,7 +1133,7 @@ static void execute_observe(running_machine &machine, int ref, int params, const
|
||||
execute_comment - add a comment to a line
|
||||
-------------------------------------------------*/
|
||||
|
||||
static void execute_comment(running_machine &machine, int ref, int params, const char *param[])
|
||||
static void execute_comment_add(running_machine &machine, int ref, int params, const char *param[])
|
||||
{
|
||||
device_t *cpu;
|
||||
UINT64 address;
|
||||
@ -1192,20 +1195,43 @@ static void execute_comment_list(running_machine &machine, int ref, int params,
|
||||
debug_console_printf(machine, "Error while parsing XML file\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* @fn void execute_comment_commit(running_machine &machine, int ref, int params, const char *param[])
|
||||
* @brief Add and Save current list of comments in debugger
|
||||
*
|
||||
*/
|
||||
|
||||
static void execute_comment_commit(running_machine &machine, int ref, int params, const char *param[])
|
||||
{
|
||||
execute_comment_add(machine,ref,params,param);
|
||||
execute_comment_save(machine,ref,params,param);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
execute_comment - add a comment to a line
|
||||
-------------------------------------------------*/
|
||||
|
||||
// TODO: needs an autosave option in debugger for this, or a direct comment add and save.
|
||||
static void execute_comment_save(running_machine &machine, int ref, int params, const char *param[])
|
||||
{
|
||||
if (debug_comment_save(machine))
|
||||
debug_console_printf(machine, "Comments successfully saved\n");
|
||||
debug_console_printf(machine, "Comment successfully saved\n");
|
||||
else
|
||||
debug_console_printf(machine, "Comments not saved\n");
|
||||
debug_console_printf(machine, "Comment not saved\n");
|
||||
}
|
||||
|
||||
// TODO: add color hex editing capabilities for comments, see below for more info
|
||||
/**
|
||||
* @fn void execute_comment_color(running_machine &machine, int ref, int params, const char *param[])
|
||||
* @brief Modifies comment given at address $xx with given color
|
||||
* Useful for marking comment with a different color scheme (for example by marking start and end of a given function visually).
|
||||
* @param[in] "address,color" First is the comment address in the current context, color can be hexadecimal or shorthanded to common 1bpp RGB names.
|
||||
*
|
||||
* @todo check if the comment exists in the first place, bail out with error if not.
|
||||
* @todo add shorthand for color modify and save
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
execute_bpset - execute the breakpoint set
|
||||
|
@ -227,6 +227,7 @@ static const help_item static_help_list[] =
|
||||
" comdelete <address> -- removes a comment from the given address\n"
|
||||
" comsave -- save the current comments to a file\n"
|
||||
" comlist -- print currently avaliable comments from file\n"
|
||||
" commit[/*] <address>,<comment> -- gives a bulk comadd then comsave command\n"
|
||||
"\n"
|
||||
},
|
||||
{
|
||||
@ -1252,6 +1253,23 @@ static const help_item static_help_list[] =
|
||||
" Adds the comment 'undocumented opcode!' to the code at address 0x10\n"
|
||||
"\n"
|
||||
},
|
||||
{
|
||||
"commit",
|
||||
"\n"
|
||||
" commit[/*] <address>,<comment>\n"
|
||||
"\n"
|
||||
"Adds a string <comment> to the disassembled code at <address> then saves to file. Basically same as comadd + comsave via a single line.\n"
|
||||
"The shortcut for this command is simply '/*'\n"
|
||||
"\n"
|
||||
"Examples:\n"
|
||||
"\n"
|
||||
"commit 0, hello world.\n"
|
||||
" Adds the comment 'hello world.' to the code at address 0x0\n"
|
||||
"\n"
|
||||
"/* 10, undocumented opcode!\n"
|
||||
" Adds the comment 'undocumented opcode!' to the code at address 0x10\n"
|
||||
"\n"
|
||||
},
|
||||
{
|
||||
"comsave",
|
||||
"\n"
|
||||
|
@ -120,7 +120,6 @@ const options_entry emu_options::s_option_entries[] =
|
||||
|
||||
// vector options
|
||||
{ nullptr, nullptr, OPTION_HEADER, "CORE VECTOR OPTIONS" },
|
||||
{ OPTION_ANTIALIAS ";aa", "1", OPTION_BOOLEAN, "use antialiasing when drawing vectors" },
|
||||
{ OPTION_BEAM_WIDTH_MIN, "1.0", OPTION_FLOAT, "set vector beam width minimum" },
|
||||
{ OPTION_BEAM_WIDTH_MAX, "1.0", OPTION_FLOAT, "set vector beam width maximum" },
|
||||
{ OPTION_BEAM_INTENSITY_WEIGHT, "0", OPTION_FLOAT, "set vector beam intensity weight " },
|
||||
|
@ -108,7 +108,6 @@
|
||||
#define OPTION_EFFECT "effect"
|
||||
|
||||
// core vector options
|
||||
#define OPTION_ANTIALIAS "antialias"
|
||||
#define OPTION_BEAM_WIDTH_MIN "beam_width_min"
|
||||
#define OPTION_BEAM_WIDTH_MAX "beam_width_max"
|
||||
#define OPTION_BEAM_INTENSITY_WEIGHT "beam_intensity_weight"
|
||||
@ -295,7 +294,6 @@ public:
|
||||
const char *effect() const { return value(OPTION_EFFECT); }
|
||||
|
||||
// core vector options
|
||||
bool antialias() const { return bool_value(OPTION_ANTIALIAS); }
|
||||
float beam_width_min() const { return float_value(OPTION_BEAM_WIDTH_MIN); }
|
||||
float beam_width_max() const { return float_value(OPTION_BEAM_WIDTH_MAX); }
|
||||
float beam_intensity_weight() const { return float_value(OPTION_BEAM_INTENSITY_WEIGHT); }
|
||||
|
@ -9,6 +9,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "coreutil.h"
|
||||
#include "modules/output/output_module.h"
|
||||
|
||||
//**************************************************************************
|
||||
// OUTPUT MANAGER
|
||||
@ -210,10 +211,10 @@ void output_manager::set_notifier(const char *outname, output_notifier_func call
|
||||
notifier for all outputs
|
||||
-------------------------------------------------*/
|
||||
|
||||
void output_manager::notify_all(output_notifier_func callback, void *param)
|
||||
void output_manager::notify_all(output_module *module)
|
||||
{
|
||||
for (auto &item : m_itemtable)
|
||||
(*callback)(item.second.name.c_str(), item.second.value, param);
|
||||
module->notify(item.second.name.c_str(), item.second.value);
|
||||
}
|
||||
|
||||
|
||||
|
@ -21,6 +21,7 @@
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
class output_module;
|
||||
typedef void (*output_notifier_func)(const char *outname, INT32 value, void *param);
|
||||
|
||||
// ======================> output_manager
|
||||
@ -72,7 +73,7 @@ public:
|
||||
void set_notifier(const char *outname, output_notifier_func callback, void *param);
|
||||
|
||||
// set a notifier on a particular output, or globally if nullptr
|
||||
void notify_all(output_notifier_func callback, void *param);
|
||||
void notify_all(output_module *module);
|
||||
|
||||
// map a name to a unique ID
|
||||
UINT32 name_to_id(const char *outname);
|
||||
|
@ -535,7 +535,7 @@ void render_line_to_quad(const render_bounds *bounds, float width, float length_
|
||||
bounds1->x0 = modbounds.x1 - unity;
|
||||
bounds1->y0 = modbounds.y1 + unitx;
|
||||
|
||||
/* rotate the unit vector by -09 degrees and add to point 1 */
|
||||
/* rotate the unit vector by -90 degrees and add to point 1 */
|
||||
bounds1->x1 = modbounds.x1 + unity;
|
||||
bounds1->y1 = modbounds.y1 - unitx;
|
||||
}
|
||||
|
@ -518,7 +518,7 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount)
|
||||
}
|
||||
else
|
||||
{
|
||||
name = s_list;
|
||||
name = s_list.substr(curpoint);
|
||||
curpoint = ends;
|
||||
}
|
||||
|
||||
|
@ -27,19 +27,19 @@ menu_sliders::~menu_sliders()
|
||||
{
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
menu_sliders - handle the sliders menu
|
||||
-------------------------------------------------*/
|
||||
//-------------------------------------------------
|
||||
// menu_sliders - handle the sliders menu
|
||||
//-------------------------------------------------
|
||||
|
||||
void menu_sliders::handle()
|
||||
{
|
||||
const event *menu_event;
|
||||
|
||||
/* process the menu */
|
||||
// process the menu
|
||||
menu_event = process(PROCESS_LR_REPEAT | (m_hidden ? PROCESS_CUSTOM_ONLY : 0));
|
||||
if (menu_event != nullptr)
|
||||
{
|
||||
/* handle keys if there is a valid item selected */
|
||||
// handle keys if there is a valid item selected
|
||||
if (menu_event->itemref != nullptr && menu_event->type == menu_item_type::SLIDER)
|
||||
{
|
||||
const slider_state *slider = (const slider_state *)menu_event->itemref;
|
||||
@ -51,7 +51,7 @@ void menu_sliders::handle()
|
||||
|
||||
switch (menu_event->iptkey)
|
||||
{
|
||||
/* toggle visibility */
|
||||
// toggle visibility
|
||||
case IPT_UI_ON_SCREEN_DISPLAY:
|
||||
if (m_menuless_mode)
|
||||
menu::stack_pop(machine());
|
||||
@ -59,7 +59,7 @@ void menu_sliders::handle()
|
||||
m_hidden = !m_hidden;
|
||||
break;
|
||||
|
||||
/* decrease value */
|
||||
// decrease value
|
||||
case IPT_UI_LEFT:
|
||||
if (alt_pressed && shift_pressed)
|
||||
increment = -1;
|
||||
@ -73,7 +73,7 @@ void menu_sliders::handle()
|
||||
increment = -slider->incval;
|
||||
break;
|
||||
|
||||
/* increase value */
|
||||
// increase value
|
||||
case IPT_UI_RIGHT:
|
||||
if (alt_pressed && shift_pressed)
|
||||
increment = 1;
|
||||
@ -87,40 +87,40 @@ void menu_sliders::handle()
|
||||
increment = slider->incval;
|
||||
break;
|
||||
|
||||
/* restore default */
|
||||
// restore default
|
||||
case IPT_UI_SELECT:
|
||||
increment = slider->defval - curvalue;
|
||||
break;
|
||||
}
|
||||
|
||||
/* handle any changes */
|
||||
// handle any changes
|
||||
if (increment != 0)
|
||||
{
|
||||
INT32 newvalue = curvalue + increment;
|
||||
|
||||
/* clamp within bounds */
|
||||
// clamp within bounds
|
||||
if (newvalue < slider->minval)
|
||||
newvalue = slider->minval;
|
||||
if (newvalue > slider->maxval)
|
||||
newvalue = slider->maxval;
|
||||
|
||||
/* update the slider and recompute the menu */
|
||||
// update the slider and recompute the menu
|
||||
slider->update(machine(), slider->arg, slider->id, nullptr, newvalue);
|
||||
reset(reset_options::REMEMBER_REF);
|
||||
}
|
||||
}
|
||||
|
||||
/* if we are selecting an invalid item and we are hidden, skip to the next one */
|
||||
// if we are selecting an invalid item and we are hidden, skip to the next one
|
||||
else if (m_hidden)
|
||||
{
|
||||
/* if we got here via up or page up, select the previous item */
|
||||
// if we got here via up or page up, select the previous item
|
||||
if (menu_event->iptkey == IPT_UI_UP || menu_event->iptkey == IPT_UI_PAGE_UP)
|
||||
{
|
||||
selected = (selected + item.size() - 1) % item.size();
|
||||
validate_selection(-1);
|
||||
}
|
||||
|
||||
/* otherwise select the next item */
|
||||
// otherwise select the next item
|
||||
else if (menu_event->iptkey == IPT_UI_DOWN || menu_event->iptkey == IPT_UI_PAGE_DOWN)
|
||||
{
|
||||
selected = (selected + 1) % item.size();
|
||||
@ -131,16 +131,16 @@ void menu_sliders::handle()
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
menu_sliders_populate - populate the sliders
|
||||
menu
|
||||
-------------------------------------------------*/
|
||||
//-------------------------------------------------
|
||||
// menu_sliders_populate - populate the sliders
|
||||
// menu
|
||||
//-------------------------------------------------
|
||||
|
||||
void menu_sliders::populate()
|
||||
{
|
||||
std::string tempstring;
|
||||
|
||||
/* add UI sliders */
|
||||
// add UI sliders
|
||||
std::vector<menu_item> ui_sliders = ui().get_slider_list();
|
||||
for (menu_item item : ui_sliders)
|
||||
{
|
||||
@ -163,7 +163,7 @@ void menu_sliders::populate()
|
||||
|
||||
item_append(menu_item_type::SEPARATOR);
|
||||
|
||||
/* add OSD options */
|
||||
// add OSD options
|
||||
std::vector<menu_item> osd_sliders = machine().osd().get_slider_list();
|
||||
for (menu_item item : osd_sliders)
|
||||
{
|
||||
@ -187,10 +187,10 @@ void menu_sliders::populate()
|
||||
custombottom = 2.0f * ui().get_line_height() + 2.0f * UI_BOX_TB_BORDER;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
menu_sliders_custom_render - perform our special
|
||||
rendering
|
||||
-------------------------------------------------*/
|
||||
//-------------------------------------------------
|
||||
// menu_sliders_custom_render - perform our special
|
||||
// rendering
|
||||
//-------------------------------------------------
|
||||
|
||||
void menu_sliders::custom_render(void *selectedref, float top, float bottom, float x1, float y1, float x2, float y2)
|
||||
{
|
||||
@ -204,78 +204,78 @@ void menu_sliders::custom_render(void *selectedref, float top, float bottom, flo
|
||||
float text_height;
|
||||
INT32 curval;
|
||||
|
||||
/* determine the current value and text */
|
||||
// determine the current value and text
|
||||
curval = curslider->update(machine(), curslider->arg, curslider->id, &tempstring, SLIDER_NOCHANGE);
|
||||
|
||||
/* compute the current and default percentages */
|
||||
// compute the current and default percentages
|
||||
percentage = (float)(curval - curslider->minval) / (float)(curslider->maxval - curslider->minval);
|
||||
default_percentage = (float)(curslider->defval - curslider->minval) / (float)(curslider->maxval - curslider->minval);
|
||||
|
||||
/* assemble the text */
|
||||
// assemble the text
|
||||
tempstring.insert(0, " ").insert(0, curslider->description);
|
||||
|
||||
/* move us to the bottom of the screen, and expand to full width */
|
||||
// move us to the bottom of the screen, and expand to full width
|
||||
y2 = 1.0f - UI_BOX_TB_BORDER;
|
||||
y1 = y2 - bottom;
|
||||
x1 = UI_BOX_LR_BORDER;
|
||||
x2 = 1.0f - UI_BOX_LR_BORDER;
|
||||
|
||||
/* draw extra menu area */
|
||||
// draw extra menu area
|
||||
ui().draw_outlined_box(container, x1, y1, x2, y2, UI_BACKGROUND_COLOR);
|
||||
y1 += UI_BOX_TB_BORDER;
|
||||
|
||||
/* determine the text height */
|
||||
// determine the text height
|
||||
ui().draw_text_full(container, tempstring.c_str(), 0, 0, x2 - x1 - 2.0f * UI_BOX_LR_BORDER,
|
||||
JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, nullptr, &text_height);
|
||||
|
||||
/* draw the thermometer */
|
||||
// draw the thermometer
|
||||
bar_left = x1 + UI_BOX_LR_BORDER;
|
||||
bar_area_top = y1;
|
||||
bar_width = x2 - x1 - 2.0f * UI_BOX_LR_BORDER;
|
||||
bar_area_height = line_height;
|
||||
|
||||
/* compute positions */
|
||||
// compute positions
|
||||
bar_top = bar_area_top + 0.125f * bar_area_height;
|
||||
bar_bottom = bar_area_top + 0.875f * bar_area_height;
|
||||
default_x = bar_left + bar_width * default_percentage;
|
||||
current_x = bar_left + bar_width * percentage;
|
||||
|
||||
/* fill in the percentage */
|
||||
// fill in the percentage
|
||||
container->add_rect(bar_left, bar_top, current_x, bar_bottom, UI_SLIDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||
|
||||
/* draw the top and bottom lines */
|
||||
// draw the top and bottom lines
|
||||
container->add_line(bar_left, bar_top, bar_left + bar_width, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||
container->add_line(bar_left, bar_bottom, bar_left + bar_width, bar_bottom, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||
|
||||
/* draw default marker */
|
||||
// draw default marker
|
||||
container->add_line(default_x, bar_area_top, default_x, bar_top, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||
container->add_line(default_x, bar_bottom, default_x, bar_area_top + bar_area_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
|
||||
|
||||
/* draw the actual text */
|
||||
// draw the actual text
|
||||
ui().draw_text_full(container, tempstring.c_str(), x1 + UI_BOX_LR_BORDER, y1 + line_height, x2 - x1 - 2.0f * UI_BOX_LR_BORDER,
|
||||
JUSTIFY_CENTER, WRAP_WORD, DRAW_NORMAL, UI_TEXT_COLOR, UI_TEXT_BG_COLOR, nullptr, &text_height);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------
|
||||
slider_ui_handler - pushes the slider
|
||||
menu on the stack and hands off to the
|
||||
standard menu handler
|
||||
-------------------------------------------------*/
|
||||
//-------------------------------------------------
|
||||
// slider_ui_handler - pushes the slider
|
||||
// menu on the stack and hands off to the
|
||||
// standard menu handler
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui, bool state)
|
||||
UINT32 menu_sliders::ui_handler(render_container *container, mame_ui_manager &mui)
|
||||
{
|
||||
UINT32 result;
|
||||
|
||||
/* if this is the first call, push the sliders menu */
|
||||
if (state)
|
||||
// if this is the first call, push the sliders menu
|
||||
if (topmost_menu<menu_sliders>() == nullptr)
|
||||
menu::stack_push<menu_sliders>(mui, container, true);
|
||||
|
||||
/* handle standard menus */
|
||||
// handle standard menus
|
||||
result = menu::ui_handler(container, mui);
|
||||
|
||||
/* if we are cancelled, pop the sliders menu */
|
||||
// if we are cancelled, pop the sliders menu
|
||||
if (result == UI_HANDLER_CANCEL)
|
||||
menu::stack_pop(mui.machine());
|
||||
|
||||
|
@ -27,7 +27,7 @@ public:
|
||||
|
||||
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
|
||||
|
||||
static UINT32 ui_handler(render_container *container, mame_ui_manager &mui, bool state);
|
||||
static UINT32 ui_handler(render_container *container, mame_ui_manager &mui);
|
||||
|
||||
private:
|
||||
enum {
|
||||
|
@ -1572,7 +1572,7 @@ UINT32 mame_ui_manager::handler_ingame(render_container *container)
|
||||
// if the on-screen display isn't up and the user has toggled it, turn it on
|
||||
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) == 0 && machine().ui_input().pressed(IPT_UI_ON_SCREEN_DISPLAY))
|
||||
{
|
||||
set_handler<mame_ui_manager&, bool>(UI_CALLBACK_TYPE_GENERAL, ui::menu_sliders::ui_handler, *this, true);
|
||||
set_handler<mame_ui_manager&>(UI_CALLBACK_TYPE_MENU, ui::menu_sliders::ui_handler, *this);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -2015,8 +2015,8 @@ std::vector<ui::menu_item> mame_ui_manager::slider_init(running_machine &machine
|
||||
{
|
||||
// add vector control
|
||||
sliders.push_back(slider_alloc(machine, SLIDER_ID_FLICKER + slider_index, _("Vector Flicker"), 0, 0, 1000, 10, nullptr));
|
||||
sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MIN + slider_index, _("Beam Width Minimum"), 1, 100, 1000, 1, nullptr));
|
||||
sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MAX + slider_index, _("Beam Width Maximum"), 1, 100, 1000, 1, nullptr));
|
||||
sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MIN + slider_index, _("Beam Width Minimum"), 100, 100, 1000, 1, nullptr));
|
||||
sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_WIDTH_MAX + slider_index, _("Beam Width Maximum"), 100, 100, 1000, 1, nullptr));
|
||||
sliders.push_back(slider_alloc(machine, SLIDER_ID_BEAM_INTENSITY + slider_index, _("Beam Intensity Weight"), -1000, 0, 1000, 10, nullptr));
|
||||
slider_index++;
|
||||
break;
|
||||
|
60
src/lib/formats/afs_dsk.cpp
Normal file
60
src/lib/formats/afs_dsk.cpp
Normal file
@ -0,0 +1,60 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Acorn FileStore
|
||||
|
||||
Disk image formats
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "afs_dsk.h"
|
||||
|
||||
|
||||
afs_format::afs_format() : wd177x_format(formats)
|
||||
{
|
||||
}
|
||||
|
||||
const char *afs_format::name() const
|
||||
{
|
||||
return "afs";
|
||||
}
|
||||
|
||||
const char *afs_format::description() const
|
||||
{
|
||||
return "Acorn FileStore disk image";
|
||||
}
|
||||
|
||||
const char *afs_format::extensions() const
|
||||
{
|
||||
return "adl,img";
|
||||
}
|
||||
|
||||
int afs_format::identify(io_generic *io, UINT32 form_factor)
|
||||
{
|
||||
int type = find_size(io, form_factor);
|
||||
|
||||
if (type != -1)
|
||||
return 50;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int afs_format::get_image_offset(const format &f, int head, int track)
|
||||
{
|
||||
if (f.sector_base_id == -1)
|
||||
return (track * f.head_count + head) * compute_track_size(f);
|
||||
else
|
||||
return (f.track_count * head + track) * compute_track_size(f);
|
||||
}
|
||||
|
||||
const afs_format::format afs_format::formats[] =
|
||||
{
|
||||
{ // 640K 3 1/2 inch 80 track double sided double density (interleaved) - gaps unverified
|
||||
floppy_image::FF_35, floppy_image::DSQD, floppy_image::MFM,
|
||||
2000, 16, 80, 2, 256, {}, -1, { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 }, 60, 22, 43
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
const floppy_format_type FLOPPY_AFS_FORMAT = &floppy_image_format_creator<afs_format>;
|
37
src/lib/formats/afs_dsk.h
Normal file
37
src/lib/formats/afs_dsk.h
Normal file
@ -0,0 +1,37 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Nigel Barnes
|
||||
/***************************************************************************
|
||||
|
||||
Acorn FileStore
|
||||
|
||||
Disk image formats
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __AFS_DSK_H__
|
||||
#define __AFS_DSK_H__
|
||||
|
||||
#include "wd177x_dsk.h"
|
||||
|
||||
|
||||
class afs_format : public wd177x_format
|
||||
{
|
||||
public:
|
||||
afs_format();
|
||||
|
||||
virtual int identify(io_generic *io, UINT32 form_factor) override;
|
||||
virtual int get_image_offset(const format &f, int head, int track) override;
|
||||
virtual const char *name() const override;
|
||||
virtual const char *description() const override;
|
||||
virtual const char *extensions() const override;
|
||||
|
||||
private:
|
||||
static const format formats[];
|
||||
};
|
||||
|
||||
|
||||
extern const floppy_format_type FLOPPY_AFS_FORMAT;
|
||||
|
||||
#endif // __AFS_DSK_H__
|
@ -92,6 +92,7 @@ int fsd_format::identify(io_generic *io, UINT32 form_factor)
|
||||
if (memcmp(h, "FSD", 3) == 0) {
|
||||
return 100;
|
||||
}
|
||||
LOG_FORMATS("fsd: no match\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -112,18 +113,18 @@ bool fsd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
|
||||
|
||||
//popmessage("Loading image of '%s'\n", title);
|
||||
|
||||
desc_pc_sector sects[10];
|
||||
desc_pc_sector sects[256];
|
||||
UINT8 total_tracks = img[pos++];
|
||||
UINT8 tnum, hnum, snum, ssize, error;
|
||||
|
||||
hnum = 0;
|
||||
//osd_printf_verbose("%d Tracks\n", total_tracks+1);
|
||||
//osd_printf_verbose("Tr.# No.S Sec.# Tr.ID Head# SecID IDsiz REsiz Error\n");
|
||||
LOG_FORMATS("%02d Tracks\n", total_tracks+1);
|
||||
LOG_FORMATS("Tr.# No.S Sec.# Tr.ID Head# SecID IDsiz REsiz Error\n");
|
||||
for(int curr_track=0; curr_track <= total_tracks; curr_track++)
|
||||
{
|
||||
UINT8 track = img[pos++];
|
||||
UINT8 spt = img[pos++];
|
||||
//osd_printf_verbose("%x %x\n", track, spt);
|
||||
LOG_FORMATS("%02X %02X\n", track, spt);
|
||||
if (spt > 0) // formatted
|
||||
{
|
||||
UINT8 readable = img[pos++];
|
||||
@ -145,22 +146,16 @@ bool fsd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
|
||||
sects[i].bad_crc = (error & 0x0e) == 0x0e;
|
||||
sects[i].data = &img[pos];
|
||||
pos += sects[i].actual_size;
|
||||
//osd_printf_verbose("Read %x %x %x %x %x %x %x\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, error);
|
||||
LOG_FORMATS("Read %02X %02X %02X %02X %02X %02X %02X\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, error);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw emu_fatalerror("fsd_format: Unsupported unreadable sector on track %d sector %d head %d", track, i, hnum);
|
||||
|
||||
// Unreadable sectors not supported!!
|
||||
//sects[i].track = track;
|
||||
//sects[i].head = 0;
|
||||
//sects[i].sector = i;
|
||||
//sects[i].size = 0;
|
||||
//sects[i].actual_size = 0;
|
||||
//sects[i].deleted = false;
|
||||
//sects[i].bad_crc = false;
|
||||
//sects[i].data = nullptr;
|
||||
//osd_printf_verbose("Unread %x %x %x %x %x %x %x\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, 0);
|
||||
LOG_FORMATS("Unreadable sector on track %02d sector %02X head %02d", track, i, hnum);
|
||||
sects[i].actual_size = 0;
|
||||
sects[i].deleted = false;
|
||||
sects[i].bad_crc = false;
|
||||
sects[i].data = nullptr;
|
||||
LOG_FORMATS("Unread %02X %02X %02X %02X %02X %02X %02X\n", i, sects[i].track, sects[i].head, sects[i].sector, sects[i].size, sects[i].actual_size, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -170,7 +165,7 @@ bool fsd_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
|
||||
sects[0].head = hnum;
|
||||
sects[0].sector = 0;
|
||||
sects[0].size = 0;
|
||||
//osd_printf_verbose("Unform %x %x %x %x %x %x %x\n", 0, sects[0].track, sects[0].head, sects[0].sector, sects[0].size, sects[0].actual_size, 0);
|
||||
LOG_FORMATS("Unform %02X %02X %02X %02X %02X %02X %02X\n", 0, sects[0].track, sects[0].head, sects[0].sector, sects[0].size, sects[0].actual_size, 0);
|
||||
}
|
||||
build_wd_track_fm(curr_track, hnum, image, 50000, spt, sects, 10, 40, 10);
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ header and leader bytes.
|
||||
#define WAVEENTRY_LOW -32768
|
||||
#define WAVEENTRY_HIGH 32767
|
||||
|
||||
#define SORCERER_WAV_FREQUENCY 4800
|
||||
#define SORCERER_WAV_FREQUENCY 4788
|
||||
|
||||
// image size
|
||||
static int sorcerer_image_size;
|
||||
|
@ -24,17 +24,17 @@
|
||||
#define ACTIVELOW_PORT_BIT(P,A,D) ((P & (~(1 << A))) | ((D ^ 1) << A))
|
||||
#define ACTIVEHIGH_PORT_BIT(P,A,D) ((P & (~(1 << A))) | (D << A))
|
||||
|
||||
#define I8035_T_R(M,N) ((soundlatch2_byte_r(M,0) >> (N)) & 1)
|
||||
#define I8035_T_W_AH(M,N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); soundlatch2_byte_w(M, 0, m_portT); } while (0)
|
||||
#define I8035_T_R(M,N) ((m_soundlatch2->read(M,0) >> (N)) & 1)
|
||||
#define I8035_T_W_AH(M,N,D) do { m_portT = ACTIVEHIGH_PORT_BIT(m_portT,N,D); m_soundlatch2->write(M, 0, m_portT); } while (0)
|
||||
|
||||
#define I8035_P1_R(M) (soundlatch3_byte_r(M,0))
|
||||
#define I8035_P2_R(M) (soundlatch4_byte_r(M,0))
|
||||
#define I8035_P1_W(M,D) soundlatch3_byte_w(M,0,D)
|
||||
#define I8035_P1_R(M) (m_soundlatch3->read(M,0))
|
||||
#define I8035_P2_R(M) (m_soundlatch4->read(M,0))
|
||||
#define I8035_P1_W(M,D) m_soundlatch3->write(M,0,D)
|
||||
|
||||
#if (USE_8039)
|
||||
#define I8035_P2_W(M,D) do { soundlatch4_byte_w(M,0,D); } while (0)
|
||||
#define I8035_P2_W(M,D) do { m_soundlatch4->write(M,0,D); } while (0)
|
||||
#else
|
||||
#define I8035_P2_W(M,D) do { set_ea(M, ((D) & 0x20) ? 0 : 1); soundlatch4_byte_w(M,0,D); } while (0)
|
||||
#define I8035_P2_W(M,D) do { set_ea(M, ((D) & 0x20) ? 0 : 1); m_soundlatch4->write(M,0,D); } while (0)
|
||||
#endif
|
||||
|
||||
#define I8035_P1_W_AH(M,B,D) I8035_P1_W(M,ACTIVEHIGH_PORT_BIT(I8035_P1_R(M),B,(D)))
|
||||
@ -691,12 +691,12 @@ void mario_state::sound_reset()
|
||||
#endif
|
||||
|
||||
/* FIXME: convert to latch8 */
|
||||
soundlatch_clear_byte_w(space, 0, 0);
|
||||
soundlatch2_clear_byte_w(space, 0, 0);
|
||||
soundlatch3_clear_byte_w(space, 0, 0);
|
||||
soundlatch4_clear_byte_w(space, 0, 0);
|
||||
I8035_P1_W(space, 0x00); /* Input port */
|
||||
I8035_P2_W(space, 0xff); /* Port is in high impedance state after reset */
|
||||
m_soundlatch->clear_w(space, 0, 0);
|
||||
if (m_soundlatch2) m_soundlatch2->clear_w(space, 0, 0);
|
||||
if (m_soundlatch3) m_soundlatch3->clear_w(space, 0, 0);
|
||||
if (m_soundlatch4) m_soundlatch4->clear_w(space, 0, 0);
|
||||
if (m_soundlatch3) I8035_P1_W(space, 0x00); /* Input port */
|
||||
if (m_soundlatch4) I8035_P2_W(space, 0xff); /* Port is in high impedance state after reset */
|
||||
|
||||
m_last = 0;
|
||||
}
|
||||
@ -734,7 +734,7 @@ READ8_MEMBER(mario_state::mario_sh_tune_r)
|
||||
UINT8 p2 = I8035_P2_R(space);
|
||||
|
||||
if ((p2 >> 7) & 1)
|
||||
return soundlatch_byte_r(space, offset);
|
||||
return m_soundlatch->read(space, offset);
|
||||
else
|
||||
return (SND[(0x1000 + (p2 & 0x0f) * 256 + offset) & mask]);
|
||||
}
|
||||
@ -777,7 +777,7 @@ WRITE8_MEMBER(mario_state::masao_sh_irqtrigger_w)
|
||||
|
||||
WRITE8_MEMBER(mario_state::mario_sh_tuneselect_w)
|
||||
{
|
||||
soundlatch_byte_w(space, offset, data);
|
||||
m_soundlatch->write(space, offset, data);
|
||||
}
|
||||
|
||||
/* Sound 0 and 1 are pulsed !*/
|
||||
@ -883,6 +883,11 @@ MACHINE_CONFIG_FRAGMENT( mario_audio )
|
||||
MCFG_CPU_IO_MAP(mario_sound_io_map)
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch3")
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch4")
|
||||
|
||||
#if OLD_SOUND
|
||||
MCFG_SOUND_ADD("discrete", DISCRETE, 0)
|
||||
@ -910,8 +915,10 @@ MACHINE_CONFIG_FRAGMENT( masao_audio )
|
||||
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("aysnd", AY8910, 14318000/6)
|
||||
MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
|
||||
MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -235,9 +235,16 @@ static MACHINE_CONFIG_START( aristmk6, aristmk6_state )
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
#define ROM_LOAD32_WORD_BIOS(bios,name,offset,length,hash) \
|
||||
#define ROM_LOAD32_WORD_BIOS(bios, name, offset, length, hash) \
|
||||
ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(2) | ROM_BIOS(bios+1)) /* Note '+1' */
|
||||
|
||||
#define ROM_LOAD64_WORD_BIOS(bios, name, offset, length, hash) \
|
||||
ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(6) | ROM_BIOS(bios+1)) /* Note '+1' */
|
||||
|
||||
|
||||
// to test whether the BIOS loading is fine, let's check the correct endianness of text string in CPU space
|
||||
// typically at around 0x3100-0x3200, 0x3600-0x3700 for Left/Right BIOS dumps (2 files)
|
||||
|
||||
#define ARISTMK6_BIOS \
|
||||
ROM_REGION( 0x0400000, "maincpu", ROMREGION_ERASEFF) \
|
||||
ROM_SYSTEM_BIOS( 0, "bios0", "Aristocrat MK6 Base (15011025, Malaysia)" ) \
|
||||
@ -247,77 +254,80 @@ MACHINE_CONFIG_END
|
||||
ROM_LOAD32_WORD_BIOS( 1, "11011901.u83", 0x0000000, 0x0200000, CRC(73dcb11c) SHA1(69ae4f32a0c9141b2a82ff3935b0cd20333d2964) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 1, "11011901.u70", 0x0000002, 0x0200000, CRC(d3dd2210) SHA1(3548f8cc39859d3f44a55f6bae48966a2d48e0eb) ) \
|
||||
ROM_SYSTEM_BIOS( 2, "bios2", "Aristocrat MK6 Base (19012801)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 2, "19012801 System Left", 0x0000000, 0x0200000, CRC(b03bd17c) SHA1(f281e80f6dda5b727ed71d2deebe3b0ff548773f) ) /* From Cactus Corral & Cashman Tonight & Heart of Begas & Moonlight Waltz */ \
|
||||
ROM_LOAD32_WORD_BIOS( 2, "19012801 System Left", 0x0000002, 0x0200000, CRC(b03bd17c) SHA1(f281e80f6dda5b727ed71d2deebe3b0ff548773f) ) /* From Cactus Corral & Cashman Tonight & Heart of Vegas & Moonlight Waltz */ \
|
||||
ROM_LOAD32_WORD_BIOS( 2, "19012801 System Right", 0x0000000, 0x0200000, CRC(5b20a96c) SHA1(5fd916b7cc2cdd51bf7dd212c1114f94dc9c7926) ) \
|
||||
ROM_SYSTEM_BIOS( 3, "bios3", "Aristocrat MK6 Base ('system 13')" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 3, "System 13 Eprom Set -2MB-M27V160 Left", 0x0000000, 0x0200000, CRC(38e8f659) SHA1(88c6acba99b0aca023c6f4d27c061c231490e9e0) ) /* from Grizzly */ \
|
||||
ROM_SYSTEM_BIOS( 3, "bios3", "Aristocrat MK6 Base (13012001)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 3, "System 13 Eprom Set -2MB-M27V160 Left", 0x0000002, 0x0200000, CRC(38e8f659) SHA1(88c6acba99b0aca023c6f4d27c061c231490e9e0) ) /* From Grizzly & Queen of the Nile */ \
|
||||
ROM_LOAD32_WORD_BIOS( 3, "System 13 Eprom Set -2MB-M27V160 Right", 0x0000000, 0x0200000, CRC(e627dbfa) SHA1(4fedbe0975ceb7dc0ebebf18a7708d78984db9b7) ) \
|
||||
ROM_SYSTEM_BIOS( 4, "bios4", "Aristocrat MK6 Base (07010801)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 4, "07010801_SYSTEM_EPROM_NSW_LEFT", 0x0000000, 0x0200000, CRC(8e92af68) SHA1(00d2bb655b7964a9652896741210ec534df0b0d2) ) /* From Jailbreak */ \
|
||||
ROM_LOAD32_WORD_BIOS( 4, "07010801_SYSTEM_EPROM_NSW_LEFT", 0x0000002, 0x0200000, CRC(8e92af68) SHA1(00d2bb655b7964a9652896741210ec534df0b0d2) ) /* From Jailbreak */ \
|
||||
ROM_LOAD32_WORD_BIOS( 4, "07010801_SYSTEM_EPROM_NSW_RIGHT", 0x0000000, 0x0200000, CRC(8c148c11) SHA1(5ff3be18455b4f04675fec8d5b9d881295c65e23) ) \
|
||||
ROM_SYSTEM_BIOS( 5, "bios5", "Aristocrat MK6 Base ('system 21')" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 5, "NSWsystem21_left", 0x0000000, 0x0200000, CRC(0d271470) SHA1(5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479) ) /* From Red Baron */ \
|
||||
ROM_SYSTEM_BIOS( 5, "bios5", "Aristocrat MK6 Base (21012901)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 5, "NSWsystem21_left", 0x0000002, 0x0200000, CRC(0d271470) SHA1(5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479) ) /* From Red Baron */ \
|
||||
ROM_LOAD32_WORD_BIOS( 5, "NSWsystem21_right", 0x0000000, 0x0200000, CRC(757618f2) SHA1(43f9a3e7d544979f8c6974945914d9e099b02abd) ) \
|
||||
ROM_SYSTEM_BIOS( 6, "bios6", "Aristocrat MK6 Base (24013001)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 6, "24013001 Left", 0x0000000, 0x0200000, CRC(06ae7e07) SHA1(39a45575b66906d73b519988d1001c99b05c5f34) ) /* From Wild Stalion */ \
|
||||
ROM_LOAD32_WORD_BIOS( 6, "24013001 Left", 0x0000002, 0x0200000, CRC(06ae7e07) SHA1(39a45575b66906d73b519988d1001c99b05c5f34) ) /* From Wild Stalion */ \
|
||||
ROM_LOAD32_WORD_BIOS( 6, "24013001 Right", 0x0000000, 0x0200000, CRC(e97afedf) SHA1(10ca3b015afaff5d7812f0f5207b2535602136a5) ) \
|
||||
ROM_SYSTEM_BIOS( 7, "bios7", "Aristocrat MK6 Base (system 04)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 7, "System 04 Eprom Set -1MB-M27V800 Left", 0x0000000, 0x0100000, CRC(21182775) SHA1(7c5b7f5aba3babc85f512a8f7d4ebc0d83eb842a) ) /* from Diamonds Forever */ \
|
||||
ROM_SYSTEM_BIOS( 7, "bios7", "Aristocrat MK6 Base (04010501)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 7, "System 04 Eprom Set -1MB-M27V800 Left", 0x0000002, 0x0100000, CRC(21182775) SHA1(7c5b7f5aba3babc85f512a8f7d4ebc0d83eb842a) ) /* From Diamonds Forever */ \
|
||||
ROM_LOAD32_WORD_BIOS( 7, "System 04 Eprom Set -1MB-M27V800 Right", 0x0000000, 0x0100000, CRC(3daefb7a) SHA1(411471713219f4bab5ccf5fe7a12a6c138c8c550) ) \
|
||||
ROM_SYSTEM_BIOS( 8, "bios8", "Aristocrat MK6 Base (05010601)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 8, "05010601_SYSTEM_EPROM_NSW_LEFT", 0x0000000, 0x0100000, CRC(b3e6b4a0) SHA1(3bf398c9257579f8e51ce716d6ebfa74fa510273) ) /* From Thai Princess & Venetian Nights */ \
|
||||
ROM_LOAD32_WORD_BIOS( 8, "05010601_SYSTEM_EPROM_NSW_LEFT", 0x0000002, 0x0100000, CRC(b3e6b4a0) SHA1(3bf398c9257579f8e51ce716d6ebfa74fa510273) ) /* From Thai Princess & Venetian Nights */ \
|
||||
ROM_LOAD32_WORD_BIOS( 8, "05010601_SYSTEM_EPROM_NSW_RIGHT", 0x0000000, 0x0100000, CRC(c12eac11) SHA1(683b9ddc323865ace7dca37d13b55de6e42759a5) ) \
|
||||
ROM_SYSTEM_BIOS( 9, "bios9", "Aristocrat MK6 Base (13012001)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 9, "System 13012001_left", 0x0000000, 0x0400000, CRC(d346773f) SHA1(baa9103478fd667eecd13064cfa051a06763c6ca) ) /* From Queen of the Nile */ \
|
||||
ROM_LOAD32_WORD_BIOS( 9, "System 13012001_right", 0x0000000, 0x0400000, CRC(4c8bfa18) SHA1(cac4932a5b19ed8c2798693ac387cc1a6f0201c7) ) \
|
||||
ROM_SYSTEM_BIOS( 9, "bios9", "Aristocrat MK6 Base (03010301)" ) \
|
||||
ROM_LOAD64_WORD_BIOS( 9, "03010301.u70", 0x0000006, 0x0100000, CRC(5ae69121) SHA1(36dd3f9aaf5f7d2751d1954d67f898bc3ec71f3b) ) /* From Queen of the Nile Special Edition */ \
|
||||
ROM_LOAD64_WORD_BIOS( 9, "03010301.u71", 0x0000002, 0x0100000, CRC(d793440a) SHA1(dced4c04bde13293af77a9a1f4c5c606e3758de0) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 9, "03010301.u83", 0x0000004, 0x0100000, CRC(c8580554) SHA1(58b8bfff2f8d298c4e3be2b01900800c45fa7ad7) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 9, "03010301.u84", 0x0000000, 0x0100000, CRC(a34a9f16) SHA1(b8750e6ceb1715da8e5ac2f0183254e29a042641) ) \
|
||||
ROM_SYSTEM_BIOS( 10, "bios10", "Aristocrat MK6 Base (02010201)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u70", 0x0000000, 0x0100000, CRC(9b2db442) SHA1(d512398a2d9257bd385dc50d61c63cd1a47300ba) ) /* From Money Tree & From Go For Green */ \
|
||||
ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u71", 0x0000000, 0x0100000, CRC(24d5614a) SHA1(fdcf3826dccc72b74b66379b1411cf211d5a1670) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u83", 0x0000000, 0x0100000, CRC(5f64a20c) SHA1(397404ab6d2a1aa3c1fc77bb9421fef7079b65a5) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u84", 0x0000000, 0x0100000, CRC(0920930f) SHA1(771b0f62442d1c75b1bb59ad82365b7ab8747173) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u70", 0x0000006, 0x0100000, CRC(9b2db442) SHA1(d512398a2d9257bd385dc50d61c63cd1a47300ba) ) /* From Money Tree & From Go For Green */ \
|
||||
ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u71", 0x0000002, 0x0100000, CRC(24d5614a) SHA1(fdcf3826dccc72b74b66379b1411cf211d5a1670) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u83", 0x0000004, 0x0100000, CRC(5f64a20c) SHA1(397404ab6d2a1aa3c1fc77bb9421fef7079b65a5) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 10, "System 02010201 Eprom Set -1MB-M27V800.u84", 0x0000000, 0x0100000, CRC(0920930f) SHA1(771b0f62442d1c75b1bb59ad82365b7ab8747173) ) \
|
||||
ROM_SYSTEM_BIOS( 11, "bios11", "Aristocrat MK6 Base (02010114)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u70", 0x0000000, 0x0100000, CRC(3ba4379f) SHA1(84367f12c4c9224d2ab9cae83ae8727de338408c) ) /* from 'Arabian Nights' */ \
|
||||
ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u71", 0x0000000, 0x0100000, CRC(8f83c3dd) SHA1(a5f9d80b4b515b24299d0241e1665cfd9da8bab7) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u83", 0x0000000, 0x0100000, CRC(945104d7) SHA1(e372d0cf889c72b5d001b26fe4a925a28486537f) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u84", 0x0000000, 0x0100000, CRC(183e3836) SHA1(4c802d0cd010bc007acb3a83e37aaa29b2d13d87) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u70", 0x0000006, 0x0100000, CRC(3ba4379f) SHA1(84367f12c4c9224d2ab9cae83ae8727de338408c) ) /* From Arabian Nights */ \
|
||||
ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u71", 0x0000002, 0x0100000, CRC(8f83c3dd) SHA1(a5f9d80b4b515b24299d0241e1665cfd9da8bab7) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u83", 0x0000004, 0x0100000, CRC(945104d7) SHA1(e372d0cf889c72b5d001b26fe4a925a28486537f) ) \
|
||||
ROM_LOAD64_WORD_BIOS( 11, "02010114 System Set 1MB M27V800.u84", 0x0000000, 0x0100000, CRC(183e3836) SHA1(4c802d0cd010bc007acb3a83e37aaa29b2d13d87) ) \
|
||||
ROM_SYSTEM_BIOS( 12, "bios12", "Aristocrat MK6 Base (USA)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 12, "system-base-.01.03.14.-u70-27v160", 0x0000000, 0x0200000, CRC(7138fec4) SHA1(f81331d1875ac574d3e6c98be218ff25c6c7be5a) ) /* From Dave Dragon */ \
|
||||
ROM_LOAD32_WORD_BIOS( 12, "system-base-.01.03.14.-u70-27v160", 0x0000002, 0x0200000, CRC(7138fec4) SHA1(f81331d1875ac574d3e6c98be218ff25c6c7be5a) ) /* From Dave Dragon */ \
|
||||
ROM_LOAD32_WORD_BIOS( 12, "system-base-.01.03.14.-u83-27v160", 0x0000000, 0x0200000, CRC(889ffd82) SHA1(9c98c9cdcf5f7d05095f11006418133029e9f0f8) ) \
|
||||
ROM_SYSTEM_BIOS( 13, "bios13", "Aristocrat MK6 Base (USA, set 2)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 13, "system-base-u70-01.03.06-m27v160", 0x0000000, 0x0200000, CRC(2f9d9a29) SHA1(fdebfaca9a579d7249379f19aef22fbfd66bf943) ) /* From Diamond Eyes US */ \
|
||||
ROM_LOAD32_WORD_BIOS( 13, "system-base-u70-01.03.06-m27v160", 0x0000002, 0x0200000, CRC(2f9d9a29) SHA1(fdebfaca9a579d7249379f19aef22fbfd66bf943) ) /* From Diamond Eyes US */ \
|
||||
ROM_LOAD32_WORD_BIOS( 13, "system-base-u83-01.03.06-m27v160", 0x0000000, 0x0200000, CRC(bd48ca55) SHA1(8fb1576cbeb1c64c358880714740195d2e73e03e) ) \
|
||||
ROM_SYSTEM_BIOS( 14, "bios14", "Aristocrat MK6 Base (Set Chips, 06.02.20, USA)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 14, "U70-03 Cs 0364A", 0x0000000, 0x0100000, CRC(199ed3b9) SHA1(e3ee81ffd713f09e35a10c38e4f59282e2c5cd30) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 14, "U70-03 Cs 0364A", 0x0000002, 0x0100000, CRC(199ed3b9) SHA1(e3ee81ffd713f09e35a10c38e4f59282e2c5cd30) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 14, "U83-02 Cs 08DD", 0x0000000, 0x0100000, CRC(e4001f60) SHA1(5da34efb1ac0f7c84a48e09363d20cfecda4bcf1) ) \
|
||||
ROM_SYSTEM_BIOS( 15, "bios15", "Aristocrat MK6 Base (01.04.08, USA)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 15, "base-01.04.08-u70-u20-left-cs-8509", 0x0000000, 0x0200000, CRC(0dfcad10) SHA1(53798be000304aed38909f5fd8470a68bedd8229) ) /* from bubdul */ \
|
||||
ROM_LOAD32_WORD_BIOS( 15, "base-01.04.08-u70-u20-left-cs-8509", 0x0000002, 0x0200000, CRC(0dfcad10) SHA1(53798be000304aed38909f5fd8470a68bedd8229) ) /* From Bob and Dolly */ \
|
||||
ROM_LOAD32_WORD_BIOS( 15, "base-01.04.08-u83-u10-right-cs-d74e", 0x0000000, 0x0200000, CRC(95333304) SHA1(7afe49d6c5e4d6820f349778557daa88c5366a51) )\
|
||||
ROM_SYSTEM_BIOS( 16, "bios16", "Aristocrat MK6 Base (02061013)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 16,"02061013 System 02 Left", 0x0000000, 0x0100000, CRC(e70a7007) SHA1(0935f924866162d9c0fbdbb99391cbf730a04b76) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 16,"02061013 System 02 Left", 0x0000002, 0x0100000, CRC(e70a7007) SHA1(0935f924866162d9c0fbdbb99391cbf730a04b76) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 16,"02061013 System 02 Right", 0x0000000, 0x0100000, CRC(7a8619a5) SHA1(bd03ddb68817c1660b009e102ccf69e5b603b875) ) \
|
||||
ROM_SYSTEM_BIOS( 17, "bios17", "Aristocrat MK6 Base (03030708)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 17,"03030708 System 03 SA LEFT", 0x0000000, 0x0100000, CRC(4e5ad823) SHA1(77ab1c29c6172cfdcef776222a72b2b44114d4da) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 17,"03030708 System 03 SA LEFT", 0x0000002, 0x0100000, CRC(4e5ad823) SHA1(77ab1c29c6172cfdcef776222a72b2b44114d4da) ) /* From Scatter Magic II */ \
|
||||
ROM_LOAD32_WORD_BIOS( 17,"03030708 System 03 SA RIGHT", 0x0000000, 0x0100000, CRC(b4b3c6a5) SHA1(5747f98a6eaa5c24a23d1d76a28b33a3bfbbfd1f) ) \
|
||||
ROM_SYSTEM_BIOS( 18, "bios18", "Aristocrat MK6 Base (09011001)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 18,"09011001_SYSTEM_09_EPROM_NSW_LEFT", 0x0000000, 0x0200000, CRC(229c2e63) SHA1(91fd2b1acb69efe073647e93db9f11042add2feb) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 18,"09011001_SYSTEM_09_EPROM_NSW_LEFT", 0x0000002, 0x0200000, CRC(229c2e63) SHA1(91fd2b1acb69efe073647e93db9f11042add2feb) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 18,"09011001_SYSTEM_09_EPROM_NSW_RIGHT", 0x0000000, 0x0200000, CRC(8a853f80) SHA1(9a75498f7b02c81a483b4e1c158f35f0ee4c0112) ) \
|
||||
ROM_SYSTEM_BIOS( 19, "bios19", "Aristocrat MK6 Base (11011501)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 19,"11011501_SYSTEM_11_EPROM_NSW_2MB_M27V160_LEFT", 0x0000000, 0x0200000, CRC(c5cc3461) SHA1(5b43c4cb6110a6ccf67cd0f3789253f6872b20c4) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 19,"11011501_SYSTEM_11_EPROM_NSW_2MB_M27V160_LEFT", 0x0000002, 0x0200000, CRC(c5cc3461) SHA1(5b43c4cb6110a6ccf67cd0f3789253f6872b20c4) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 19,"11011501_SYSTEM_11_EPROM_NSW_2MB_M27V160_RIGHT", 0x0000000, 0x0200000, CRC(de4c3aed) SHA1(21596a2edd20eb7de7a4ec8900a270b09c8f326f) ) \
|
||||
ROM_SYSTEM_BIOS( 20, "bios20", "Aristocrat MK6 Base (14011913)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 20,"14011913 System 14 Eprom Left", 0x0000000, 0x0200000, CRC(9a4cefdf) SHA1(6c15bc565ede8af19361d60ee1e6657a8055c92c) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 20,"14011913 System 14 Eprom Left", 0x0000002, 0x0200000, CRC(9a4cefdf) SHA1(6c15bc565ede8af19361d60ee1e6657a8055c92c) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 20,"14011913 System 14 Eprom Right", 0x0000000, 0x0200000, CRC(01d13b89) SHA1(b1013366d0803dfbec5a5f90f6a5cea862de0513) ) \
|
||||
ROM_SYSTEM_BIOS( 21, "bios21", "Aristocrat MK6 Base (01.04.11)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 21,"01.04.11 System.u70", 0x0000000, 0x0200000, CRC(787f2b07) SHA1(2548289e44f4b935346b759afb5383bdbac04c3e) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 21,"01.04.11 System.u70", 0x0000002, 0x0200000, CRC(787f2b07) SHA1(2548289e44f4b935346b759afb5383bdbac04c3e) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 21,"01.04.11 System.u83", 0x0000000, 0x0200000, CRC(2dae8ca0) SHA1(7a0fb38b4c1ac7195d15bdab6f0cfb16c78430f0) ) \
|
||||
ROM_SYSTEM_BIOS( 22, "bios22", "Aristocrat MK6 Set Chips (06.03.04)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 22,"Set 06.03.04 U2", 0x0000000, 0x0100000, CRC(6f5f5ef1) SHA1(70a43fba4de47ed8dcf38b25eafd5873f3428e72) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 22,"Set 06.03.04 U3", 0x0000000, 0x0100000, CRC(7034f26b) SHA1(7be78f23bec38d05240cdfe1186ec0c8291f5a1c) ) \
|
||||
ROM_SYSTEM_BIOS( 23, "bios23", "Aristocrat MK6 (USA, set 3)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 23,"US_system_.u70", 0x0000000, 0x0200000, CRC(0095e3f9) SHA1(d2e8786158b1ab0a614aab21cf1d14cbc04754af) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 22,"Set 06.03.04 U3", 0x0000002, 0x0100000, CRC(7034f26b) SHA1(7be78f23bec38d05240cdfe1186ec0c8291f5a1c) ) \
|
||||
ROM_SYSTEM_BIOS( 23, "bios23", "Aristocrat MK6 Base (10010110)" ) \
|
||||
ROM_LOAD32_WORD_BIOS( 23,"US_system_.u70", 0x0000002, 0x0200000, CRC(0095e3f9) SHA1(d2e8786158b1ab0a614aab21cf1d14cbc04754af) ) \
|
||||
ROM_LOAD32_WORD_BIOS( 23,"US_system_.u83", 0x0000000, 0x0200000, CRC(2c7f1ec3) SHA1(d03167f43ed6f9596080d91472695829378cef0a) )
|
||||
|
||||
|
||||
|
||||
ROM_START( aristmk6 )
|
||||
ARISTMK6_BIOS
|
||||
|
||||
@ -2060,10 +2070,6 @@ ROM_END
|
||||
ROM_START( qnilese )
|
||||
ARISTMK6_BIOS
|
||||
ROM_REGION( 0x2000000, "game_rom", ROMREGION_ERASEFF)
|
||||
ROM_LOAD32_WORD("10102811.u70", 0x1800002, 0x0100000, CRC(5ae69121) SHA1(36dd3f9aaf5f7d2751d1954d67f898bc3ec71f3b) )
|
||||
ROM_LOAD32_WORD("10102811.u71", 0x1000002, 0x0100000, CRC(d793440a) SHA1(dced4c04bde13293af77a9a1f4c5c606e3758de0) )
|
||||
ROM_LOAD32_WORD("10102811.u83", 0x1800000, 0x0100000, CRC(c8580554) SHA1(58b8bfff2f8d298c4e3be2b01900800c45fa7ad7) )
|
||||
ROM_LOAD32_WORD("10102811.u84", 0x1000000, 0x0100000, CRC(a34a9f16) SHA1(b8750e6ceb1715da8e5ac2f0183254e29a042641) )
|
||||
ROM_LOAD32_WORD("10102811.u73", 0x0000002, 0x0400000, CRC(27391233) SHA1(e1d546cc9a57db894bdfb24592048578f5828ee5) )
|
||||
ROM_LOAD32_WORD("10102811.u86", 0x0000000, 0x0400000, CRC(4c7bdba1) SHA1(796c9da25bbfe389aae5c03b42e15500c91a60d4) )
|
||||
ROM_END
|
||||
@ -2885,7 +2891,7 @@ GAME( 2001, indream, aristmk6, aristmk6, aristmk6, driver_device, 0, RO
|
||||
GAME( 2002, indremce, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Cash Express (20109411, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/10, A - 12/07/02
|
||||
GAME( 2003, indremll, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Lady Luck (20151911, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 742, C - 15/10/03
|
||||
GAME( 2003, indrem2c, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming 2nd Chance (10150611, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 753, B - 08/12/03
|
||||
GAME( 2003, indremmm, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Maximillion$ (10130711, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/12, A - 17/01/03
|
||||
GAME( 2003, indremmm, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Dreaming - Maximillions (10130711, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/12, A - 17/01/03
|
||||
GAME( 2001, indgldcm, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Gold - Mr. Cashman (10102511, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 674/1, A- 21/11/01
|
||||
GAME( 2004, indprncs, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Indian Princess (10174111, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 764, A - 07/04/04
|
||||
GAME( 2002, jailbrk, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Jailbreak (10125611, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 716, A - 14/11/02
|
||||
@ -2999,7 +3005,7 @@ GAME( 2004, wheregld, aristmk6, aristmk6, aristmk6, driver_device, 0, RO
|
||||
GAME( 2004, wheregldsp,wheregld, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Where's The Gold (10124811, NSW/ACT, Show Program)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 756, B - 26/02/04
|
||||
GAME( 2004, wheregldm,wheregld, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Where's the Gold (20177111, Malaysia)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 756, C - 17/06/04
|
||||
GAME( 2003, whtwater, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "White Water (0151075, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // US054, A - 4/11/03
|
||||
GAME( 2006, wikwin2, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wicked Winnings 2 - Power Pay (10214011, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 796, A - 28/02/06
|
||||
GAME( 2006, wikwin2, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wicked Winnings II - Power Pay (10214011, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 796, A - 28/02/06
|
||||
GAME( 2002, wldafr, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wild Africa - Millioniser (0351083, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4076, D - 5/08/02
|
||||
GAME( 2006, wldcata6, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wild Cats (10237511, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 811, B - 20/06/06
|
||||
GAME( 2003, wldgoos, aristmk6, aristmk6, aristmk6, driver_device, 0, ROT0, "Aristocrat", "Wild Goose (20131911, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 732, B - 02/06/03
|
||||
|
@ -361,12 +361,12 @@ WRITE16_MEMBER(armedf_state::bootleg_io_w)
|
||||
WRITE16_MEMBER(armedf_state::sound_command_w)
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
soundlatch_byte_w(space, 0, ((data & 0x7f) << 1) | 1);
|
||||
m_soundlatch->write(space, 0, ((data & 0x7f) << 1) | 1);
|
||||
}
|
||||
|
||||
READ8_MEMBER(armedf_state::soundlatch_clear_r)
|
||||
{
|
||||
soundlatch_clear_byte_w(space, 0, 0);
|
||||
m_soundlatch->clear_w(space, 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -750,7 +750,7 @@ static ADDRESS_MAP_START( sound_portmap, AS_IO, 8, armedf_state )
|
||||
AM_RANGE(0x2, 0x2) AM_DEVWRITE("dac1", dac_device, write_signed8)
|
||||
AM_RANGE(0x3, 0x3) AM_DEVWRITE("dac2", dac_device, write_signed8)
|
||||
AM_RANGE(0x4, 0x4) AM_READ(soundlatch_clear_r)
|
||||
AM_RANGE(0x6, 0x6) AM_READ(soundlatch_byte_r)
|
||||
AM_RANGE(0x6, 0x6) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -1205,6 +1205,8 @@ static MACHINE_CONFIG_START( terraf, armedf_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1255,6 +1257,8 @@ static MACHINE_CONFIG_START( terrafjb, armedf_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1307,6 +1311,8 @@ static MACHINE_CONFIG_START( kozure, armedf_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1353,6 +1359,8 @@ static MACHINE_CONFIG_START( armedf, armedf_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1401,6 +1409,8 @@ static MACHINE_CONFIG_START( cclimbr2, armedf_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1449,6 +1459,8 @@ static MACHINE_CONFIG_START( legion, armedf_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1496,6 +1508,8 @@ static MACHINE_CONFIG_START( legionjb, armedf_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -1553,6 +1567,8 @@ static MACHINE_CONFIG_START( bigfghtr, bigfghtr_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_8MHz/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
|
@ -465,7 +465,7 @@ WRITE8_MEMBER(astrocde_state::demndrgn_sound_w)
|
||||
|
||||
WRITE8_MEMBER(astrocde_state::tenpindx_sound_w)
|
||||
{
|
||||
soundlatch_byte_w(space, offset, data);
|
||||
m_soundlatch->write(space, offset, data);
|
||||
m_subcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
|
||||
@ -660,7 +660,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( tenpin_sub_io_map, AS_IO, 8, astrocde_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x90, 0x93) AM_DEVREADWRITE("ctc", z80ctc_device, read, write)
|
||||
AM_RANGE(0x97, 0x97) AM_READ(soundlatch_byte_r)
|
||||
AM_RANGE(0x97, 0x97) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
|
||||
AM_RANGE(0x98, 0x98) AM_DEVWRITE("aysnd", ay8910_device, address_w)
|
||||
AM_RANGE(0x98, 0x98) AM_DEVREAD("aysnd", ay8910_device, data_r)
|
||||
AM_RANGE(0x9a, 0x9a) AM_DEVWRITE("aysnd", ay8910_device, data_w)
|
||||
@ -1453,6 +1453,9 @@ static MACHINE_CONFIG_DERIVED( tenpindx, astrocade_16color_base )
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("aysnd", AY8912, ASTROCADE_CLOCK/4) /* real clock unknown */
|
||||
MCFG_AY8910_PORT_A_READ_CB(IOPORT("DIPSW"))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
|
||||
|
@ -1172,6 +1172,28 @@ ROM_START( acombat3 )
|
||||
ROM_LOAD( "8f-clr.bin", 0x0000, 0x0100, CRC(3bf3ccb0) SHA1(d61d19d38045f42a9adecf295e479fee239bed48) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( acombat4 )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "11.bin", 0xd000, 0x0400, CRC(9ba57987) SHA1(becf89b7d474f86839f13f9be5502c91491e8584) )
|
||||
ROM_LOAD( "10.bin", 0xd400, 0x0400, CRC(22493f2a) SHA1(4a2569f500c022b77d99855ca38a3591ed56e055) )
|
||||
ROM_LOAD( "9.bin", 0xd800, 0x0400, CRC(354cf432) SHA1(138956ea8064eba0dcd8b2f175d4981b689a2077) )
|
||||
ROM_LOAD( "8.bin", 0xdc00, 0x0400, CRC(4cee0c8b) SHA1(98bfdda9d2d368db16d6e9090536b09d8337c0e5) )
|
||||
ROM_LOAD( "4.bin", 0xe000, 0x0400, CRC(9cb477f3) SHA1(6866264aa8d0479cee237a00e4a919e3981144a5) )
|
||||
ROM_LOAD( "6.bin", 0xe400, 0x0400, CRC(272de8f1) SHA1(e917b3b8bb96fedacd6d5cb3d1c30977818f2e85) )
|
||||
ROM_LOAD( "5.bin", 0xe800, 0x0400, CRC(ff25acaa) SHA1(5cb360c556c9b36039ae05702e6900b82fe5676b) )
|
||||
ROM_LOAD( "3.bin", 0xec00, 0x0400, CRC(6edf202d) SHA1(a4cab2f10a99e0a4b1c571168e17cbee1d18cf06) )
|
||||
ROM_LOAD( "7.bin", 0xf000, 0x0400, CRC(47dccb04) SHA1(b6b6c6685c93ac9531efb970b2e82ad68eea87ba) )
|
||||
ROM_LOAD( "1.bin", 0xf400, 0x0400, CRC(5874584f) SHA1(8794c17ac156e7c59631d683bbf100036ab45713) )
|
||||
ROM_LOAD( "2.bin", 0xf800, 0x0400, CRC(b206deda) SHA1(9ab52920c06ed6beb38bc7f97ffd00e8ad46c17d) )
|
||||
ROM_LOAD( "0.bin", 0xfc00, 0x0400, CRC(4d52948a) SHA1(bcf9590a8049cada958531f6b7ae0d499c1096e2) )
|
||||
|
||||
ROM_REGION( 0x0100, "proms", 0 )
|
||||
ROM_LOAD( "8f-clr.bin", 0x0000, 0x0100, CRC(3bf3ccb0) SHA1(d61d19d38045f42a9adecf295e479fee239bed48) )
|
||||
|
||||
ROM_REGION( 0x0100, "user1", 0 ) /* decryption table */
|
||||
ROM_LOAD( "74471.cpu", 0x0000, 0x0100, CRC(a6bdd18c) SHA1(438bfc543730afdb531204585f17a68ddc03ded0) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( sstarbtl )
|
||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||
ROM_LOAD( "b.bin", 0xd000, 0x0400, CRC(16ad2bcc) SHA1(e7f55d17ee18afbb045cd0fd8d3ffc0c8300130a) )
|
||||
@ -1334,6 +1356,7 @@ GAME( 1979, afire, astrof, abattle, abattle, astrof_state, afire, ROT90
|
||||
GAME( 1979, acombat, astrof, abattle, abattle, astrof_state, afire, ROT90, "bootleg", "Astro Combat (newer, CB)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, acombato, astrof, abattle, abattle, astrof_state, afire, ROT90, "bootleg", "Astro Combat (older, PZ)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, acombat3, astrof, abattle, abattle, astrof_state, acombat3,ROT90, "bootleg (Proel)", "Astro Combat (unencrypted)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, acombat4, astrof, abattle, abattle, astrof_state, abattle, ROT90, "bootleg (Proel)", "Astro Combat (encrypted)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1979, sstarbtl, astrof, abattle, abattle, astrof_state, sstarbtl,ROT90, "bootleg", "Super Star Battle", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1979, spfghmk2, 0, spfghmk2, spfghmk2, driver_device,0, ROT90, "Data East", "Space Fighter Mark II (set 1)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
@ -12,7 +12,7 @@ TODO:
|
||||
-terminal pcb(s) roms aren't dumped,so no video can be shown,a cabinet snap is here ->
|
||||
http://www.system16.com/hardware.php?id=840&page=1#2743 ,every player should have his own
|
||||
screen.
|
||||
-inconsistant (likely wrong) sound banking.
|
||||
-inconsistent (likely wrong) sound banking.
|
||||
|
||||
============================================================================================
|
||||
BINGO CIRCUS (MAIN PCB)
|
||||
@ -32,6 +32,7 @@ SOUND : YM2151 uPD7759C
|
||||
#include "emu.h"
|
||||
#include "cpu/m68000/m68000.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "sound/2151intf.h"
|
||||
#include "sound/upd7759.h"
|
||||
|
||||
@ -43,7 +44,8 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_soundcpu(*this, "soundcpu"),
|
||||
m_upd7759(*this, "upd") { }
|
||||
m_upd7759(*this, "upd"),
|
||||
m_soundlatch(*this, "soundlatch") { }
|
||||
|
||||
UINT8 m_x;
|
||||
DECLARE_READ16_MEMBER(unknown_r);
|
||||
@ -54,6 +56,7 @@ public:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_soundcpu;
|
||||
required_device<upd7759_device> m_upd7759;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
};
|
||||
|
||||
|
||||
@ -97,7 +100,7 @@ READ8_MEMBER(bingoc_state::sound_test_r)
|
||||
#else
|
||||
WRITE16_MEMBER(bingoc_state::main_sound_latch_w)
|
||||
{
|
||||
soundlatch_byte_w(space,0,data&0xff);
|
||||
m_soundlatch->write(space,0,data&0xff);
|
||||
m_soundcpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
#endif
|
||||
@ -135,7 +138,7 @@ static ADDRESS_MAP_START( sound_io, AS_IO, 8, bingoc_state )
|
||||
AM_RANGE(0x40, 0x40) AM_WRITE(sound_play_w)
|
||||
AM_RANGE(0x80, 0x80) AM_DEVWRITE("upd", upd7759_device, port_w)
|
||||
#if !SOUND_TEST
|
||||
AM_RANGE(0xc0, 0xc0) AM_READ(soundlatch_byte_r) //soundlatch
|
||||
AM_RANGE(0xc0, 0xc0) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
|
||||
#else
|
||||
AM_RANGE(0xc0, 0xc0) AM_READ(sound_test_r)
|
||||
#endif
|
||||
@ -173,6 +176,8 @@ static MACHINE_CONFIG_START( bingoc, bingoc_state )
|
||||
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") //might just be mono...
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_YM2151_ADD("ymsnd", 7159160/2)
|
||||
MCFG_SOUND_ROUTE(0, "lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(1, "rspeaker", 1.0)
|
||||
|
@ -81,6 +81,7 @@ Notes:
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/segacrp2_device.h"
|
||||
#include "sound/ay8910.h"
|
||||
|
||||
@ -95,6 +96,7 @@ public:
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_decrypted_opcodes(*this, "decrypted_opcodes") { }
|
||||
|
||||
/* memory pointers */
|
||||
@ -120,6 +122,7 @@ public:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
optional_shared_ptr<UINT8> m_decrypted_opcodes;
|
||||
};
|
||||
|
||||
@ -237,8 +240,8 @@ WRITE8_MEMBER(calorie_state::calorie_flipscreen_w)
|
||||
|
||||
READ8_MEMBER(calorie_state::calorie_soundlatch_r)
|
||||
{
|
||||
UINT8 latch = soundlatch_byte_r(space, 0);
|
||||
soundlatch_clear_byte_w(space, 0, 0);
|
||||
UINT8 latch = m_soundlatch->read(space, 0);
|
||||
m_soundlatch->clear_w(space, 0, 0);
|
||||
return latch;
|
||||
}
|
||||
|
||||
@ -266,7 +269,7 @@ static ADDRESS_MAP_START( calorie_map, AS_PROGRAM, 8, calorie_state )
|
||||
AM_RANGE(0xf002, 0xf002) AM_READ_PORT("SYSTEM")
|
||||
AM_RANGE(0xf004, 0xf004) AM_READ_PORT("DSW1") AM_WRITE(calorie_flipscreen_w)
|
||||
AM_RANGE(0xf005, 0xf005) AM_READ_PORT("DSW2")
|
||||
AM_RANGE(0xf800, 0xf800) AM_WRITE(soundlatch_byte_w)
|
||||
AM_RANGE(0xf800, 0xf800) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( decrypted_opcodes_map, AS_DECRYPTED_OPCODES, 8, calorie_state )
|
||||
@ -477,6 +480,8 @@ static MACHINE_CONFIG_START( calorie, calorie_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ay1", AY8910, 1500000)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.8) /* YM2149 really */
|
||||
|
||||
|
@ -40,6 +40,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "video/resnet.h"
|
||||
#include "sound/ay8910.h"
|
||||
|
||||
@ -241,7 +242,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, carjmbre_state )
|
||||
AM_RANGE(0x9800, 0x98ff) AM_RAM AM_SHARE("spriteram") // 5101*2
|
||||
AM_RANGE(0xa000, 0xa000) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0xa800, 0xa800) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_WRITE(soundlatch_byte_w)
|
||||
AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -254,7 +255,7 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, carjmbre_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(soundlatch_byte_r)
|
||||
AM_RANGE(0x00, 0x00) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
|
||||
AM_RANGE(0x20, 0x21) AM_DEVWRITE("ay1", ay8910_device, address_data_w)
|
||||
AM_RANGE(0x22, 0x22) AM_WRITENOP // bdir/bc2/bc1 1/0/1 inactive write
|
||||
AM_RANGE(0x24, 0x24) AM_DEVREAD("ay1", ay8910_device, data_r)
|
||||
@ -368,8 +369,12 @@ static MACHINE_CONFIG_START( carjmbre, carjmbre_state )
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ay1", AY8910, XTAL_18_432MHz/6/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
MCFG_SOUND_ADD("ay2", AY8910, XTAL_18_432MHz/6/2)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -256,7 +256,7 @@ void cclimber_state::machine_start()
|
||||
|
||||
WRITE8_MEMBER(cclimber_state::swimmer_sh_soundlatch_w)
|
||||
{
|
||||
soundlatch_byte_w(space,offset,data);
|
||||
m_soundlatch->write(space,offset,data);
|
||||
m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff);
|
||||
}
|
||||
|
||||
@ -454,7 +454,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( swimmer_audio_map, AS_PROGRAM, 8, cclimber_state )
|
||||
AM_RANGE(0x0000, 0x0fff) AM_ROM
|
||||
AM_RANGE(0x2000, 0x23ff) AM_RAM
|
||||
AM_RANGE(0x3000, 0x3000) AM_READ(soundlatch_byte_r)
|
||||
AM_RANGE(0x3000, 0x3000) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
|
||||
AM_RANGE(0x4000, 0x4001) AM_RAM /* ??? */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -1172,6 +1172,9 @@ static MACHINE_CONFIG_START( swimmer, cclimber_state )
|
||||
|
||||
/* audio hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ay1", AY8910, XTAL_4MHz/2) /* verified on pcb */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
|
||||
|
@ -74,13 +74,13 @@ Mighty Guy board layout:
|
||||
|
||||
WRITE8_MEMBER(cop01_state::cop01_sound_command_w)
|
||||
{
|
||||
soundlatch_byte_w(space, offset, data);
|
||||
m_soundlatch->write(space, offset, data);
|
||||
m_audiocpu->set_input_line(0, ASSERT_LINE );
|
||||
}
|
||||
|
||||
READ8_MEMBER(cop01_state::cop01_sound_command_r)
|
||||
{
|
||||
int res = (soundlatch_byte_r(space, offset) & 0x7f) << 1;
|
||||
int res = (m_soundlatch->read(space, offset) & 0x7f) << 1;
|
||||
|
||||
/* bit 0 seems to be a timer */
|
||||
if ((m_audiocpu->total_cycles() / TIMER_RATE) & 1)
|
||||
@ -473,6 +473,8 @@ static MACHINE_CONFIG_START( cop01, cop01_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ay1", AY8910, 1250000) /* unknown clock / divider, hand-tuned to match audio reference */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
|
||||
@ -513,6 +515,8 @@ static MACHINE_CONFIG_START( mightguy, cop01_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3526, AUDIOCPU_CLOCK/2) /* unknown divider */
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "cpu/z80/tmpz84c011.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/3812intf.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "machine/nvram.h"
|
||||
#include "cpu/h8/h83002.h"
|
||||
|
||||
@ -44,6 +45,7 @@ public:
|
||||
m_v9958(*this, "v9958"),
|
||||
m_dac1(*this, "dac1"),
|
||||
m_dac2(*this, "dac2"),
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_key(*this, "KEY"),
|
||||
m_region_maincpu(*this, "maincpu"),
|
||||
m_region_audiocpu(*this, "audiocpu"),
|
||||
@ -55,6 +57,7 @@ public:
|
||||
required_device<v9958_device> m_v9958;
|
||||
required_device<dac_device> m_dac1;
|
||||
required_device<dac_device> m_dac2;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
required_ioport_array<5> m_key;
|
||||
required_memory_region m_region_maincpu;
|
||||
required_memory_region m_region_audiocpu;
|
||||
@ -123,7 +126,7 @@ WRITE16_MEMBER(csplayh5_state::csplayh5_mux_w)
|
||||
|
||||
WRITE16_MEMBER(csplayh5_state::csplayh5_sound_w)
|
||||
{
|
||||
soundlatch_byte_w(space, 0, ((data >> 8) & 0xff));
|
||||
m_soundlatch->write(space, 0, ((data >> 8) & 0xff));
|
||||
}
|
||||
|
||||
|
||||
@ -186,12 +189,12 @@ void csplayh5_state::soundbank_w(int data)
|
||||
|
||||
READ8_MEMBER(csplayh5_state::csplayh5_sound_r)
|
||||
{
|
||||
return soundlatch_byte_r(space, 0);
|
||||
return m_soundlatch->read(space, 0);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(csplayh5_state::csplayh5_soundclr_w)
|
||||
{
|
||||
soundlatch_clear_byte_w(space, 0, 0);
|
||||
m_soundlatch->clear_w(space, 0, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -486,6 +489,8 @@ static MACHINE_CONFIG_START( csplayh5, csplayh5_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, 4000000)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70)
|
||||
|
||||
|
@ -34,6 +34,7 @@
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "machine/gen_latch.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/msm5205.h"
|
||||
#include "sound/ay8910.h"
|
||||
@ -46,25 +47,27 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this,"maincpu"),
|
||||
m_audiocpu(*this,"audiocpu"),
|
||||
m_bgvideoram(*this, "bgvideoram"),
|
||||
m_fgvideoram(*this, "fgvideoram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_msm(*this, "msm"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
m_palette(*this, "palette"),
|
||||
m_soundlatch(*this, "soundlatch"),
|
||||
m_bgvideoram(*this, "bgvideoram"),
|
||||
m_fgvideoram(*this, "fgvideoram"),
|
||||
m_spriteram(*this, "spriteram") { }
|
||||
|
||||
/* devices */
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<cpu_device> m_audiocpu;
|
||||
optional_device<msm5205_device> m_msm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<generic_latch_8_device> m_soundlatch;
|
||||
|
||||
/* memory pointers */
|
||||
required_shared_ptr<UINT8> m_bgvideoram;
|
||||
required_shared_ptr<UINT8> m_fgvideoram;
|
||||
required_shared_ptr<UINT8> m_spriteram;
|
||||
|
||||
optional_device<msm5205_device> m_msm;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
|
||||
/* video-related */
|
||||
tilemap_t *m_bg_tilemap;
|
||||
tilemap_t *m_fg_tilemap;
|
||||
@ -217,7 +220,7 @@ WRITE8_MEMBER(dacholer_state::coins_w)
|
||||
|
||||
WRITE8_MEMBER(dacholer_state::snd_w)
|
||||
{
|
||||
soundlatch_byte_w(space, offset, data);
|
||||
m_soundlatch->write(space, offset, data);
|
||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
|
||||
@ -298,7 +301,7 @@ WRITE8_MEMBER(dacholer_state::music_irq_w)
|
||||
|
||||
static ADDRESS_MAP_START( snd_io_map, AS_IO, 8, dacholer_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(soundlatch_byte_r, soundlatch_clear_byte_w )
|
||||
AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, clear_w)
|
||||
AM_RANGE(0x04, 0x04) AM_WRITE(music_irq_w)
|
||||
AM_RANGE(0x08, 0x08) AM_WRITE(snd_irq_w)
|
||||
AM_RANGE(0x0c, 0x0c) AM_WRITE(snd_ack_w)
|
||||
@ -310,7 +313,7 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( itaten_snd_io_map, AS_IO, 8, dacholer_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(soundlatch_byte_r, soundlatch_clear_byte_w )
|
||||
AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("soundlatch", generic_latch_8_device, read, clear_w)
|
||||
AM_RANGE(0x86, 0x87) AM_DEVWRITE("ay1", ay8910_device, data_address_w)
|
||||
AM_RANGE(0x8a, 0x8b) AM_DEVWRITE("ay2", ay8910_device, data_address_w)
|
||||
AM_RANGE(0x8e, 0x8f) AM_DEVWRITE("ay3", ay8910_device, data_address_w)
|
||||
@ -675,6 +678,8 @@ static MACHINE_CONFIG_START( dacholer, dacholer_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ay1", AY8910, XTAL_19_968MHz/16)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
|
||||
|
||||
|
@ -55,7 +55,7 @@ WRITE16_MEMBER(deniam_state::sound_command_w)
|
||||
{
|
||||
if (ACCESSING_BITS_8_15)
|
||||
{
|
||||
soundlatch_byte_w(space,offset, (data >> 8) & 0xff);
|
||||
m_soundlatch->write(space,offset, (data >> 8) & 0xff);
|
||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
}
|
||||
@ -103,7 +103,7 @@ ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, deniam_state )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(soundlatch_byte_r)
|
||||
AM_RANGE(0x01, 0x01) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
|
||||
AM_RANGE(0x02, 0x03) AM_DEVWRITE("ymsnd", ym3812_device, write)
|
||||
AM_RANGE(0x05, 0x05) AM_DEVREADWRITE("oki", okim6295_device, read, write)
|
||||
AM_RANGE(0x07, 0x07) AM_WRITE(deniam16b_oki_rom_bank_w)
|
||||
@ -281,6 +281,8 @@ static MACHINE_CONFIG_START( deniam16b, deniam_state )
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
MCFG_SOUND_ADD("ymsnd", YM3812, XTAL_25MHz/6) /* "SM64" ym3812 clone; 4.166470 measured, = 4.166666Mhz verified */
|
||||
MCFG_YM3812_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
|
||||
|
@ -223,6 +223,9 @@ static MACHINE_CONFIG_START( electron, electron_state )
|
||||
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "electron_cart")
|
||||
MCFG_GENERIC_LOAD(electron_state, electron_cart)
|
||||
|
||||
/* expansion ports */
|
||||
MCFG_ELECTRON_EXPANSION_SLOT_ADD("exp", electron_expansion_devices, nullptr)
|
||||
|
||||
/* software lists */
|
||||
MCFG_SOFTWARE_LIST_ADD("cass_list","electron_cass")
|
||||
MCFG_SOFTWARE_LIST_ADD("cart_list","electron_cart")
|
||||
|
@ -17,7 +17,7 @@ Stephh's notes (based on the games Z80 code and some tests) :
|
||||
- The games read both players controls for player 2 when "Cabinet" is set
|
||||
to "Upright" (code at 0x0321).
|
||||
- The games read both buttons status regardless of settings. They are
|
||||
then comnbined if Dip Switch is set to "1" (code at 0x32a).
|
||||
then combined if Dip Switch is set to "1" (code at 0x32a).
|
||||
- The "CRE." displayed at the bottom right of the screen is in fact
|
||||
not really the number of credits (especially when coinage isn't 1C_1C)
|
||||
as it relies on a transformation of real number of credits (stored at
|
||||
@ -94,7 +94,7 @@ INTERRUPT_GEN_MEMBER(espial_state::espial_sound_nmi_gen)
|
||||
|
||||
WRITE8_MEMBER(espial_state::espial_master_soundlatch_w)
|
||||
{
|
||||
soundlatch_byte_w(space, offset, data);
|
||||
m_soundlatch->write(space, offset, data);
|
||||
m_audiocpu->set_input_line(0, HOLD_LINE);
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ static ADDRESS_MAP_START( espial_map, AS_PROGRAM, 8, espial_state )
|
||||
AM_RANGE(0x6082, 0x6082) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x6083, 0x6083) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0x6090, 0x6090) AM_READ(soundlatch2_byte_r) AM_WRITE(espial_master_soundlatch_w)
|
||||
AM_RANGE(0x6090, 0x6090) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(espial_master_soundlatch_w)
|
||||
AM_RANGE(0x7000, 0x7000) AM_DEVREADWRITE("watchdog", watchdog_timer_device, reset_r, reset_w)
|
||||
AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_mask_w)
|
||||
AM_RANGE(0x7200, 0x7200) AM_WRITE(espial_flipscreen_w)
|
||||
@ -131,7 +131,7 @@ static ADDRESS_MAP_START( netwars_map, AS_PROGRAM, 8, espial_state )
|
||||
AM_RANGE(0x6082, 0x6082) AM_READ_PORT("DSW1")
|
||||
AM_RANGE(0x6083, 0x6083) AM_READ_PORT("IN1")
|
||||
AM_RANGE(0x6084, 0x6084) AM_READ_PORT("IN2")
|
||||
AM_RANGE(0x6090, 0x6090) AM_READ(soundlatch2_byte_r) AM_WRITE(espial_master_soundlatch_w)
|
||||
AM_RANGE(0x6090, 0x6090) AM_DEVREAD("soundlatch2", generic_latch_8_device, read) AM_WRITE(espial_master_soundlatch_w)
|
||||
AM_RANGE(0x7000, 0x7000) AM_DEVREADWRITE("watchdog", watchdog_timer_device, reset_r, reset_w)
|
||||
AM_RANGE(0x7100, 0x7100) AM_WRITE(espial_master_interrupt_mask_w)
|
||||
AM_RANGE(0x7200, 0x7200) AM_WRITE(espial_flipscreen_w)
|
||||
@ -149,7 +149,7 @@ static ADDRESS_MAP_START( espial_sound_map, AS_PROGRAM, 8, espial_state )
|
||||
AM_RANGE(0x0000, 0x1fff) AM_ROM
|
||||
AM_RANGE(0x2000, 0x23ff) AM_RAM
|
||||
AM_RANGE(0x4000, 0x4000) AM_WRITE(espial_sound_nmi_mask_w)
|
||||
AM_RANGE(0x6000, 0x6000) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w)
|
||||
AM_RANGE(0x6000, 0x6000) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_DEVWRITE("soundlatch2", generic_latch_8_device, write)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( espial_sound_io_map, AS_IO, 8, espial_state )
|
||||
@ -342,6 +342,10 @@ static MACHINE_CONFIG_START( espial, espial_state )
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_MONO("mono")
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
|
||||
|
||||
MCFG_SOUND_ADD("aysnd", AY8910, 1500000)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -30,7 +30,7 @@
|
||||
filtered output, while a "FIRE" line triggers a fixed short duration
|
||||
pulse (controlled by another 555 timer) of modulated noise.
|
||||
|
||||
See video/galaxian.c for a description of the video section.
|
||||
See video/galaxian.cpp for a description of the video section.
|
||||
|
||||
****************************************************************************
|
||||
|
||||
@ -657,10 +657,8 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "cpu/z80/z80.h"
|
||||
#include "cpu/s2650/s2650.h"
|
||||
#include "machine/i8255.h"
|
||||
#include "machine/watchdog.h"
|
||||
#include "sound/sn76496.h"
|
||||
#include "sound/dac.h"
|
||||
#include "sound/discrete.h"
|
||||
#include "audio/cclimber.h"
|
||||
#include "audio/galaxian.h"
|
||||
@ -949,7 +947,7 @@ WRITE8_MEMBER(galaxian_state::explorer_sound_control_w)
|
||||
READ8_MEMBER(galaxian_state::explorer_sound_latch_r)
|
||||
{
|
||||
m_audiocpu->set_input_line(0, CLEAR_LINE);
|
||||
return soundlatch_byte_r(m_audiocpu->space(AS_PROGRAM), 0);
|
||||
return m_soundlatch->read(m_audiocpu->space(AS_PROGRAM), 0);
|
||||
}
|
||||
|
||||
|
||||
@ -1343,7 +1341,7 @@ WRITE8_MEMBER(galaxian_state::kingball_sound1_w)
|
||||
WRITE8_MEMBER(galaxian_state::kingball_sound2_w)
|
||||
{
|
||||
m_kingball_sound = (m_kingball_sound & ~0x02) | (data << 1);
|
||||
soundlatch_byte_w(space, 0, m_kingball_sound | 0xf0);
|
||||
m_soundlatch->write(space, 0, m_kingball_sound | 0xf0);
|
||||
}
|
||||
|
||||
|
||||
@ -1419,7 +1417,7 @@ READ8_MEMBER(galaxian_state::jumpbug_protection_r)
|
||||
|
||||
WRITE8_MEMBER(galaxian_state::checkman_sound_command_w)
|
||||
{
|
||||
soundlatch_byte_w(space, 0, data);
|
||||
m_soundlatch->write(space, 0, data);
|
||||
m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||
}
|
||||
|
||||
@ -1701,6 +1699,29 @@ static ADDRESS_MAP_START( theend_map, AS_PROGRAM, 8, galaxian_state )
|
||||
AM_RANGE(0x8000, 0xffff) AM_READWRITE(theend_ppi8255_r, theend_ppi8255_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* map not derived from schematics. Used by explorer and takeoff */
|
||||
static ADDRESS_MAP_START( explorer_map, AS_PROGRAM, 8, galaxian_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x4000, 0x47ff) AM_RAM
|
||||
AM_RANGE(0x4800, 0x4bff) AM_MIRROR(0x0400) AM_RAM_WRITE(galaxian_videoram_w) AM_SHARE("videoram")
|
||||
AM_RANGE(0x5000, 0x50ff) AM_MIRROR(0x0700) AM_RAM_WRITE(galaxian_objram_w) AM_SHARE("spriteram")
|
||||
AM_RANGE(0x6800, 0x6800) AM_WRITENOP // ????
|
||||
AM_RANGE(0x6801, 0x6801) AM_MIRROR(0x07f8) AM_WRITE(irq_enable_w)
|
||||
AM_RANGE(0x6802, 0x6802) AM_MIRROR(0x07f8) AM_WRITE(coin_count_0_w)
|
||||
AM_RANGE(0x6803, 0x6803) AM_MIRROR(0x07f8) AM_WRITE(scramble_background_enable_w)
|
||||
AM_RANGE(0x6804, 0x6804) AM_MIRROR(0x07f8) AM_WRITE(galaxian_stars_enable_w)
|
||||
AM_RANGE(0x6805, 0x6805) AM_MIRROR(0x07f8) //POUT2
|
||||
AM_RANGE(0x6806, 0x6806) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_x_w)
|
||||
AM_RANGE(0x6807, 0x6807) AM_MIRROR(0x07f8) AM_WRITE(galaxian_flip_screen_y_w)
|
||||
AM_RANGE(0x7000, 0x7000) AM_MIRROR(0x07ff) AM_DEVREADWRITE("watchdog", watchdog_timer_device, reset_r, reset_w) /* watchdog works for writes as well? (or is it just disabled?) */
|
||||
AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x0ffc) AM_READ_PORT("IN0");
|
||||
AM_RANGE(0x8000, 0x8000) AM_MIRROR(0x0fff) AM_DEVWRITE("soundlatch", generic_latch_8_device, write)
|
||||
AM_RANGE(0x8001, 0x8001) AM_MIRROR(0x0ffc) AM_READ_PORT("IN1");
|
||||
AM_RANGE(0x8002, 0x8002) AM_MIRROR(0x0ffc) AM_READ_PORT("IN2");
|
||||
AM_RANGE(0x8003, 0x8003) AM_MIRROR(0x0ffc) AM_READ_PORT("IN3");
|
||||
AM_RANGE(0x9000, 0x9000) AM_MIRROR(0x0fff) AM_WRITE(explorer_sound_control_w);
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* map derived from schematics */
|
||||
static ADDRESS_MAP_START( scobra_map, AS_PROGRAM, 8, galaxian_state )
|
||||
@ -2061,7 +2082,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( checkman_sound_portmap, AS_IO, 8, galaxian_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x03, 0x03) AM_READ(soundlatch_byte_r)
|
||||
AM_RANGE(0x03, 0x03) AM_DEVREAD("soundlatch", generic_latch_8_device, read)
|
||||
AM_RANGE(0x04, 0x05) AM_DEVWRITE("8910.0", ay8910_device, address_data_w)
|
||||
AM_RANGE(0x06, 0x06) AM_DEVREAD("8910.0", ay8910_device, data_r)
|
||||
ADDRESS_MAP_END
|
||||
@ -2077,6 +2098,21 @@ static ADDRESS_MAP_START( checkmaj_sound_map, AS_PROGRAM, 8, galaxian_state )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
/* Take Off with 1x AY-8912*/
|
||||
|
||||
static ADDRESS_MAP_START( takeoff_sound_map, AS_PROGRAM, 8, galaxian_state )
|
||||
AM_RANGE(0x0000, 0x0fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x6c00) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( takeoff_sound_portmap, AS_IO, 8, galaxian_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x20, 0x20) AM_READ(konami_sound_timer_r)
|
||||
AM_RANGE(0x40, 0x40) AM_DEVWRITE("8912", ay8912_device, address_w)
|
||||
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("8912", ay8912_device, data_r, data_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
/* King and Balloon with DAC */
|
||||
static ADDRESS_MAP_START( kingball_sound_map, AS_PROGRAM, 8, galaxian_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
@ -2088,7 +2124,7 @@ ADDRESS_MAP_END
|
||||
static ADDRESS_MAP_START( kingball_sound_portmap, AS_IO, 8, galaxian_state )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_READ(soundlatch_byte_r) AM_WRITE(kingball_dac_w)
|
||||
AM_RANGE(0x00, 0x00) AM_MIRROR(0xff) AM_DEVREAD("soundlatch", generic_latch_8_device, read) AM_WRITE(kingball_dac_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -5489,7 +5525,7 @@ static MACHINE_CONFIG_DERIVED( konami_base, galaxian_base )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
|
||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
|
||||
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w))
|
||||
MCFG_I8255_IN_PORTC_CB(IOPORT("IN3"))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w))
|
||||
@ -5503,11 +5539,13 @@ static MACHINE_CONFIG_FRAGMENT( konami_sound_1x_ay8910 )
|
||||
MCFG_CPU_PROGRAM_MAP(frogger_sound_map)
|
||||
MCFG_CPU_IO_MAP(frogger_sound_portmap)
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_ADD("8910.0", AY8910, KONAMI_SOUND_CLOCK/8)
|
||||
MCFG_AY8910_OUTPUT_TYPE(AY8910_DISCRETE_OUTPUT)
|
||||
MCFG_AY8910_RES_LOADS(RES_K(5.1), RES_K(5.1), RES_K(5.1))
|
||||
MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
|
||||
MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
|
||||
MCFG_AY8910_PORT_B_READ_CB(READ8(galaxian_state, frogger_sound_timer_r))
|
||||
MCFG_SOUND_ROUTE_EX(0, "konami", 1.0, 0)
|
||||
MCFG_SOUND_ROUTE_EX(1, "konami", 1.0, 1)
|
||||
@ -5526,11 +5564,13 @@ static MACHINE_CONFIG_FRAGMENT( konami_sound_2x_ay8910 )
|
||||
MCFG_CPU_PROGRAM_MAP(konami_sound_map)
|
||||
MCFG_CPU_IO_MAP(konami_sound_portmap)
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_ADD("8910.0", AY8910, KONAMI_SOUND_CLOCK/8)
|
||||
MCFG_AY8910_OUTPUT_TYPE(AY8910_DISCRETE_OUTPUT)
|
||||
MCFG_AY8910_RES_LOADS(RES_K(5.1), RES_K(5.1), RES_K(5.1))
|
||||
MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
|
||||
MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
|
||||
MCFG_AY8910_PORT_B_READ_CB(READ8(galaxian_state, konami_sound_timer_r))
|
||||
MCFG_SOUND_ROUTE_EX(0, "konami", 1.0, 0)
|
||||
MCFG_SOUND_ROUTE_EX(1, "konami", 1.0, 1)
|
||||
@ -5694,6 +5734,8 @@ static MACHINE_CONFIG_DERIVED( checkman, mooncrst )
|
||||
MCFG_CPU_IO_MAP(checkman_sound_portmap)
|
||||
MCFG_CPU_VBLANK_INT_DRIVER("screen", galaxian_state, irq0_line_hold) /* NMIs are triggered by the main CPU */
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_ADD("8910.0", AY8910, 1789750)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
|
||||
@ -5712,9 +5754,11 @@ static MACHINE_CONFIG_DERIVED( checkmaj, galaxian_base )
|
||||
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("irq0", galaxian_state, checkmaj_irq0_gen, "screen", 0, 8)
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_ADD("8910.0", AY8910, 1620000)
|
||||
MCFG_AY8910_PORT_A_READ_CB(READ8(driver_device, soundlatch_byte_r))
|
||||
MCFG_AY8910_PORT_A_READ_CB(DEVREAD8("soundlatch", generic_latch_8_device, read))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -5739,6 +5783,8 @@ static MACHINE_CONFIG_DERIVED( kingball, mooncrst )
|
||||
MCFG_CPU_PROGRAM_MAP(kingball_sound_map)
|
||||
MCFG_CPU_IO_MAP(kingball_sound_portmap)
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_DAC_ADD("dac")
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
@ -5807,7 +5853,7 @@ static MACHINE_CONFIG_DERIVED( theend, galaxian_base )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, theend_coin_counter_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
|
||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
|
||||
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w))
|
||||
MCFG_I8255_IN_PORTC_CB(IOPORT("IN3"))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w))
|
||||
@ -5828,7 +5874,7 @@ static MACHINE_CONFIG_DERIVED( scramble, galaxian_base )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
|
||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
|
||||
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w))
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(galaxian_state, scramble_protection_r))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, scramble_protection_w))
|
||||
@ -5839,13 +5885,15 @@ static MACHINE_CONFIG_DERIVED( explorer, galaxian_base )
|
||||
|
||||
/* alternate memory map */
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(theend_map)
|
||||
MCFG_CPU_PROGRAM_MAP(explorer_map)
|
||||
|
||||
/* 2nd CPU to drive sound */
|
||||
MCFG_CPU_ADD("audiocpu", Z80,KONAMI_SOUND_CLOCK/8)
|
||||
MCFG_CPU_PROGRAM_MAP(konami_sound_map)
|
||||
MCFG_CPU_IO_MAP(konami_sound_portmap)
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch")
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SOUND_ADD("8910.0", AY8910, KONAMI_SOUND_CLOCK/8)
|
||||
MCFG_AY8910_PORT_A_READ_CB(READ8(galaxian_state, explorer_sound_latch_r))
|
||||
@ -5856,6 +5904,21 @@ static MACHINE_CONFIG_DERIVED( explorer, galaxian_base )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( takeoff, explorer ) // takeoff shares the same main map as explorer, but uses only an AY8912 for sound.
|
||||
|
||||
/* 2nd CPU to drive sound */
|
||||
MCFG_SOUND_MODIFY("audiocpu")
|
||||
MCFG_CPU_PROGRAM_MAP(takeoff_sound_map)
|
||||
MCFG_CPU_IO_MAP(takeoff_sound_portmap)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_DEVICE_REMOVE("8910.0")
|
||||
MCFG_DEVICE_REMOVE("8910.1")
|
||||
|
||||
MCFG_SOUND_ADD("8912", AY8912, KONAMI_SOUND_CLOCK/8)
|
||||
MCFG_AY8910_PORT_A_READ_CB(READ8(galaxian_state, explorer_sound_latch_r))
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( scorpion, theend )
|
||||
|
||||
@ -5869,7 +5932,7 @@ static MACHINE_CONFIG_DERIVED( scorpion, theend )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
|
||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
|
||||
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w))
|
||||
MCFG_I8255_IN_PORTC_CB(READ8(galaxian_state, scorpion_protection_r))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, scorpion_protection_w))
|
||||
@ -5906,17 +5969,19 @@ static MACHINE_CONFIG_DERIVED( sfx, galaxian_base )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_0_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
|
||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
|
||||
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w))
|
||||
MCFG_I8255_IN_PORTC_CB(IOPORT("IN3"))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_2", I8255A, 0)
|
||||
MCFG_I8255_IN_PORTA_CB(READ8(driver_device, soundlatch2_byte_r))
|
||||
MCFG_I8255_IN_PORTA_CB(DEVREAD8("soundlatch2", generic_latch_8_device, read))
|
||||
|
||||
MCFG_GENERIC_LATCH_8_ADD("soundlatch2")
|
||||
|
||||
/* port on 2nd 8910 is used for communication */
|
||||
MCFG_SOUND_MODIFY("8910.1")
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(WRITE8(driver_device, soundlatch2_byte_w))
|
||||
MCFG_AY8910_PORT_A_WRITE_CB(DEVWRITE8("soundlatch2", generic_latch_8_device, write))
|
||||
MCFG_AY8910_PORT_B_WRITE_CB(WRITE8(galaxian_state, sfx_sample_control_w))
|
||||
|
||||
/* DAC for the sample player */
|
||||
@ -6066,7 +6131,7 @@ static MACHINE_CONFIG_DERIVED( moonwar, scobra )
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, moonwar_port_select_w))
|
||||
|
||||
MCFG_DEVICE_ADD("ppi8255_1", I8255A, 0)
|
||||
MCFG_I8255_OUT_PORTA_CB(WRITE8(driver_device, soundlatch_byte_w))
|
||||
MCFG_I8255_OUT_PORTA_CB(DEVWRITE8("soundlatch", generic_latch_8_device, write))
|
||||
MCFG_I8255_OUT_PORTB_CB(WRITE8(galaxian_state, konami_sound_control_w))
|
||||
MCFG_I8255_IN_PORTC_CB(IOPORT("IN3"))
|
||||
MCFG_I8255_OUT_PORTC_CB(WRITE8(galaxian_state, konami_portc_1_w))
|
||||
@ -6922,28 +6987,6 @@ DRIVER_INIT_MEMBER(galaxian_state,scramble)
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(galaxian_state,explorer)
|
||||
{
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* video extensions */
|
||||
common_init(&galaxian_state::scramble_draw_bullet, &galaxian_state::scramble_draw_background, nullptr, nullptr);
|
||||
|
||||
/* watchdog works for writes as well? (or is it just disabled?) */
|
||||
watchdog_timer_device *wdog = subdevice<watchdog_timer_device>("watchdog");
|
||||
space.install_write_handler(0x7000, 0x7000, 0, 0x7ff, write8_delegate(FUNC(watchdog_timer_device::reset_w), wdog));
|
||||
|
||||
/* I/O appears to be direct, not via PPIs */
|
||||
space.unmap_readwrite(0x8000, 0xffff);
|
||||
space.install_read_port(0x8000, 0x8000, 0, 0xffc, "IN0");
|
||||
space.install_read_port(0x8001, 0x8001, 0, 0xffc, "IN1");
|
||||
space.install_read_port(0x8002, 0x8002, 0, 0xffc, "IN2");
|
||||
space.install_read_port(0x8003, 0x8003, 0, 0xffc, "IN3");
|
||||
space.install_write_handler(0x8000, 0x8000, 0, 0xfff, write8_delegate(FUNC(galaxian_state::soundlatch_byte_w),this));
|
||||
space.install_write_handler(0x9000, 0x9000, 0, 0xfff, write8_delegate(FUNC(galaxian_state::explorer_sound_control_w),this));
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(galaxian_state,sfx)
|
||||
{
|
||||
/* basic configuration */
|
||||
@ -7045,7 +7088,7 @@ DRIVER_INIT_MEMBER(galaxian_state,froggermc)
|
||||
/* video extensions */
|
||||
common_init(nullptr, &galaxian_state::frogger_draw_background, &galaxian_state::frogger_extend_tile_info, &galaxian_state::frogger_extend_sprite_info);
|
||||
|
||||
space.install_write_handler(0xa800, 0xa800, 0, 0x7ff, write8_delegate(FUNC(galaxian_state::soundlatch_byte_w),this));
|
||||
space.install_write_handler(0xa800, 0xa800, 0, 0x7ff, write8_delegate(FUNC(generic_latch_8_device::write), (generic_latch_8_device*)m_soundlatch));
|
||||
space.install_write_handler(0xb001, 0xb001, 0, 0x7f8, write8_delegate(FUNC(galaxian_state::froggermc_sound_control_w),this));
|
||||
|
||||
/* actually needs 2k of RAM */
|
||||
@ -11583,13 +11626,13 @@ GAME( 1982, amidars, amidar, scramble, amidars, galaxian_state, scram
|
||||
/* The End/Scramble based hardware */
|
||||
GAME( 1980, theend, 0, theend, theend, galaxian_state, theend, ROT90, "Konami", "The End", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1980, theends, theend, theend, theend, galaxian_state, theend, ROT90, "Konami (Stern Electronics license)", "The End (Stern Electronics)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1980, takeoff, theend, explorer, explorer, galaxian_state, explorer, ROT90, "bootleg (Sidam)", "Take Off (bootleg of The End)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1980, takeoff, theend, takeoff, explorer, galaxian_state, scramble, ROT90, "bootleg (Sidam)", "Take Off (bootleg of The End)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||
|
||||
GAME( 1981, scramble, 0, scramble, scramble, galaxian_state, scramble, ROT90, "Konami", "Scramble", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, scrambles, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "Konami (Stern Electronics license)", "Scramble (Stern Electronics set 1)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, scrambles2, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "Konami (Stern Electronics license)", "Scramble (Stern Electronics set 2)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, strfbomb, scramble, scramble, strfbomb, galaxian_state, scramble, ROT90, "bootleg (Omni)", "Strafe Bomb (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, explorer, scramble, explorer, explorer, galaxian_state, explorer, ROT90, "bootleg (Sidam)", "Explorer (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, explorer, scramble, explorer, explorer, galaxian_state, scramble, ROT90, "bootleg (Sidam)", "Explorer (bootleg of Scramble)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, scramblebf, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Karateko)", "Scramble (Karateko, French bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1981, scrambp, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Billport S.A.)", "Impacto (Billport S.A., Spanish bootleg of Scramble)", MACHINE_SUPPORTS_SAVE ) // similar to the Karateko set above
|
||||
GAME( 1981, scramce, scramble, scramble, scramble, galaxian_state, scramble, ROT90, "bootleg (Centromatic S.A.)", "Scramble (Centromatic S.A., Spanish bootleg)", MACHINE_SUPPORTS_SAVE ) // similar to above
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user