Merge remote-tracking branch 'origin/master' into netlist_dev

This commit is contained in:
couriersud 2016-06-07 19:21:30 +02:00
commit 62ed8d252e
185 changed files with 25565 additions and 19747 deletions

View File

@ -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

View File

@ -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)

View File

@ -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&amp;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">

File diff suppressed because it is too large Load Diff

View File

@ -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 &amp; 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 &amp; 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">

View File

@ -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">

View File

@ -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 &amp; 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 &amp; 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
View 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>

View File

@ -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">

View File

@ -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>

File diff suppressed because it is too large Load Diff

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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 &quot;LO&quot; command, then type &quot;GO 0100&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in Monitor with &quot;LO&quot; command, then type &quot;GO 0100&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</publisher>
<info name="usage" value="Load in BASIC with &quot;CLOAD&quot; command, then type &quot;RUN&quot;" />
<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>&lt;unknown&gt;</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>

View File

@ -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;

View File

@ -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);

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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",

View File

@ -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",

View File

@ -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

View File

@ -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",
}

View File

@ -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" }

View File

@ -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))

View File

@ -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 );

View 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

View 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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;
}
}

View File

@ -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;

View File

@ -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);

View File

@ -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 );

View File

@ -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);
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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);

View File

@ -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)

View File

@ -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)

View File

@ -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);

View File

@ -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)

View File

@ -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)

View File

@ -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;

View File

@ -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

View File

@ -69,7 +69,6 @@ protected:
// inline helper
private:
void screen_scanning( int force_clear );
void set_video_mode(void);
void draw_border(UINT16 line);

View File

@ -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());

View File

@ -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;

View File

@ -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++;

View File

@ -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

View File

@ -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"

View File

@ -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 " },

View File

@ -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); }

View File

@ -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);
}

View File

@ -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);

View File

@ -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;
}

View File

@ -518,7 +518,7 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount)
}
else
{
name = s_list;
name = s_list.substr(curpoint);
curpoint = ends;
}

View File

@ -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());

View File

@ -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 {

View File

@ -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;

View 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
View 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__

View File

@ -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);
}

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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 )

View File

@ -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)

View File

@ -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 */

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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")

View File

@ -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

View File

@ -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