summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--docs/floppy.txt2
-rw-r--r--hash/adam_cass.xml764
-rw-r--r--hash/coco_flop.xml2
-rw-r--r--hash/gamate.xml455
-rw-r--r--hash/leapster.xml114
-rw-r--r--hash/mc1000_cass.xml1228
-rw-r--r--hash/neogeo.xml18
-rw-r--r--hash/nes.xml240
-rw-r--r--hash/osborne1.xml195
-rwxr-xr-x[-rw-r--r--]hash/psx.xml2212
-rw-r--r--hash/tvc_flop.xml10579
-rw-r--r--hash/vsmile_cart.xml31
-rw-r--r--src/emu/bus/isa/sc499.c21
-rw-r--r--src/emu/bus/isa/sc499.h3
-rw-r--r--src/emu/bus/psx/memcard.h2
-rw-r--r--src/emu/bus/psx/multitap.c4
-rw-r--r--src/emu/cpu/alto2/a2disp.h4
-rw-r--r--src/emu/cpu/alto2/a2ether.c2
-rw-r--r--src/emu/cpu/arc/arc.c122
-rw-r--r--src/emu/cpu/arc/arc.h73
-rw-r--r--src/emu/cpu/arc/arcdasm.c222
-rw-r--r--src/emu/cpu/arcompact/arcompact.c143
-rw-r--r--src/emu/cpu/arcompact/arcompact.h65
-rw-r--r--src/emu/cpu/arcompact/arcompactdasm.c378
-rw-r--r--src/emu/cpu/cpu.mak27
-rw-r--r--src/emu/cpu/i86/i86.c5
-rw-r--r--src/emu/cpu/pps4/pps4.c1806
-rw-r--r--src/emu/cpu/pps4/pps4.h198
-rw-r--r--src/emu/cpu/pps4/pps4dasm.c535
-rw-r--r--src/emu/cpu/tms0980/tms0980.c1773
-rw-r--r--src/emu/cpu/tms0980/tms0980.h296
-rw-r--r--src/emu/emupal.c10
-rw-r--r--src/emu/emupal.h6
-rw-r--r--src/emu/luaengine.c29
-rw-r--r--src/emu/luaengine.h3
-rw-r--r--src/emu/rendlay.c64
-rw-r--r--src/emu/rendlay.h2
-rw-r--r--src/emu/video/poly.h4
-rw-r--r--src/lib/formats/flopimg.c2
-rw-r--r--src/lib/formats/victor9k_dsk.c131
-rw-r--r--src/lib/formats/victor9k_dsk.h1
-rw-r--r--src/lib/lib.mak2
-rw-r--r--src/lib/libflac/libFLAC/include/private/all.h (renamed from src/lib/libflac/include/private/all.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/bitmath.h (renamed from src/lib/libflac/include/private/bitmath.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/bitreader.h (renamed from src/lib/libflac/include/private/bitreader.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/bitwriter.h (renamed from src/lib/libflac/include/private/bitwriter.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/cpu.h (renamed from src/lib/libflac/include/private/cpu.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/crc.h (renamed from src/lib/libflac/include/private/crc.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/fixed.h (renamed from src/lib/libflac/include/private/fixed.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/float.h (renamed from src/lib/libflac/include/private/float.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/format.h (renamed from src/lib/libflac/include/private/format.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/lpc.h (renamed from src/lib/libflac/include/private/lpc.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/md5.h (renamed from src/lib/libflac/include/private/md5.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/memory.h (renamed from src/lib/libflac/include/private/memory.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/metadata.h (renamed from src/lib/libflac/include/private/metadata.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/stream_encoder_framing.h (renamed from src/lib/libflac/include/private/stream_encoder_framing.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/private/window.h (renamed from src/lib/libflac/include/private/window.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/protected/all.h (renamed from src/lib/libflac/include/protected/all.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/protected/stream_decoder.h (renamed from src/lib/libflac/include/protected/stream_decoder.h)0
-rw-r--r--src/lib/libflac/libFLAC/include/protected/stream_encoder.h (renamed from src/lib/libflac/include/protected/stream_encoder.h)0
-rw-r--r--src/mame/audio/dcs.c2
-rw-r--r--src/mame/audio/gottlieb.c2
-rw-r--r--src/mame/drivers/40love.c2
-rw-r--r--src/mame/drivers/alpha68k.c8
-rw-r--r--src/mame/drivers/atvtrack.c125
-rw-r--r--src/mame/drivers/bagman.c2
-rw-r--r--src/mame/drivers/bfm_sc4h.c2
-rw-r--r--src/mame/drivers/bionicc.c4
-rw-r--r--src/mame/drivers/bottom9.c4
-rw-r--r--src/mame/drivers/champbas.c2
-rw-r--r--src/mame/drivers/chihiro.c4322
-rw-r--r--src/mame/drivers/cps1.c2
-rw-r--r--src/mame/drivers/crystal.c2
-rw-r--r--src/mame/drivers/cultures.c161
-rw-r--r--src/mame/drivers/dietgo.c2
-rw-r--r--src/mame/drivers/ecoinfr.c2
-rw-r--r--src/mame/drivers/gaelco3d.c4
-rw-r--r--src/mame/drivers/galpani2.c93
-rw-r--r--src/mame/drivers/gts1.c476
-rw-r--r--src/mame/drivers/igs_m036.c10
-rw-r--r--src/mame/drivers/lindbergh.c293
-rw-r--r--src/mame/drivers/m62.c6
-rw-r--r--src/mame/drivers/mjkjidai.c311
-rw-r--r--src/mame/drivers/multfish_ref.c2
-rw-r--r--src/mame/drivers/naomi.c81
-rw-r--r--src/mame/drivers/neogeo_noslot.c16
-rw-r--r--src/mame/drivers/nova2001.c2
-rw-r--r--src/mame/drivers/r2dx_v33.c36
-rw-r--r--src/mame/drivers/raiden2.c138
-rw-r--r--src/mame/drivers/re900.c4
-rw-r--r--src/mame/drivers/relief.c56
-rw-r--r--src/mame/drivers/renegade.c205
-rw-r--r--src/mame/drivers/starwars.c64
-rw-r--r--src/mame/drivers/supduck.c75
-rw-r--r--src/mame/drivers/system16.c4
-rw-r--r--src/mame/drivers/thedeep.c7
-rw-r--r--src/mame/drivers/tigeroad.c4
-rw-r--r--src/mame/drivers/vsnes.c4
-rw-r--r--src/mame/drivers/wallc.c17
-rw-r--r--src/mame/drivers/wc90b.c2
-rw-r--r--src/mame/drivers/yunsun16.c73
-rw-r--r--src/mame/includes/bionicc.h7
-rw-r--r--src/mame/includes/chihiro.h539
-rw-r--r--src/mame/includes/galpani2.h30
-rw-r--r--src/mame/includes/mjkjidai.h68
-rw-r--r--src/mame/includes/relief.h7
-rw-r--r--src/mame/includes/renegade.h84
-rw-r--r--src/mame/includes/tigeroad.h4
-rw-r--r--src/mame/includes/toaplan1.h2
-rw-r--r--src/mame/includes/yunsun16.h35
-rw-r--r--src/mame/layout/gts1.lay106
-rw-r--r--src/mame/machine/mie.c4
-rw-r--r--src/mame/machine/naomicrypt.c9
-rw-r--r--src/mame/machine/naomim4.c11
-rw-r--r--src/mame/machine/pgmprot_igs027a_type3.c4
-rw-r--r--src/mame/machine/raiden2cop.c6
-rw-r--r--src/mame/mame.lst20
-rw-r--r--src/mame/mame.mak4
-rw-r--r--src/mame/video/bionicc.c38
-rw-r--r--src/mame/video/bosco.c2
-rw-r--r--src/mame/video/btime.c16
-rw-r--r--src/mame/video/chihiro.c3528
-rw-r--r--src/mame/video/galpani2.c122
-rw-r--r--src/mame/video/mjkjidai.c20
-rw-r--r--src/mame/video/renegade.c18
-rw-r--r--src/mame/video/tankbust.c2
-rw-r--r--src/mame/video/tigeroad.c43
-rw-r--r--src/mame/video/tigeroad_spr.c94
-rw-r--r--src/mame/video/tigeroad_spr.h16
-rw-r--r--src/mame/video/yunsun16.c10
-rw-r--r--src/mess/audio/upd1771.c6
-rw-r--r--src/mess/drivers/cnsector.c250
-rw-r--r--src/mess/drivers/comp4.c149
-rw-r--r--src/mess/drivers/gamate.c406
-rw-r--r--src/mess/drivers/leapster.c13
-rw-r--r--src/mess/drivers/mc1000.c2
-rw-r--r--src/mess/drivers/megadriv.c8
-rw-r--r--src/mess/drivers/merlin.c96
-rw-r--r--src/mess/drivers/microvsn.c10
-rw-r--r--src/mess/drivers/ngen.c190
-rw-r--r--src/mess/drivers/simon.c44
-rw-r--r--src/mess/drivers/starwbc.c297
-rw-r--r--src/mess/drivers/stopthie.c276
-rw-r--r--src/mess/drivers/ticalc1x.c748
-rw-r--r--src/mess/drivers/tvc.c1
-rw-r--r--src/mess/drivers/victor9k.c7
-rw-r--r--src/mess/layout/cnsector.lay143
-rw-r--r--src/mess/layout/comp4.lay133
-rw-r--r--src/mess/layout/merlin.lay30
-rw-r--r--src/mess/layout/starwbc.lay127
-rw-r--r--src/mess/layout/stopthie.lay34
-rw-r--r--src/mess/layout/ti1270.lay39
-rw-r--r--src/mess/layout/ti30.lay42
-rw-r--r--src/mess/layout/tisr16.lay51
-rw-r--r--src/mess/layout/wizatron.lay68
-rw-r--r--src/mess/machine/ngen_kb.c219
-rw-r--r--src/mess/machine/ngen_kb.h30
-rw-r--r--src/mess/machine/victor9k_fdc.c242
-rw-r--r--src/mess/machine/victor9k_fdc.h12
-rw-r--r--src/mess/mess.lst21
-rw-r--r--src/mess/mess.mak16
-rw-r--r--src/mess/tools/imgtool/modules/os9.c2
-rw-r--r--src/mess/video/maria.c8
163 files changed, 28187 insertions, 8782 deletions
diff --git a/docs/floppy.txt b/docs/floppy.txt
index cb0d0129f0b..93cda1b52b9 100644
--- a/docs/floppy.txt
+++ b/docs/floppy.txt
@@ -329,7 +329,7 @@ Then for each sector:
- FM-encoded sector data followed by two bytes of crc
- A number of FM-encoded 0xff (usually 48, very variable)
-The the track is finished with a stream of '1' cells.
+The track is finished with a stream of '1' cells.
The 125KHz pulse trains are used to lock the PLL to the signal
correctly. The specific 16-cells streams allow to distinguish between
diff --git a/hash/adam_cass.xml b/hash/adam_cass.xml
index 8e7f92bcf80..3c24878b189 100644
--- a/hash/adam_cass.xml
+++ b/hash/adam_cass.xml
@@ -69,77 +69,77 @@
<publisher>Reedy Software</publisher>
<part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="addictus (1989) (reedy software).ddp" size="262144" crc="30584c67" sha1="7c6b6a44647e6fff3f1be207174cb30503f92e2b" offset="0" />
- </dataarea>
- </part>
+ <dataarea name="cass" size="262144">
+ <rom name="addictus (1989) (reedy software).ddp" size="262144" crc="30584c67" sha1="7c6b6a44647e6fff3f1be207174cb30503f92e2b" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="addrbook">
- <description>Address Book Filer with AutoDialer</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Address Book Filer with AutoDialer</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="address book filer with autodialer (1984) (coleco).ddp" size="262144" crc="8fba1389" sha1="47b5737eafd9e778aba2a05c93f4551a4b3eb21a" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="address book filer with autodialer (1984) (coleco).ddp" size="262144" crc="8fba1389" sha1="47b5737eafd9e778aba2a05c93f4551a4b3eb21a" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="autoaid">
- <description>Auto-AID for SmartBASIC</description>
- <year>1984</year>
- <publisher>FutureVision</publisher>
+ <description>Auto-AID for SmartBASIC</description>
+ <year>1984</year>
+ <publisher>FutureVision</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="auto-aid for smartbasic v1.0 (1984) (futurevision).ddp" size="262144" crc="394284af" sha1="3c98d98665fe4e12265455419f460e97faf79c41" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="auto-aid for smartbasic v1.0 (1984) (futurevision).ddp" size="262144" crc="394284af" sha1="3c98d98665fe4e12265455419f460e97faf79c41" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="autobckp">
- <description>AutoBackup</description>
- <year>198?</year>
- <publisher>Walters Software Co.</publisher>
+ <description>AutoBackup</description>
+ <year>198?</year>
+ <publisher>Walters Software Co.</publisher>
- <part name="cass1" interface="adam_cass">
- <feature name="part_id" value="AutoSave" />
- <dataarea name="cass" size="262144">
- <rom name="autobackup - autosave (198x) (walters software co.).ddp" size="262144" crc="13f5f1ad" sha1="2a7c0fb50fbd1a9d64fb1d53b1354222b5f426f7" offset="0" />
- </dataarea>
- </part>
- <part name="cass2" interface="adam_cass">
- <feature name="part_id" value="AutoLoad" />
- <dataarea name="cass" size="262144">
- <rom name="autobackup - autoload (198x) (walters software co.).ddp" size="262144" crc="55b9ccf1" sha1="a1196b2c9a91042e1c549afbf3a0d40413dc24a9" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <feature name="part_id" value="AutoSave" />
+ <dataarea name="cass" size="262144">
+ <rom name="autobackup - autosave (198x) (walters software co.).ddp" size="262144" crc="13f5f1ad" sha1="2a7c0fb50fbd1a9d64fb1d53b1354222b5f426f7" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="adam_cass">
+ <feature name="part_id" value="AutoLoad" />
+ <dataarea name="cass" size="262144">
+ <rom name="autobackup - autoload (198x) (walters software co.).ddp" size="262144" crc="55b9ccf1" sha1="a1196b2c9a91042e1c549afbf3a0d40413dc24a9" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="bestbrod">
- <description>The Best of Brøderbund</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>The Best of Brøderbund</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="best of broderbund, the (1984) (coleco).ddp" size="262144" crc="8a1d3ab5" sha1="a6646acea19a2d96cc262f478225f8216fdbb2fa" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="best of broderbund, the (1984) (coleco).ddp" size="262144" crc="8a1d3ab5" sha1="a6646acea19a2d96cc262f478225f8216fdbb2fa" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="bestbroda" cloneof="bestbrod">
- <description>The Best of Brøderbund (Alt)</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>The Best of Brøderbund (Alt)</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="best of broderbund, the (1984) (coleco) [a1].ddp" size="262144" crc="cc8d3dc4" sha1="dabbdc85d4cd22c98a864d337958d3e7b48ff120" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="best of broderbund, the (1984) (coleco) [a1].ddp" size="262144" crc="cc8d3dc4" sha1="dabbdc85d4cd22c98a864d337958d3e7b48ff120" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="bestea">
@@ -172,10 +172,10 @@
<publisher>Coleco</publisher>
<part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="super buck rogers - planet of zoom (1983) (coleco) [a1].ddp" size="262144" crc="69aa76a7" sha1="f394b00b027ea4459eaccb03d1bff4c3dc231cab" offset="0" />
- </dataarea>
- </part>
+ <dataarea name="cass" size="262144">
+ <rom name="super buck rogers - planet of zoom (1983) (coleco) [a1].ddp" size="262144" crc="69aa76a7" sha1="f394b00b027ea4459eaccb03d1bff4c3dc231cab" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="softadam">
@@ -191,39 +191,39 @@
</software>
<software name="cartcopy">
- <description>Coleco Game Cartridge Copy</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Coleco Game Cartridge Copy</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="coleco game cartridge copy (1984) (coleco).ddp" size="262144" crc="cda050a1" sha1="2227328bf2f15eb8bf784e1fc331c1a8a3f2867b" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="coleco game cartridge copy (1984) (coleco).ddp" size="262144" crc="cda050a1" sha1="2227328bf2f15eb8bf784e1fc331c1a8a3f2867b" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="conlife">
- <description>Conway's Game of Life</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Conway's Game of Life</description>
+ <year>199?</year>
+ <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="conway's game of life (199x) (unknown).ddp" size="262144" crc="f4286eaa" sha1="dc1c9dc5db9103240e7c68c17f222a216fb2e18e" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="conway's game of life (199x) (unknown).ddp" size="262144" crc="f4286eaa" sha1="dc1c9dc5db9103240e7c68c17f222a216fb2e18e" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="copyutil">
- <description>Copy Utilities (v2.0)</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Copy Utilities (v2.0)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="copy utilities v2.0.ddp" size="262144" crc="a36d2f6b" sha1="54546df91844998092eabe0348ad3d7a4b36123d" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="copy utilities v2.0.ddp" size="262144" crc="a36d2f6b" sha1="54546df91844998092eabe0348ad3d7a4b36123d" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="copycart">
@@ -255,11 +255,11 @@
<year>1984</year>
<publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="super donkey kong junior (1984) (coleco).ddp" size="262144" crc="819ea0fc" sha1="edb51bdc1e3336906afe2ed65062eaccdb4742b4" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="super donkey kong junior (1984) (coleco).ddp" size="262144" crc="819ea0fc" sha1="edb51bdc1e3336906afe2ed65062eaccdb4742b4" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="dkongjrp14" cloneof="dkongjr">
@@ -279,83 +279,83 @@
<year>1984</year>
<publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="super donkey kong junior - 5 screen (1984) (coleco) (prototype) (rev. 13).ddp" size="262144" crc="d1fb3bc9" sha1="794fb6a66b1bfc6bf9b056e4dcd887285cb61c32" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="super donkey kong junior - 5 screen (1984) (coleco) (prototype) (rev. 13).ddp" size="262144" crc="d1fb3bc9" sha1="794fb6a66b1bfc6bf9b056e4dcd887285cb61c32" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="dlair">
- <description>Dragon's Lair</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Dragon's Lair</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="dragon's lair (1984) (coleco).ddp" size="262144" crc="690b2172" sha1="55624e0adbf35f2ad6e5cada6612f65a22b88ef1" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="dragon's lair (1984) (coleco).ddp" size="262144" crc="690b2172" sha1="55624e0adbf35f2ad6e5cada6612f65a22b88ef1" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="eosdisk">
- <description>E.O.S. Disk Manager</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>E.O.S. Disk Manager</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="e.o.s. disk manager (1984) (coleco).ddp" size="262144" crc="53fbaf72" sha1="a78466b931597543f4de77620031175173ad2bc0" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="e.o.s. disk manager (1984) (coleco).ddp" size="262144" crc="53fbaf72" sha1="a78466b931597543f4de77620031175173ad2bc0" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="xbasutil">
- <description>EBU - Extended BASIC Utilities v1.0</description>
- <year>198?</year>
- <publisher>Extended Software</publisher>
+ <description>EBU - Extended BASIC Utilities v1.0</description>
+ <year>198?</year>
+ <publisher>Extended Software</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="extended basic utilities (198x) (extended software).ddp" size="262144" crc="fd48e2c4" sha1="516b9ea4aa64a8269da1ff354774667806973795" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="extended basic utilities (198x) (extended software).ddp" size="262144" crc="fd48e2c4" sha1="516b9ea4aa64a8269da1ff354774667806973795" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="fla_alg">
- <description>Electronic Flashcard Maker - Algebra I</description>
- <year>198?</year>
+ <description>Electronic Flashcard Maker - Algebra I</description>
+ <year>198?</year>
<publisher>Coleco?</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="electronic flashcard maker - algebra i (198x) (unknown).ddp" size="262144" crc="0c21ac4a" sha1="6d074161a443a4ecb37b6dda4f5d00ffb916af09" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="electronic flashcard maker - algebra i (198x) (unknown).ddp" size="262144" crc="0c21ac4a" sha1="6d074161a443a4ecb37b6dda4f5d00ffb916af09" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="fla_his1">
- <description>Electronic Flashcard Maker - American History I</description>
- <year>198?</year>
+ <description>Electronic Flashcard Maker - American History I</description>
+ <year>198?</year>
<publisher>Coleco?</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="electronic flashcard maker - american history i (198x) (unknown).ddp" size="262144" crc="3f67783a" sha1="727f6b5e0fed746fc6bcbc10d226a19a01694140" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="electronic flashcard maker - american history i (198x) (unknown).ddp" size="262144" crc="3f67783a" sha1="727f6b5e0fed746fc6bcbc10d226a19a01694140" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="fla_his2">
- <description>Electronic Flashcard Maker - American History II</description>
- <year>198?</year>
+ <description>Electronic Flashcard Maker - American History II</description>
+ <year>198?</year>
<publisher>Coleco?</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="electronic flashcard maker - american history ii (198x) (unknown).ddp" size="262144" crc="d87b7811" sha1="f58a7657de63de5544c121247be1f0fecd06534b" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="electronic flashcard maker - american history ii (198x) (unknown).ddp" size="262144" crc="d87b7811" sha1="f58a7657de63de5544c121247be1f0fecd06534b" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="egp2">
@@ -395,39 +395,39 @@
</software>
<software name="famfeud">
- <description>Family Feud</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Family Feud</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="family feud (1984) (coleco).ddp" size="262144" crc="ca1cc594" sha1="6f3a544007826610ef0c5db40804023736af0312" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="family feud (1984) (coleco).ddp" size="262144" crc="ca1cc594" sha1="6f3a544007826610ef0c5db40804023736af0312" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="fffback">
- <description>Flash Facts - Flashbacks</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Flash Facts - Flashbacks</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="flash facts - flashbacks (1984) (coleco).ddp" size="262144" crc="3bce9ea3" sha1="aeb6850b90dd38539ab033d2f391305cec8da3ab" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="flash facts - flashbacks (1984) (coleco).ddp" size="262144" crc="3bce9ea3" sha1="aeb6850b90dd38539ab033d2f391305cec8da3ab" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="fffbacka" cloneof="fffback">
- <description>Flash Facts - Flashbacks (Alt)</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Flash Facts - Flashbacks (Alt)</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="flash facts - flashbacks (1984) (coleco) [a1].ddp" size="262144" crc="97847c0f" sha1="62328cd04d99859e3e633d32391e477bf1733db6" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="flash facts - flashbacks (1984) (coleco) [a1].ddp" size="262144" crc="97847c0f" sha1="62328cd04d99859e3e633d32391e477bf1733db6" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="fftrivia">
@@ -455,51 +455,51 @@
</software>
<software name="godosd">
- <description>GoDOS (v1.2, Demo)</description>
- <year>1990</year>
- <publisher>Phoenix 2000</publisher>
+ <description>GoDOS (v1.2, Demo)</description>
+ <year>1990</year>
+ <publisher>Phoenix 2000</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="godos v1.2 demo (ddp #01) (1990) (phoenix 2000).ddp" size="262144" crc="205f65c0" sha1="09a69e6b6f209b3c46e2e8bf774ce7021e7e1be0" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="godos v1.2 demo (ddp #01) (1990) (phoenix 2000).ddp" size="262144" crc="205f65c0" sha1="09a69e6b6f209b3c46e2e8bf774ce7021e7e1be0" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="godosda" cloneof="godosd">
- <description>GoDOS (v1.2, Demo, Alt)</description>
- <year>1990</year>
- <publisher>Phoenix 2000</publisher>
+ <description>GoDOS (v1.2, Demo, Alt)</description>
+ <year>1990</year>
+ <publisher>Phoenix 2000</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="godos v1.2 demo (ddp #02) (1990) (phoenix 2000).ddp" size="262144" crc="99ed9b19" sha1="cdaf8032571708471d59ce3ddd4bd1f21ee84367" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="godos v1.2 demo (ddp #02) (1990) (phoenix 2000).ddp" size="262144" crc="99ed9b19" sha1="cdaf8032571708471d59ce3ddd4bd1f21ee84367" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="godosprg">
- <description>GoDOS BASIC Programs #01</description>
- <year>1990</year>
- <publisher>Joe Quinn</publisher>
+ <description>GoDOS BASIC Programs #01</description>
+ <year>1990</year>
+ <publisher>Joe Quinn</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="godos basic programs #01 (1990) (joe quinn).ddp" size="262144" crc="cc6ef8d6" sha1="0608b4a8e9555bed6e0c20cffda27df473ee7915" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="godos basic programs #01 (1990) (joe quinn).ddp" size="262144" crc="cc6ef8d6" sha1="0608b4a8e9555bed6e0c20cffda27df473ee7915" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="hackguid">
- <description>Hacker's Guide to ADAM</description>
- <year>1985</year>
- <publisher>Peter &amp; Ben Hinkle</publisher>
+ <description>Hacker's Guide to ADAM</description>
+ <year>1985</year>
+ <publisher>Peter &amp; Ben Hinkle</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="hacker's guide to adam (1985) (peter &amp; ben hinkle).ddp" size="262144" crc="fa9e0844" sha1="96bdecbc9fe060a8eb7247161029cfda6ca18139" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="hacker's guide to adam (1985) (peter &amp; ben hinkle).ddp" size="262144" crc="fa9e0844" sha1="96bdecbc9fe060a8eb7247161029cfda6ca18139" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="jeopardy">
@@ -527,51 +527,51 @@
</software>
<software name="labelwrk">
- <description>The Label Works</description>
- <year>198?</year>
- <publisher>Walters Software</publisher>
+ <description>The Label Works</description>
+ <year>198?</year>
+ <publisher>Walters Software</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="label works, the (198x) (walters software co.).ddp" size="262144" crc="eedbf0d0" sha1="2d0904aac4794d24dd24e6116f36f9b38d366fa1" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="label works, the (198x) (walters software co.).ddp" size="262144" crc="eedbf0d0" sha1="2d0904aac4794d24dd24e6116f36f9b38d366fa1" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="malhow1">
- <description>M.A.L. How To Vol. I - Install a Phone Outlet</description>
- <year>199?</year>
- <publisher>Maine ADAM Library</publisher>
+ <description>M.A.L. How To Vol. I - Install a Phone Outlet</description>
+ <year>199?</year>
+ <publisher>Maine ADAM Library</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="m.a.l. how to vol. i - install a phone outlet (199x) (maine adam library).ddp" size="262144" crc="017503bd" sha1="966e659b2e94cd7ff1d147e23a0d79ae80d0d76c" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="m.a.l. how to vol. i - install a phone outlet (199x) (maine adam library).ddp" size="262144" crc="017503bd" sha1="966e659b2e94cd7ff1d147e23a0d79ae80d0d76c" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="malhow2">
- <description>M.A.L. How To Vol. II - Build Your Own Computer Desk Hutch</description>
- <year>199?</year>
- <publisher>Maine ADAM Library</publisher>
+ <description>M.A.L. How To Vol. II - Build Your Own Computer Desk Hutch</description>
+ <year>199?</year>
+ <publisher>Maine ADAM Library</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="m.a.l. how to vol. ii - build your own computer desk hutch (199x) (maine adam library).ddp" size="262144" crc="b472434d" sha1="244985d48da47ee66da000c04c39a3c7a578703e" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="m.a.l. how to vol. ii - build your own computer desk hutch (199x) (maine adam library).ddp" size="262144" crc="b472434d" sha1="244985d48da47ee66da000c04c39a3c7a578703e" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="malhow5">
- <description>M.A.L. How To Vol. V - How to Build an Acoustic Printer Stand</description>
- <year>199?</year>
- <publisher>Maine ADAM Library</publisher>
+ <description>M.A.L. How To Vol. V - How to Build an Acoustic Printer Stand</description>
+ <year>199?</year>
+ <publisher>Maine ADAM Library</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="m.a.l. how to vol. v - how to build an acoustic printer stand (199x) (maine adam library).ddp" size="262144" crc="e22f74ad" sha1="a680c3b03a1f6f2661a09285ea61bd41ddac941c" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="m.a.l. how to vol. v - how to build an acoustic printer stand (199x) (maine adam library).ddp" size="262144" crc="e22f74ad" sha1="a680c3b03a1f6f2661a09285ea61bd41ddac941c" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="malcal93">
@@ -599,51 +599,51 @@
</software>
<software name="multibkp">
- <description>Multicart Backup</description>
- <year>198?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Multicart Backup</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="multicart backup (198x) (unknown).ddp" size="262144" crc="f9f1ce7e" sha1="ec1fb7636de040860c01230b3a05426f896f91c6" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="multicart backup (198x) (unknown).ddp" size="262144" crc="f9f1ce7e" sha1="ec1fb7636de040860c01230b3a05426f896f91c6" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="recipefi">
- <description>Recipe Filer</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Recipe Filer</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="recipe filer (1984) (coleco).ddp" size="262144" crc="a9c479bc" sha1="543c2f66103f598dfcbe2bf9e39af5266b778e6a" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="recipe filer (1984) (coleco).ddp" size="262144" crc="a9c479bc" sha1="543c2f66103f598dfcbe2bf9e39af5266b778e6a" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="scarry">
- <description>Richard Scarry's Best Electronic Wordbook Ever</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Richard Scarry's Best Electronic Wordbook Ever</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="richard scarry's best electronic wordbook ever (1984) (coleco).ddp" size="262144" crc="dcba7f52" sha1="19274fc480154af210a85bb17d17fb0a8df52887" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="richard scarry's best electronic wordbook ever (1984) (coleco).ddp" size="262144" crc="dcba7f52" sha1="19274fc480154af210a85bb17d17fb0a8df52887" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="scarrya" cloneof="scarry">
- <description>Richard Scarry's Best Electronic Wordbook Ever (Alt)</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Richard Scarry's Best Electronic Wordbook Ever (Alt)</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="richard scarry's best electronic wordbook ever (1984) (coleco) [a1].ddp" size="262144" crc="bf33f35b" sha1="5ed65eaafe8075b4f05876bb3158a8742a07817c" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="richard scarry's best electronic wordbook ever (1984) (coleco) [a1].ddp" size="262144" crc="bf33f35b" sha1="5ed65eaafe8075b4f05876bb3158a8742a07817c" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="smartfil">
@@ -671,51 +671,51 @@
</software>
<software name="smarttyp">
- <description>Smart Type (v1.1)</description>
- <year>1985</year>
- <publisher>Reedy Software</publisher>
+ <description>Smart Type (v1.1)</description>
+ <year>1985</year>
+ <publisher>Reedy Software</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="smarttype v1.1 (1985) (reedy software).ddp" size="262144" crc="ab1a4ffd" sha1="d14ec9688be8d37339a6d9338a242a108df5e46c" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="smarttype v1.1 (1985) (reedy software).ddp" size="262144" crc="ab1a4ffd" sha1="d14ec9688be8d37339a6d9338a242a108df5e46c" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="smartbas">
- <description>SmartBASIC (v1.0)</description>
- <year>1983</year>
- <publisher>Coleco</publisher>
+ <description>SmartBASIC (v1.0)</description>
+ <year>1983</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="smartbasic v1.0 (1983) (coleco).ddp" size="262144" crc="aa52c12f" sha1="bce8367bde3ac49f27480cb5d6a21a657e44255b" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="smartbasic v1.0 (1983) (coleco).ddp" size="262144" crc="aa52c12f" sha1="bce8367bde3ac49f27480cb5d6a21a657e44255b" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="smartbasa" cloneof="smartbas">
- <description>SmartBASIC (v1.0, Alt)</description>
- <year>1983</year>
- <publisher>Coleco</publisher>
+ <description>SmartBASIC (v1.0, Alt)</description>
+ <year>1983</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="smartbasic v1.0 (1983) (coleco) [a1].ddp" size="262144" crc="e27df400" sha1="280e5c07f0323f819c9a552445135bbfc8728d1c" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="smartbasic v1.0 (1983) (coleco) [a1].ddp" size="262144" crc="e27df400" sha1="280e5c07f0323f819c9a552445135bbfc8728d1c" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="smartbon">
- <description>SmartBASIC Bonanza</description>
- <year>1985</year>
- <publisher>Martin Consulting</publisher>
+ <description>SmartBASIC Bonanza</description>
+ <year>1985</year>
+ <publisher>Martin Consulting</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="smartbasic bonanza (1985) (martin consulting ltd.).ddp" size="262144" crc="5550b3d9" sha1="a4644160cae98e1d3ad4e1a8bf4b292a667fe583" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="smartbasic bonanza (1985) (martin consulting ltd.).ddp" size="262144" crc="5550b3d9" sha1="a4644160cae98e1d3ad4e1a8bf4b292a667fe583" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="smartlog">
@@ -731,39 +731,39 @@
</software>
<software name="smartspl">
- <description>SmartSPELLER</description>
- <year>198?</year>
- <publisher>Strategic Software Inc.</publisher>
+ <description>SmartSPELLER</description>
+ <year>198?</year>
+ <publisher>Strategic Software Inc.</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="smartspeller (198x) (strategic software inc.).ddp" size="262144" crc="45616de4" sha1="883a987c71cf6e148ecc5ec88d17e05a25ab407d" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="smartspeller (198x) (strategic software inc.).ddp" size="262144" crc="45616de4" sha1="883a987c71cf6e148ecc5ec88d17e05a25ab407d" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="smartwri">
- <description>SmartWRITER Elite</description>
- <year>199?</year>
- <publisher>Walters Software Co.</publisher>
+ <description>SmartWRITER Elite</description>
+ <year>199?</year>
+ <publisher>Walters Software Co.</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="smartwriter elite (199x) (walters software co.).ddp" size="262144" crc="0644a754" sha1="c76a1e20a08eeccbf017ca89a1bbe120f974db7f" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="smartwriter elite (199x) (walters software co.).ddp" size="262144" crc="0644a754" sha1="c76a1e20a08eeccbf017ca89a1bbe120f974db7f" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="stellar5">
- <description>Stellar 5</description>
- <year>1985</year>
- <publisher>Hanania Enterprises</publisher>
+ <description>Stellar 5</description>
+ <year>1985</year>
+ <publisher>Hanania Enterprises</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="stellar 5 (1985) (hanania enterprises).ddp" size="262144" crc="c54fbe05" sha1="9a3a553822c103c17af199ced00d8c6a97fa09ae" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="stellar 5 (1985) (hanania enterprises).ddp" size="262144" crc="c54fbe05" sha1="9a3a553822c103c17af199ced00d8c6a97fa09ae" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="subroc">
@@ -779,15 +779,15 @@
</software>
<software name="snowdrag">
- <description>Temple of the Snow Dragon</description>
- <year>1988</year>
- <publisher>Digital Adventures</publisher>
+ <description>Temple of the Snow Dragon</description>
+ <year>1988</year>
+ <publisher>Digital Adventures</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="temple of the snow dragon (1988) (digital adventures).ddp" size="262144" crc="1a7aaf37" sha1="57ddb806366c334d0f0a902a4b6c50b03db97e70" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="temple of the snow dragon (1988) (digital adventures).ddp" size="262144" crc="1a7aaf37" sha1="57ddb806366c334d0f0a902a4b6c50b03db97e70" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="troltale">
@@ -815,39 +815,39 @@
</software>
<software name="wackywrd">
- <description>Wacky Word Games</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Wacky Word Games</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="wacky word games (1984) (coleco).ddp" size="262144" crc="262ff8c4" sha1="d035bb85856b7a8408f95f1d4fb3e7b5c511eac5" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="wacky word games (1984) (coleco).ddp" size="262144" crc="262ff8c4" sha1="d035bb85856b7a8408f95f1d4fb3e7b5c511eac5" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="wizpin">
- <description>Wizard's Pinball Arcade</description>
- <year>1987</year>
- <publisher>Wizard's Lair Software</publisher>
+ <description>Wizard's Pinball Arcade</description>
+ <year>1987</year>
+ <publisher>Wizard's Lair Software</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="wizard's pinball arcade (1987) (wizard's lair software).ddp" size="262144" crc="01017fc4" sha1="d0670fba4967ca63bb45d9c0818522bc20e3ef2d" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="wizard's pinball arcade (1987) (wizard's lair software).ddp" size="262144" crc="01017fc4" sha1="d0670fba4967ca63bb45d9c0818522bc20e3ef2d" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="zaxxon">
- <description>Zaxxon</description>
- <year>1984</year>
- <publisher>Coleco</publisher>
+ <description>Zaxxon</description>
+ <year>1984</year>
+ <publisher>Coleco</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="super zaxxon (1984) (coleco).ddp" size="262144" crc="f12489a7" sha1="7fb6e8204e745d481abaff53735f3ffffa5f65bc" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="super zaxxon (1984) (coleco).ddp" size="262144" crc="f12489a7" sha1="7fb6e8204e745d481abaff53735f3ffffa5f65bc" offset="0" />
+ </dataarea>
+ </part>
</software>
@@ -892,15 +892,15 @@
</software>
<software name="ghaaug04">
- <description>gHAAUG #04 - SmartBASIC - Game Arc #4</description>
- <year>19??</year>
- <publisher>gHAAUG</publisher>
+ <description>gHAAUG #04 - SmartBASIC - Game Arc #4</description>
+ <year>19??</year>
+ <publisher>gHAAUG</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="ghaaug #04 - smartbasic - game arc #4.ddp" size="262144" crc="03c75aa4" sha1="9fd49907dd711d9d78b03ff1c1af72f5b66e8353" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="ghaaug #04 - smartbasic - game arc #4.ddp" size="262144" crc="03c75aa4" sha1="9fd49907dd711d9d78b03ff1c1af72f5b66e8353" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="undv2">
@@ -919,52 +919,52 @@
<!-- Related to NIAD and SmartBASIC: investigate! -->
<software name="basicpgm">
- <description>basicpgm</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>basicpgm</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="basicpgm.ddp" size="262144" crc="50668433" sha1="1853f441cfe8cc9a679a0a8186364a735e9d2d9c" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="basicpgm.ddp" size="262144" crc="50668433" sha1="1853f441cfe8cc9a679a0a8186364a735e9d2d9c" offset="0" />
+ </dataarea>
+ </part>
</software>
<!-- what is this? investigate! -->
<software name="smarttrx">
- <description>SmartTrix I - Data Doctor</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>SmartTrix I - Data Doctor</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="smarttrix i - data doctor.ddp" size="262144" crc="e2e98c26" sha1="b49735b212c8277729eaff256437b5bce3b9685f" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="smarttrix i - data doctor.ddp" size="262144" crc="e2e98c26" sha1="b49735b212c8277729eaff256437b5bce3b9685f" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="blankddp">
- <description>Blank Digital Data Pack</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Blank Digital Data Pack</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="256k digital data pack.ddp" size="262144" crc="3fe56492" sha1="71b8e1122f2693eda166efc29f674d6bc01c3400" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="256k digital data pack.ddp" size="262144" crc="3fe56492" sha1="71b8e1122f2693eda166efc29f674d6bc01c3400" offset="0" />
+ </dataarea>
+ </part>
</software>
<software name="blankddpa" cloneof="blankddp">
- <description>Blank Digital Data Pack (Alt)</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Blank Digital Data Pack (Alt)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
- <part name="cass1" interface="adam_cass">
- <dataarea name="cass" size="262144">
- <rom name="256k digital data pack [a1].ddp" size="262144" crc="03781521" sha1="e1a73a5e7df3627c37d13e35ef2a58549d59353a" offset="0" />
- </dataarea>
- </part>
+ <part name="cass1" interface="adam_cass">
+ <dataarea name="cass" size="262144">
+ <rom name="256k digital data pack [a1].ddp" size="262144" crc="03781521" sha1="e1a73a5e7df3627c37d13e35ef2a58549d59353a" offset="0" />
+ </dataarea>
+ </part>
</software>
<!--
diff --git a/hash/coco_flop.xml b/hash/coco_flop.xml
index 8b65e83ada6..e6431938fae 100644
--- a/hash/coco_flop.xml
+++ b/hash/coco_flop.xml
@@ -3,7 +3,7 @@
<softwarelist name="coco_flop" description="Tandy Radio Shack Color Computer disk images">
- <!-- coco3 only requires 512Kb, audio is a farty, run best with a a 6309? - coco3h driver) -->
+ <!-- coco3 only requires 512Kb, audio is a farty, run best with a 6309? - coco3h driver) -->
<!-- RUN"DONKEY" -->
<software name="dkong" supported ="partial">
<description>Donkey Kong (Sock Master's Donkey Kong Emulator for CoCo 3) (512Kb)</description>
diff --git a/hash/gamate.xml b/hash/gamate.xml
index 9fff1320ff1..adcebbec92e 100644
--- a/hash/gamate.xml
+++ b/hash/gamate.xml
@@ -1,12 +1,53 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+<!--
+Undumped carts, based on Wikipedia list
+C1010 - Bump N' Run
+C1016 - Volcano Panic
+C1020 - Bad Bud Chou Chu's Adventure
+C1025 - Jackpot
+C1030 - Beach Volleyball
+C1033 - Fist of Thunder
+C1034 - Superboy
+C1036 - Jewelriss
+C1038 - Mars Voyage
+C1039 - Fortress of Fierceness
+C1040 - Incantational Couple
+C1041 - Mighty Boxer
+C1042 - Flying Goblin
+C1045 - World Cup Soccer
+C1046 - Kiki Island
+C1047 - Fortune 'n Luck
+C1048 - Baseball (or Super Baseball)
+C1049 - Punk Boy
+C1050 - Fortress of Fierceness II
+C1051 - ??
+C1052 - Famous
+C1053 - Metamorphosiser
+C1055 - ??
+C1056 - GP Race
+C1057 - Fantasy Travel
+C1058 - Heaven Clash
+C1059 - ??
+C1060 - Further Adventures of Hannibal The Cat
+C1062 - ??
+C1063 - Basketball
+C1064 - Bao Qing Tian
+C1065 - Hot Hero
+C1066 - ??
+C1067 - Robin Hood
+C1069 - Riddle of the Ancient Tomb
+C1070 - Insect War
+-->
+
<softwarelist name="gamate" description="Bit Corp Gamate cartridges">
<software name="cubeup" supported="no">
<description>Cube Up</description>
- <year>19??</year>
- <publisher>Bit Corp</publisher>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1001" />
<part name="cart" interface="gamate_cart">
<dataarea name="rom" size="16384">
<rom name="cube up.bin" size="16384" crc="2a911e57" sha1="9d3b28887b6f375600bff29f8f233087b9152a60" offset="0x00000" />
@@ -14,5 +55,415 @@
</part>
</software>
+ <software name="wittyape" supported="no">
+ <description>Witty Apee</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1002" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1002_witty_apee.bin" size="32768" crc="f1190956" sha1="0c0579472260b1a0f5bfbda4cba8043b2a75aa54" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boxforum" supported="no">
+ <description>Box Forum</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1003" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1003_box_forum.bin" size="32768" crc="82c6f1d5" sha1="a4c826d85b990b4c01d17e81b722cc54f7ae9e93" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mightytk" supported="no">
+ <description>Mighty Tank</description>
+ <year>19??</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1004" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1004_mighty_tank.bin" size="32768" crc="f24379fd" sha1="ef3a555860b09431fbf1600238e7a4865d7af792" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="encbrick" supported="no">
+ <description>Enchanted Bricks</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1005" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1005_enchanted_bricks.bin" size="32768" crc="3dcdf55a" sha1="d722c5334a063c1f05e7bcd17fcc645cc3571127" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minigolf" supported="no">
+ <description>Mini Golf</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1006" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1006_mini_golf.bin" size="32768" crc="59781e23" sha1="527d6cd2069086e76596bc365be5c807dfffcb64" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="galaxinv" supported="no">
+ <description>Galaxy Invaders</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1007" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1007_galaxy_invaders.bin" size="32768" crc="93afad9b" sha1="03f9c3d6cb3192f5bf91f2ac0e578bc65c8b1825" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dknight" supported="no">
+ <description>Legend of Dragon Knight</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1008" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="16384">
+ <rom name="c1008_legend_of_dragon_knight.bin" size="16384" crc="d65d1f4b" sha1="d247193a22ba34e6dc0e606d71460bd5dd1ccab5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tornado" supported="no">
+ <description>Tornado</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1009" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1009_tornado.bin" size="32768" crc="4cd6118e" sha1="671ea650ef462e7dcb4cb02b07ddbc300002707b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="moneymaz" supported="no">
+ <description>Money Maze</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="serial" value="C1011" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1011_money_maze.bin" size="32768" crc="4d9bfd91" sha1="814f4ff6fffb6a86c9936f74f50049b34bc0d362" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pharaoh" supported="no">
+ <description>Pharaoh Revenger</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1012" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1012_pharaoh_revenger.bin" size="32768" crc="daac7932" sha1="a1b2846613341fe7d92e4ceb40e5525fce5c1cdd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dinobibo" supported="no">
+ <description>Dino Bibo</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="serial" value="C1013" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1013_dino_bibo.bin" size="32768" crc="d6e1f1b7" sha1="7e7ba0b7b919e89e2d8a904de30f5ee34ffba822" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="timewarr" supported="no">
+ <description>Time Warrior</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1014" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1014_time_warrior.bin" size="32768" crc="1502d7e3" sha1="8d15793fbea07cfda8d68d7eb96fe0eccc978317" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="killshot" supported="no">
+ <description>Kill Shot</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="serial" value="C1015" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1015_kill_shot.bin" size="32768" crc="69bc6a30" sha1="a4310f285f68c1837b4e92a2e127e22e7f0fd4f2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dvcastle" supported="no">
+ <description>Devil Castle</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1017" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1017_devilcastle.bin" size="32768" crc="2f4dfa71" sha1="175994971c157e51ff0b5dd0e46c9e8c92cf2a50" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kungfu" supported="no">
+ <description>Kung-Fu Fighter</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1018" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1018_kung-fu_fighter.bin" size="32768" crc="4ba40206" sha1="7188b9265e43d4c51eab016462ced23a2fcb9972" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dinoball" supported="no">
+ <description>Dino Ball</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1019" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1019_dino_ball.bin" size="32768" crc="b609871f" sha1="b9c1817bca6e5a580dabd87a4fe8b757c973403f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mythasam" supported="no">
+ <description>Myth of Asamia</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1021" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1021_mith_of_asamia.bin" size="32768" crc="3871a86c" sha1="70082452deb9d11c91ff3e1ad88ee8cbf24723ad" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pipemani" supported="no">
+ <description>Pipemania</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="serial" value="C1022" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1022_pipemania.bin" size="32768" crc="ae5978bd" sha1="a86fb7f4cc0f12b0c2d262a6618df76267c1513e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tennis" supported="no">
+ <description>Tennis</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1023" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1023_tennis.bin" size="32768" crc="93adefb1" sha1="ef5ae26d0f9a744c73eec364ac7bee2fd6eb1ed9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="marauder" supported="no">
+ <description>Marauder</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="serial" value="C1024" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1024_marauder.bin" size="32768" crc="c0a8607b" sha1="f41dab120bf7b3d7e2b21a408c8b89b4224bf825" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flipuzle" supported="no">
+ <description>Flipuzzle</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1026" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1026_flipuzzle.bin" size="32768" crc="f4bd2a05" sha1="3928cd356f23f595d8023e4d4a46a98308cf4662" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="monstpit" supported="no">
+ <description>Monster Pitfall</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1027" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1027_monster_pitfall.bin" size="32768" crc="be6eda47" sha1="bc35475cfea02de98d2f4646f6ae4a9f48e138f5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vindicat" supported="no">
+ <description>Vindicators</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1028" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1028_vindicators.bin" size="32768" crc="7b99ee4c" sha1="b858479fc168572e684d3bb2330ae6826470f69f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="brikblst" supported="no">
+ <description>Brick Blaster</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1029" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1029_brick_blaster.bin" size="32768" crc="76f5f2f1" sha1="a4e2d675ef6fd844b33d0aa40ce75ecaa6e65002" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bomblast" supported="no">
+ <description>Bomb Blaster</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1031" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1031_bomb_blast.bin" size="32768" crc="33fd30f4" sha1="069928d2577c05a17f42a96f4183a90773e58539" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- This maybe comes from a cart with "Bomb Blaster" label? -->
+ <software name="bomblasta" cloneof="bomblast" supported="no">
+ <description>Bomb Blaster (Alt)</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1031" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1031_bomb_blaster.bin" size="32768" crc="81ffb896" sha1="e79fa833714111a70b4700774dc2575d8cd84f3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cosmicfg" supported="no">
+ <description>Cosmic Fighter</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1032" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1032_cosmic_fighter.bin" size="32768" crc="d24df424" sha1="df4ebdd1bfb63fa74b7fe83d0f3ce4b403bb5cde" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="treashnt" supported="no">
+ <description>Treasure Hunter</description>
+ <year>1990</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1035" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1035_treasure_hunter.bin" size="32768" crc="3bed5e9c" sha1="c724b40b97a7f97abfb33e31e5c315ae986b669a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="santa" supported="no">
+ <description>Nightmare of Santa Claus</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1037" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1037_nightmare_of_santa_claus.bin" size="32768" crc="ed243824" sha1="ff3ad53998dd5858f1176767786ec187ea8b059b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boom" supported="no">
+ <description>Boom</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1043" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1043_boom.bin" size="32768" crc="20fda0f7" sha1="02f9a07b251bc29d0e5b3d6a4dfde0ab63bd65a3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="snowman" supported="no">
+ <description>Snowman Legend</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1044" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1044_snowman_legend.bin" size="32768" crc="bfdf356f" sha1="19184793176d7aba7e353819aca57030254666ae" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mjigsaw" supported="no">
+ <description>Magic Jigsaw</description>
+ <year>1991</year>
+ <publisher>Bit Corp.</publisher>
+ <info name="serial" value="C1054" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="32768">
+ <rom name="c1054_magic_jigsaw.bin" size="32768" crc="1098bcd3" sha1="75004583a83225e8379fa3f34433e0a76222e1f7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- This does not display anything, so it might not be this game! -->
+ <software name="dinopark" supported="no">
+ <description>Dinosaur Park</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="serial" value="C1061" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="16384">
+ <rom name="c1061_gamate_card.bin" size="16384" crc="c05d20b5" sha1="e45a028809738bfa265661414f755691a5b63ad0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- This does not display anything, so it might not be this game! -->
+ <software name="goldpyra" supported="no">
+ <description>The Golden Pyramid</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="serial" value="C1068" />
+ <part name="cart" interface="gamate_cart">
+ <dataarea name="rom" size="16384">
+ <rom name="c1068_gamate_card.bin" size="16384" crc="fdd4dce6" sha1="156211b19d8e38f58955f95f9329cfa9d8b1c74c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
</softwarelist>
diff --git a/hash/leapster.xml b/hash/leapster.xml
index 3ed71f11e40..67c855d9e53 100644
--- a/hash/leapster.xml
+++ b/hash/leapster.xml
@@ -117,7 +117,7 @@
<publisher>LeapFrog</publisher>
<part name="cart" interface="leapster_cart">
<dataarea name="rom" size="0x800000">
- <rom name="500-11078-a - lernen mit leap (german)" size="0x800000" crc="e1f505e7" sha1="935eb17d3b6f9df2115a12445b3c8c977005481a" offset="0x00000" />
+ <rom name="500-11078-a - lernen mit leap (german).bin" size="0x800000" crc="e1f505e7" sha1="935eb17d3b6f9df2115a12445b3c8c977005481a" offset="0x00000" />
</dataarea>
</part>
</software>
@@ -143,4 +143,116 @@
</dataarea>
</part>
</software>
+
+ <software name="dora" supported="no">
+ <description>Dora - Retter der Wildnis (German)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-12562-b - dora - retter der wildnis (german).bin" size="0x800000" crc="242907d4" sha1="262ee3e208fff0fc362bc879416cbdf31bf38304" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vorschul" supported="no">
+ <description>Vorschule (German)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-10934-a - vorschule (german).bin" size="0x800000" crc="4c5e775e" sha1="87819e1a95f0d435fc94697423fcfca13f463a34" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="weltmath" supported="no">
+ <description>Weltraum-Mathe - Lernen im Arcade-Stil! (German)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-12140-a - weltraum-mathe - lernen im arcade-stil! (german).bin" size="0x400000" crc="75164c8e" sha1="6bebaef0d3b6f8a1a4b2bb957a00a0cce4ed65a2" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+
+ <software name="jedimath" supported="no">
+ <description>Star Wars - Jedi Math (US)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-13306-a - star wars - jedi math (us).bin" size="0x800000" crc="27000674" sha1="a7e8e63ab74931ad9546aba20755714df572badb" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carssc" supported="no">
+ <description>Cars - Supercharged (US)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-12712-a - cars - supercharged (us).bin" size="0x800000" crc="beca3909" sha1="8cda80251d6e45427dba6acbae5dff306eb84d34" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clifread" supported="no">
+ <description>Clifford - The big red dog - Reading (US)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-12466-a - clifford - the big red dog - reading (us).bin" size="0x800000" crc="0134af49" sha1="29c3e2e9d56aeee09c752776bfd8c096e02b75c5" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="digdino" supported="no">
+ <description>Digging for Dinosaurs (US)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-13681-a - digging for dinosaurs (us).bin" size="0x800000" crc="822ca3da" sha1="ff0ac7f5fded346553e1a4697b45c27fc04ee3fe" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="getpuzld" supported="no">
+ <description>Get Puzzled! (US)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-12692-a - get puzzled! (us).bin" size="0x800000" crc="05b608f0" sha1="04b3181f39e88b6cd47e39a7efb50fa14618ff2c" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hugenose" supported="no">
+ <description>Reading with Phonics - Mole's Huge Nose (US)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-10829-a - reading with phonics - mole's huge nose (us).bin" size="0x800000" crc="2c6e623e" sha1="c298181f00109b7f863fdb12b5bd462085c4ff4f" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="imagfrnd" supported="no">
+ <description>Foster's Home for Imaginary Friends (US)</description>
+ <year>2003</year>
+ <publisher>LeapFrog</publisher>
+ <part name="cart" interface="leapster_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="500-12715-a - foster's home for imaginary friends (us).bin" size="0x800000" crc="e62d1684" sha1="e43820efe9dbd8dddf6312493a7967c75a29431a" offset="0x00000" />
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/hash/mc1000_cass.xml b/hash/mc1000_cass.xml
new file mode 100644
index 00000000000..b39b35c5d38
--- /dev/null
+++ b/hash/mc1000_cass.xml
@@ -0,0 +1,1228 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!-- Info for original games comes from http://mc-1000.wikispaces.com/fitas+cce -->
+
+
+<!-- Undumped (?):
+ F-16 - Unknown
+ F-17 - Unknown
+ F-19 - Controle de Despesas
+ F-23 - Unknown
+ F-29 - Unknown
+-->
+
+<softwarelist name="mc1000_cass" description="CCE MC-1000 cassettes">
+
+ <!-- Original programs -->
+
+ <software name="analeco">
+ <description>Analise Economica</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-30" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="426028">
+ <rom name="f30.wav" size="426028" crc="e30fcc63" sha1="531e49cbd37cb08af45efe2f979cf8fd54ebb706" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="analfin">
+ <description>Analise Financiera</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD"/>
+ <info name="serial" value="F-28" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="632348">
+ <rom name="f28.wav" size="632348" crc="c7ced86d" sha1="256b04ad5a3442308604bc9917a063174b4b9d02" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="anapatri">
+ <description>Analise Patrimonial</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-24" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="631660">
+ <rom name="f24.wav" size="631660" crc="b9015ca2" sha1="2c5f75e41c0dfadff0b5b75ddbf6c5bd4a0350ba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bataero">
+ <description>Batalha Aeronaval</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-15" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="664652">
+ <rom name="f15.wav" size="664652" crc="d3bc5c32" sha1="c49a094603221fe1a01324f8d973e26cef86198d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="batmate">
+ <description>Batalha de Matematica</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-7" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="583692">
+ <rom name="f7.wav" size="583692" crc="46caaae3" sha1="67cc7540211a9847d8d4b4ed9de9629383f67a4e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="calcfin">
+ <description>Calculo Financiero</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-25" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="752876">
+ <rom name="f25.wav" size="752876" crc="98e3c4a7" sha1="d3869dd3f652430852bed38d8d9ba1a8ad8d81b2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="calcprec">
+ <description>Calculo de Preco de Venda</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-18" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="666732">
+ <rom name="f18.wav" size="666732" crc="cf7bc405" sha1="3f32491f4394db419310988751d1bc16338f553a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="calendar">
+ <description>Calendario</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-21" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="266220">
+ <rom name="f21.wav" size="266220" crc="9d37708a" sha1="d0345d44fe6d4c16a2523e04a8ccbe42624e0d2e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carro">
+ <description>Carro Maluco</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-11" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="316028">
+ <rom name="f11.wav" size="316028" crc="36f856b3" sha1="a9074f500b1a7eb3832b7dba89fe78a4d2aff285" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="compara">
+ <description>Comparacao de Recitas</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-26" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="507772">
+ <rom name="f26.wav" size="507772" crc="c285fa48" sha1="d48ea00356f65af4d241a113457f6db6f8611423" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="guerrobo">
+ <description>Guerra de Robos</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-14" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="735692">
+ <rom name="f14.wav" size="735692" crc="5b770716" sha1="fafff9f95759106bcf2734a051eba42fba10e464" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="invasor">
+ <description>Invasores do Espaco</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-9" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="597644">
+ <rom name="f9.wav" size="597644" crc="22102133" sha1="e02db15bd6bb36a0e48691a58aa4b93cbea3c79a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jipeguer">
+ <description>Jipe de Guerra</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-10" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="738908">
+ <rom name="f10.wav" size="738908" crc="459d1c03" sha1="39411d342cd1624b608f275f459c5919a6d1cdcd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jogforc2" cloneof="jogforca">
+ <description>Jogo da Forca II</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-13" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="845372">
+ <rom name="f13.wav" size="845372" crc="d6826e26" sha1="fa88292f2a7b148f0a0ff35d5a23ca01747b808c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jogforca">
+ <description>Jogo da Forca I</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-12" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="859020">
+ <rom name="f12.wav" size="859020" crc="6fb78310" sha1="8e7676c17a2bc2da6d0aa68a0874ee880aacf665" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="livroraz">
+ <description>Livro Razao Geral</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-27" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="876460">
+ <rom name="f27.wav" size="876460" crc="ea528fac" sha1="71defb4fe12afe7dd91b0f0512641f35630ff456" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="memoria">
+ <description>Jogo de Memoria</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-1" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="359596">
+ <rom name="f1.wav" size="359596" crc="75478925" sha1="57651331d3da445392ff936e8e382fa90d29f844" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="olimpmat">
+ <description>Olimpiada de Matematica</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-8" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="326124">
+ <rom name="f8a.wav" size="326124" crc="42e029d3" sha1="1c049bc4193404d66fc80a8ae10ac780b0e00c50" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="375132">
+ <rom name="f8b.wav" size="375132" crc="23ee6191" sha1="eb470c77ee09304f732604afdd102490209b76fe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="othello">
+ <description>Othello</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-4" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="506316">
+ <rom name="f4.wav" size="506316" crc="24e478b1" sha1="1479d86212677107b505635396d22065deb28535" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="persegui">
+ <description>Perseguicao Policial</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-3" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="578092">
+ <rom name="f3.wav" size="578092" crc="45e7b9d0" sha1="e9433a8e234466c199d83876911049d09b3be87c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="quebra">
+ <description>Quebra Cabecas</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-6" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="740636">
+ <rom name="f6.wav" size="740636" crc="14055426" sha1="78d74d0b54743fb2fba752d3e350ed6d94f0f47f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="redepert">
+ <description>Rede Pert - Caminho Critico</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-20" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="1810012">
+ <rom name="f20.wav" size="1810012" crc="3f32b010" sha1="5b281c9a6dfaf610ab9495feeb2da55607201e82" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="resta">
+ <description>Resta Um</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-5" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="670908">
+ <rom name="f5.wav" size="670908" crc="6ef25fb5" sha1="223862aa232d1ee03ad747198498d5ea8bc6638c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="senha">
+ <description>Senha</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with TLOAD" />
+ <info name="serial" value="F-2" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="531324">
+ <rom name="f2.wav" size="531324" crc="d9d1c328" sha1="984b58745e6ee79d39b74f049748e39682acd61c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="teoria">
+ <description>Teoria da Estimativa Estatistica</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load with LOAD" />
+ <info name="serial" value="F-22" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="401852">
+ <rom name="f22.wav" size="401852" crc="a172953b" sha1="bd9324a63f186e5be4e346c10d097b921bf52619" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="manualba">
+ <description>Manual do BASIC</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load all programs with TLOAD" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <feature name="part_id" value="Compositor de Musica"/>
+ <dataarea name="cass" size="609500">
+ <rom name="mc1000_1_1_compositor_de_musicas.wav" size="609500" crc="ae66d227" sha1="ba33f588a580b6893713ac7437f9b4d98cb7ffac" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <feature name="part_id" value="Aterrissagem em Marte"/>
+ <dataarea name="cass" size="461580">
+ <rom name="mc1000_1_2_aterrissagem_em_marte.wav" size="461580" crc="cdfc08b8" sha1="807b60925135de67f258568d784c16993a10dbb8" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <feature name="part_id" value="Bombardeio na Cidade"/>
+ <dataarea name="cass" size="339596">
+ <rom name="mc1000_1_3_bombardeio_na_cidade.wav" size="339596" crc="c74f3b26" sha1="9ed8a57a808727752dd3bb37af7eb0eb5db375f1" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass4" interface="mc1000_cass">
+ <feature name="part_id" value="Matematica para Jardim de Infancia"/>
+ <dataarea name="cass" size="659084">
+ <rom name="mc1000_1_4_matematica_para_jardim_de_infancia.wav" size="659084" crc="ff0a069c" sha1="8839cbe36e107d4134903d0204b1d9156aeb0460" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass5" interface="mc1000_cass">
+ <feature name="part_id" value="Batalha com Tanques"/>
+ <dataarea name="cass" size="554828">
+ <rom name="mc1000_1_5_batalha_com_tanques.wav" size="554828" crc="62237abf" sha1="709e7e7f85841782dd0fba952f95dbc621ff8301" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="50progs">
+ <description>50 Programas Para Voce</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load all programs with LOAD + the name in parentheses (e.g. LOAD APRE)" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <feature name="part_id" value="Apresentacao (APRE)"/>
+ <dataarea name="cass" size="489228">
+ <rom name="mc1000_fita_50_programas_01_apresentacao_apre.wav" size="489228" crc="b8473115" sha1="af2eb19c9d6b98912ef3aeff95b3d0b005fb007a" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <feature name="part_id" value="Desenhando (DESE)"/>
+ <dataarea name="cass" size="266348">
+ <rom name="mc1000_fita_50_programas_02_desenhando_dese.wav" size="266348" crc="0e4531b0" sha1="cf5b326eb76a58371b4f8d6416577b666acb7c9c" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <feature name="part_id" value="Some sounds (SONS)"/>
+ <dataarea name="cass" size="213468">
+ <rom name="mc1000_fita_50_programas_03_some_sounds_sons.wav" size="213468" crc="18f475dd" sha1="7b911f61283de969e549e05ef02f0e36a858e348" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass4" interface="mc1000_cass">
+ <feature name="part_id" value="Grafimania (GRAF)"/>
+ <dataarea name="cass" size="163004">
+ <rom name="mc1000_fita_50_programas_04_grafimania_graf.wav" size="163004" crc="6361305d" sha1="090fbaf586f06d3198957e36721003da20ff3561" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass5" interface="mc1000_cass">
+ <feature name="part_id" value="Dente-de-leao (DENT)"/>
+ <dataarea name="cass" size="101292">
+ <rom name="mc1000_fita_50_programas_05_dente_de_leao_dent.wav" size="101292" crc="7d4f6569" sha1="f0bf86473d031a701b21891131de20d8919d9d3d" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass6" interface="mc1000_cass">
+ <feature name="part_id" value="Caleidoscopio (CALE)"/>
+ <dataarea name="cass" size="87196">
+ <rom name="mc1000_fita_50_programas_06_caleidoscopio_cale.wav" size="87196" crc="2b4fa79f" sha1="f57938771f18f84900483ba97c2b7167b17a2756" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass7" interface="mc1000_cass">
+ <feature name="part_id" value="3 telas (TELA)"/>
+ <dataarea name="cass" size="94860">
+ <rom name="mc1000_fita_50_programas_07_3_telas_tela.wav" size="94860" crc="a74164b6" sha1="adde65a5d38772e5e3ab866ca698952d192b9e80" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass8" interface="mc1000_cass">
+ <feature name="part_id" value="Teias (TEIA)"/>
+ <dataarea name="cass" size="102284">
+ <rom name="mc1000_fita_50_programas_08_teias_teia.wav" size="102284" crc="00c89aab" sha1="15cc023730d947c42aa8e59d6b92c15a3334a1b8" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass9" interface="mc1000_cass">
+ <feature name="part_id" value="Reflexo (REFL)"/>
+ <dataarea name="cass" size="94684">
+ <rom name="mc1000_fita_50_programas_09_reflexo_refl.wav" size="94684" crc="f5b23b22" sha1="c073344e2e90a1034bd2d52c2a90e7c61c8782c0" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass10" interface="mc1000_cass">
+ <feature name="part_id" value="Linhas (LINH)"/>
+ <dataarea name="cass" size="99052">
+ <rom name="mc1000_fita_50_programas_10_linhas_linh.wav" size="99052" crc="62f69360" sha1="ae03a492a971a43232c58ad9bcc12181da49d36a" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass11" interface="mc1000_cass">
+ <feature name="part_id" value="Cicloide (CICL)"/>
+ <dataarea name="cass" size="81212">
+ <rom name="mc1000_fita_50_programas_11_cicloide_cicl.wav" size="81212" crc="ff5825d8" sha1="a1338fd93b3671a378f52224b50d26bedd9e1bab" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass12" interface="mc1000_cass">
+ <feature name="part_id" value="Senoides (SENO)"/>
+ <dataarea name="cass" size="82124">
+ <rom name="mc1000_fita_50_programas_12_senoides_seno.wav" size="82124" crc="37712d8a" sha1="7de98cd758cd0c7227ba57fe8b41a13f7721044d" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass13" interface="mc1000_cass">
+ <feature name="part_id" value="Histograma (HIST)"/>
+ <dataarea name="cass" size="425964">
+ <rom name="mc1000_fita_50_programas_13_histograma_hist.wav" size="425964" crc="b4ec3d5e" sha1="b6a6b8a92319124b1328c40e0a04e819e91ff608" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass14" interface="mc1000_cass">
+ <feature name="part_id" value="Jogo de dados (DADO)"/>
+ <dataarea name="cass" size="229164">
+ <rom name="mc1000_fita_50_programas_14_jogo_de_dados_dado.wav" size="229164" crc="f881f923" sha1="7d55813fdc1deb58001e9fd2c1687501a13acba5" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass15" interface="mc1000_cass">
+ <feature name="part_id" value="Frases (FRAS)"/>
+ <dataarea name="cass" size="291996">
+ <rom name="mc1000_fita_50_programas_15_frases_fras.wav" size="291996" crc="6a51544e" sha1="119de9fcb145369f92f515b4a8aed49d98b9b830" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass16" interface="mc1000_cass">
+ <feature name="part_id" value="Numero oculto (NUME)"/>
+ <dataarea name="cass" size="124460">
+ <rom name="mc1000_fita_50_programas_16_numero_oculto_nume.wav" size="124460" crc="b00af10e" sha1="7e12c7bf6727a9c73a309364a89334c4016965ae" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass17" interface="mc1000_cass">
+ <feature name="part_id" value="Reverso (REVE)"/>
+ <dataarea name="cass" size="399420">
+ <rom name="mc1000_fita_50_programas_17_reverso_reve.wav" size="399420" crc="919148c4" sha1="9c4ab207f0f6abaf6cac91d3decea8372142ba49" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass18" interface="mc1000_cass">
+ <feature name="part_id" value="Calendario (CALE)"/>
+ <dataarea name="cass" size="260380">
+ <rom name="mc1000_fita_50_programas_18_calendario_cale.wav" size="260380" crc="1476eba6" sha1="ac1d1168272e81a1026333109564885a364af22a" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass19" interface="mc1000_cass">
+ <feature name="part_id" value="Tira-letras (TIRA)"/>
+ <dataarea name="cass" size="127628">
+ <rom name="mc1000_fita_50_programas_19_tira_letras_tira.wav" size="127628" crc="87fc6b3e" sha1="8f753ce79f610ac0fdab6f0aabb9a231f6f2b7a0" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass20" interface="mc1000_cass">
+ <feature name="part_id" value="Espelho (ESPE)"/>
+ <dataarea name="cass" size="120220">
+ <rom name="mc1000_fita_50_programas_20_espelho_espe.wav" size="120220" crc="ab87857e" sha1="b36a5ca2959dd75457548420ad544b06f63027f3" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass21" interface="mc1000_cass">
+ <feature name="part_id" value="Negativo (NEGT)"/>
+ <dataarea name="cass" size="117484">
+ <rom name="mc1000_fita_50_programas_21_negativo_negt.wav" size="117484" crc="f83b0d4a" sha1="4db22774a8f880c2e562fea683d192ac616a5d52" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass22" interface="mc1000_cass">
+ <feature name="part_id" value="Moldura (MOLD)"/>
+ <dataarea name="cass" size="167708">
+ <rom name="mc1000_fita_50_programas_22_moldura_mold.wav" size="167708" crc="cb7a3be8" sha1="390002d6f241e3909e846bf9204c9a250e3c54e4" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass23" interface="mc1000_cass">
+ <feature name="part_id" value="Ordenador alfabetico (SORT)"/>
+ <dataarea name="cass" size="218428">
+ <rom name="mc1000_fita_50_programas_23_ordenador_alfabetico_sort.wav" size="218428" crc="933c05d7" sha1="942889490e378ac83b3513963bb4bfb15a337179" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass24" interface="mc1000_cass">
+ <feature name="part_id" value="Conversor arabicos-romanos (ROMA)"/>
+ <dataarea name="cass" size="138668">
+ <rom name="mc1000_fita_50_programas_24_conversao_arabicos_romanos_roma.wav" size="138668" crc="858e4fca" sha1="bee6207043b42e0788414f09222035a9c970df36" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass25" interface="mc1000_cass">
+ <feature name="part_id" value="Palpites para loto (LOTO)"/>
+ <dataarea name="cass" size="159804">
+ <rom name="mc1000_fita_50_programas_25_palpites_para_loto_loto.wav" size="159804" crc="83fd51af" sha1="4969800ada5688e9bccbdb1eb8a738294d0be870" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass26" interface="mc1000_cass">
+ <feature name="part_id" value="C.P.F. (CPF)"/>
+ <dataarea name="cass" size="133692">
+ <rom name="mc1000_fita_50_programas_26_cpf_cpf.wav" size="133692" crc="23ff1845" sha1="ef85e05da81416e374446186fee0be63a5a8faae" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass27" interface="mc1000_cass">
+ <feature name="part_id" value="Conversao graus Celsius-Fahrenheit-Celsius (CFC)"/>
+ <dataarea name="cass" size="132476">
+ <rom name="mc1000_fita_50_programas_27_conversao_celsius_fahrenheit_celsius_cfc.wav" size="132476" crc="194f9c50" sha1="f49a222b9374d911b2eac8b9153fd8692ef0955e" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass28" interface="mc1000_cass">
+ <feature name="part_id" value="Palindromas (PALI)"/>
+ <dataarea name="cass" size="135260">
+ <rom name="mc1000_fita_50_programas_28_palindromas_pali.wav" size="135260" crc="507fd2a5" sha1="75c01363aa2b9203ba2e8f547ecf937de88bf05f" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass29" interface="mc1000_cass">
+ <feature name="part_id" value="Agenda telefonica (AGEN)"/>
+ <dataarea name="cass" size="359692">
+ <rom name="mc1000_fita_50_programas_29_agenda_telefonica_agen.wav" size="359692" crc="236b88e3" sha1="fcc1eb66523c9b2a2a147f2dad3112cb4292a408" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass30" interface="mc1000_cass">
+ <feature name="part_id" value="Econometro (ECON)"/>
+ <dataarea name="cass" size="186316">
+ <rom name="mc1000_fita_50_programas_30_econometro_econ.wav" size="186316" crc="b258d7b0" sha1="9750b6ed75eac0245e3db6cb2f8e3f8d32e068eb" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass31" interface="mc1000_cass">
+ <feature name="part_id" value="Alfabeto I (ALFI)"/>
+ <dataarea name="cass" size="115596">
+ <rom name="mc1000_fita_50_programas_31_alfabeto_i_alfi.wav" size="115596" crc="5b943d8c" sha1="dd13faa2147dd93fb1acd3d4abce91464d2bacb1" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass32" interface="mc1000_cass">
+ <feature name="part_id" value="Alfabeto II (ALII)"/>
+ <dataarea name="cass" size="99164">
+ <rom name="mc1000_fita_50_programas_32_alfabeto_ii_alii.wav" size="99164" crc="8f1d2005" sha1="e21cbeb7833c40e054f870a2622f70d245ef17dc" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass33" interface="mc1000_cass">
+ <feature name="part_id" value="Codigo Morse (MORS)"/>
+ <dataarea name="cass" size="120316">
+ <rom name="mc1000_fita_50_programas_33_codigo_morse_mors.wav" size="120316" crc="9ac62da7" sha1="ba1f20925b66641185eb64e4c3a0cb6c4fcb5df1" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass34" interface="mc1000_cass">
+ <feature name="part_id" value="Cebolinha (CEBO)"/>
+ <dataarea name="cass" size="139084">
+ <rom name="mc1000_fita_50_programas_34_cebolinha_cebo.wav" size="139084" crc="53c2e0ec" sha1="378cba2f77cc6c3cdbe691b94270fa6124ecd459" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass35" interface="mc1000_cass">
+ <feature name="part_id" value="Numeros primos (PRIM)"/>
+ <dataarea name="cass" size="168396">
+ <rom name="mc1000_fita_50_programas_35_numeros_primos_prim.wav" size="168396" crc="8e9d948c" sha1="d72a8ff1dd6b07df67abfbc636b963eba2e9271d" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass36" interface="mc1000_cass">
+ <feature name="part_id" value="Fatorial (FACT)"/>
+ <dataarea name="cass" size="217244">
+ <rom name="mc1000_fita_50_programas_36_fatorial_fact.wav" size="217244" crc="5e0a46fb" sha1="9ab8dd65a480d06c3a85484e199e21e72f960660" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass37" interface="mc1000_cass">
+ <feature name="part_id" value="Calculo de pi (PI)"/>
+ <dataarea name="cass" size="100748">
+ <rom name="mc1000_fita_50_programas_37_calculo_de_pi_pi.wav" size="100748" crc="b99403ca" sha1="bb19192f77dccb1196268ac6f756b238fc234372" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass38" interface="mc1000_cass">
+ <feature name="part_id" value="Triangulos (TRAI)"/>
+ <dataarea name="cass" size="138764">
+ <rom name="mc1000_fita_50_programas_38_triangulos_tria.wav" size="138764" crc="15d70dbb" sha1="8762c4564660d43f812a418105f38674378b701d" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass39" interface="mc1000_cass">
+ <feature name="part_id" value="Raiz de polinomios (RAIZ)"/>
+ <dataarea name="cass" size="142812">
+ <rom name="mc1000_fita_50_programas_39_raiz_de_polinomios_raiz.wav" size="142812" crc="280fee83" sha1="03a10961527bbdadda6be56935f58d234bc450d7" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass40" interface="mc1000_cass">
+ <feature name="part_id" value="Fatores primos (FAPR)"/>
+ <dataarea name="cass" size="141724">
+ <rom name="mc1000_fita_50_programas_40_fatores_primos_fapr.wav" size="141724" crc="8a5af03d" sha1="daf3f1ebf4704a101a2f13b601fd9434e9532abc" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass41" interface="mc1000_cass">
+ <feature name="part_id" value="Conversao de base (BASE)"/>
+ <dataarea name="cass" size="132508">
+ <rom name="mc1000_fita_50_programas_41_conversao_de_base_base.wav" size="132508" crc="4c8807e2" sha1="f08e2da6284d95c8558b32bf7352d13dd196a214" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass42" interface="mc1000_cass">
+ <feature name="part_id" value="Regressao linear (RLIN)"/>
+ <dataarea name="cass" size="157036">
+ <rom name="mc1000_fita_50_programas_42_regressao_linear_rlin.wav" size="157036" crc="ec5ed7d0" sha1="390570d7ac5c7d6e439efed7d6a1a512d1cf6aa5" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass43" interface="mc1000_cass">
+ <feature name="part_id" value="Exponenciais (EXPO)"/>
+ <dataarea name="cass" size="160460">
+ <rom name="mc1000_fita_50_programas_43_exponenciais_expo.wav" size="160460" crc="c69db959" sha1="3f0bebf891261fbccdbe52ca59e0914d3eae1dde" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass44" interface="mc1000_cass">
+ <feature name="part_id" value="Soma de matrizes (MATR)"/>
+ <dataarea name="cass" size="149052">
+ <rom name="mc1000_fita_50_programas_44_soma_de_matrizes_matr.wav" size="149052" crc="48d634c6" sha1="82f2d441ad8808376c9753889f3a4f64d298aa95" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass45" interface="mc1000_cass">
+ <feature name="part_id" value="Teste de aritmetica (ARIT)"/>
+ <dataarea name="cass" size="237500">
+ <rom name="mc1000_fita_50_programas_45_teste_de_aritmetica_arit.wav" size="237500" crc="e575db54" sha1="740ac672a2912df76df297ec85e393c6b24bc41e" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass46" interface="mc1000_cass">
+ <feature name="part_id" value="Grafico de funcoes (GRSI)"/>
+ <dataarea name="cass" size="343884">
+ <rom name="mc1000_fita_50_programas_46_grafico_de_funcoes_grsi.wav" size="343884" crc="d492eb00" sha1="cf61cc433711f4dd138df076ce37fd364ad85774" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass47" interface="mc1000_cass">
+ <feature name="part_id" value="Invasao das formigas (FORM)"/>
+ <dataarea name="cass" size="81452">
+ <rom name="mc1000_fita_50_programas_47_invasao_das_formigas_form.wav" size="81452" crc="2637f2ea" sha1="db4f01f47412f14a5fb8d4adc731d2e67c527b94" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass48" interface="mc1000_cass">
+ <feature name="part_id" value="Graficos simulados (GSIM)"/>
+ <dataarea name="cass" size="95724">
+ <rom name="mc1000_fita_50_programas_48_graficos_simulados_gsim.wav" size="95724" crc="ff2a8bde" sha1="9aa83ed550afa5de4eb3b7c565ca80475ce7a7d9" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass49" interface="mc1000_cass">
+ <feature name="part_id" value="Calculo de volumes (VOLM)"/>
+ <dataarea name="cass" size="745180">
+ <rom name="mc1000_fita_50_programas_49_calculo_de_volumes_volm.wav" size="745180" crc="2a680b2a" sha1="d18713b8aa7bac81559355457e6a1daa07e8cb3c" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ <part name="cass50" interface="mc1000_cass">
+ <feature name="part_id" value="Demo printer (IMPR)"/>
+ <dataarea name="cass" size="288876">
+ <rom name="mc1000_fita_50_programas_50_demo_printer_impr.wav" size="288876" crc="da769bbb" sha1="35ea4431c53a3e7f30ea8c8ad581d0005d80c99a" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cursobas">
+ <description>Curso de BASIC</description>
+ <year>198?</year>
+ <publisher>CCE Soft</publisher>
+ <info name="usage" value="Load all programs with LOAD" />
+
+ <part name="cass1" interface="mc1000_cass">
+ <feature name="part_id" value="Side A Part 1"/>
+ <dataarea name="cass" size="1772988">
+ <rom name="mc1000_fita_curso_de_basic_1.wav" size="1772988" crc="7b42f631" sha1="1de0291dfd856da05f189065c6cae13f6ee34718" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <feature name="part_id" value="Side A Part 2"/>
+ <dataarea name="cass" size="1626828">
+ <rom name="mc1000_fita_curso_de_basic_2.wav" size="1626828" crc="fef12eac" sha1="8dc428cb1c4c0d6cdeab356f7c5c8f6296422e98" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <feature name="part_id" value="Side B Part 1"/>
+ <dataarea name="cass" size="1486428">
+ <rom name="mc1000_fita_curso_de_basic_3.wav" size="1486428" crc="26d63ca2" sha1="dfa4cababf20095cce4fbf5be11a3ae94322d49a" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass4" interface="mc1000_cass">
+ <feature name="part_id" value="Side B Part 2"/>
+ <dataarea name="cass" size="1177628">
+ <rom name="mc1000_fita_curso_de_basic_4.wav" size="1177628" crc="62a84f2c" sha1="7653cc92186de419b1cc4bb43e7b97704b6a0aac" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <!-- Type-in BASIC programs -->
+
+ <!--
+ These programs were downloaded as .bas files, converted to .bin and then converted to .wav, thanks to the tools by Ensjo at
+ http://mc-1000.wikispaces.com/file/view/aplicativos-cassete-mc1000.zip/267884614/aplicativos-cassete-mc1000.zip (Requires Java)
+ -->
+
+<!--
+ <software name="amazing">
+ <description>Amazing</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="302892">
+ <rom name="amazing 2.wav" size="302892" crc="93239a52" sha1="ae135b159cb8246d8617097d3a239959ff9cb929" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="325164">
+ <rom name="amazing 3.wav" size="325164" crc="53bb3ffd" sha1="6066742b1e36f05887c3de7c0cdba3715e56d50c" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <dataarea name="cass" size="232668">
+ <rom name="amazing.wav" size="232668" crc="9dec1422" sha1="33e5386fe8ef60cf5501b1891a30b36651761c6c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arquivo">
+ <description>Mostra Nome de Arquivo</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="68844">
+ <rom name="mostra nome de arquivo.wav" size="68844" crc="1dbd1e56" sha1="394f0e1f93b777329eae3c79314d352a84c84815" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="aventura">
+ <description>Aventura</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="702764">
+ <rom name="aventura.wav" size="702764" crc="82a6263b" sha1="834d9511e22f5c34244923108366201e82b89179" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="awari">
+ <description>Awari</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="216444">
+ <rom name="awari.wav" size="216444" crc="4e695eeb" sha1="daf34c61a385a6044f52d3b3a0fead5bc25786b6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boneco">
+ <description>Boneco Animado SG6</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="266668">
+ <rom name="boneco animado sg6.wav" size="266668" crc="066c1f17" sha1="d4ef4e152f892e8566c7a789dc591d9451e5bb73" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="capaesp">
+ <description>Capa e Espada</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="1224700">
+ <rom name="capa e espada alt.wav" size="1224700" crc="1b4ee35e" sha1="1d02c0bb984d83a14c170655c7c704e52bf5824a" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="1224028">
+ <rom name="capa e espada.wav" size="1224028" crc="6dfde138" sha1="6a6395381cf29111a5143a5bae5e517d8150277e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="circulos">
+ <description>Circulos</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="176812">
+ <rom name="circulos.wav" size="176812" crc="402caaea" sha1="614201ff32f80c91bf433243bc046eee78e190bf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="comecome">
+ <description>Come Come</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="290236">
+ <rom name="come come.wav" size="290236" crc="2aff8ec3" sha1="622bb22f427cf583064e943d02fe9a8a57d61d87" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="damas">
+ <description>Damas</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="333484">
+ <rom name="damas.wav" size="333484" crc="323edc1f" sha1="ad04c3568d598879f63e4a45a89270812bdcafe6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="drawprnt">
+ <description>Draw Print</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="412892">
+ <rom name="draw print.wav" size="412892" crc="2e8b4101" sha1="0693a63c7a65a864c15dd899f3d4a4dfd31606f0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="enginead">
+ <description>Engine para Adventures</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="757388">
+ <rom name="engine para adventures 2.wav" size="757388" crc="84577d7e" sha1="e34884828bd8902ae63c1d8b407035db25b102a5" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="615356">
+ <rom name="engine para adventures.wav" size="615356" crc="2b6aaeba" sha1="aec9b2ab7e82dd5884a352e20a04741640819ad1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="explosao">
+ <description>Explosao</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="549964">
+ <rom name="explosao.wav" size="549964" crc="d231d3af" sha1="a3cce871efa9f8762257ac7ea47c71311f25920f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="grafic3d">
+ <description>Graficos em 3D</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="161212">
+ <rom name="graficos em 3d 2.wav" size="161212" crc="2b66d72c" sha1="ae267b2e917c3aeaf2b509df396071a6391c03d7" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="312092">
+ <rom name="graficos em 3d 3.wav" size="312092" crc="25eeda66" sha1="66515ed2845ecbc2a2bfdc92ed2b014127d10424" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <dataarea name="cass" size="108092">
+ <rom name="graficos em 3d.wav" size="108092" crc="2afb2dd1" sha1="b7712378f87b0aa442511f909cdf394fe3171c6a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hamurabi">
+ <description>Hamurabi</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="482092">
+ <rom name="hamurabi.wav" size="482092" crc="4d894a09" sha1="fc9bb4eb7cab0c544e623a7a1731910b824b8107" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hanoisol">
+ <description>Hanoi Solucao Circular</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="216236">
+ <rom name="hanoi solucao circular.wav" size="216236" crc="14e1964f" sha1="f9676f8403faa2d8ba5c8aba657f9893e23d22ed" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hgrpri64">
+ <description>HGR Print 64</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="276140">
+ <rom name="hgr print 64 2.wav" size="276140" crc="dc88eb54" sha1="bbbfaf25c591b1097132d1451b2960bd23374983" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="301228">
+ <rom name="hgr print 64.wav" size="301228" crc="e4eaf422" sha1="37438b2e26dec14809e020162bbc623b8977cdf5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hgrprint">
+ <description>HGR Print</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="368780">
+ <rom name="hgr print 10.wav" size="368780" crc="5bd47cbc" sha1="1066ee0728d9c0573852c67fec7c519e5f5906d6" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="391708">
+ <rom name="hgr print 11.wav" size="391708" crc="14453cfa" sha1="a8a3dfab558861f6a4cb49d7c423aaed1d323a4d" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <dataarea name="cass" size="426332">
+ <rom name="hgr print 12.wav" size="426332" crc="6119473b" sha1="81ec218a8500f6bfe51b06292ec0ba5051d39678" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass4" interface="mc1000_cass">
+ <dataarea name="cass" size="366204">
+ <rom name="hgr print 2.wav" size="366204" crc="506c5a8d" sha1="a039a343bf749a234f86e53beae26533389f7c3f" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass5" interface="mc1000_cass">
+ <dataarea name="cass" size="358684">
+ <rom name="hgr print 3.wav" size="358684" crc="d584a3b7" sha1="1baebe754cb88b4f9e349dafbf6d4ad38e517922" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass6" interface="mc1000_cass">
+ <dataarea name="cass" size="418188">
+ <rom name="hgr print 4.wav" size="418188" crc="22d7d41e" sha1="9b981838a90f845cc466d1d83278e425e410b818" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass7" interface="mc1000_cass">
+ <dataarea name="cass" size="393452">
+ <rom name="hgr print 5.wav" size="393452" crc="7eda4a84" sha1="8376c9cfec9fb4c7d33ef3fe3ed729bbce675ac1" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass8" interface="mc1000_cass">
+ <dataarea name="cass" size="406012">
+ <rom name="hgr print 6.wav" size="406012" crc="a60b49c8" sha1="7f832fd22e5c4fef05e84fabfd3992e52964d1d3" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass9" interface="mc1000_cass">
+ <dataarea name="cass" size="424300">
+ <rom name="hgr print 7.wav" size="424300" crc="9d6d5111" sha1="57e4f2ec6a5d3ff109e163185beb0b3065f1faf9" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass10" interface="mc1000_cass">
+ <dataarea name="cass" size="417916">
+ <rom name="hgr print 8.wav" size="417916" crc="05ef09f7" sha1="2971eb0416a492be700bf5e405708e20a8e74a6f" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass11" interface="mc1000_cass">
+ <dataarea name="cass" size="392460">
+ <rom name="hgr print 9.wav" size="392460" crc="0b6224d7" sha1="7dfeca391984c9472da335a465313ab99a864735" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass12" interface="mc1000_cass">
+ <dataarea name="cass" size="380460">
+ <rom name="hgr print.wav" size="380460" crc="721f3a06" sha1="188669d5b1b193b5dd594bd6f91e638eba961547" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jogcobra">
+ <description>Jogo da Cobra</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="275756">
+ <rom name="jogo da cobra.wav" size="275756" crc="cdbbfeb4" sha1="1a46b99a0ca5ab2b7bd59c84b08938bd7da035ff" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jogovida">
+ <description>Jogo da Vida de Conway</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="49100">
+ <rom name="jogo da vida de conway 2.wav" size="49100" crc="58489ad6" sha1="515653094e106ccb7ca72a7a89b97da3e355813d" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="56028">
+ <rom name="jogo da vida de conway 3.wav" size="56028" crc="6f45555d" sha1="be12200bf6cab01cdbe8115eefce2742d5b32662" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <dataarea name="cass" size="190460">
+ <rom name="jogo da vida de conway.wav" size="190460" crc="6c37aec8" sha1="8ab0749201923cb549ad6d791620c71125ae301a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labirint">
+ <description>Labirinto</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="811724">
+ <rom name="labirinto.wav" size="811724" crc="3faf8ebe" sha1="4c2fe02873ca1ecaf152d54aea9dd15c969f8022" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mazemake">
+ <description>Maze Maker</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="292716">
+ <rom name="maze maker.wav" size="292716" crc="ac56c8e7" sha1="71a437a3a6018a247bd239187b70e0e39542dd1d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minaouro">
+ <description>Mina de Ouro</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="492668">
+ <rom name="mina de ouro.wav" size="492668" crc="606a0c7b" sha1="2f7ba270900ce9fe54ad2a3b94352bf2e2954b18" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="modosvid">
+ <description>Modos de Video</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="227132">
+ <rom name="modos de video.wav" size="227132" crc="5e349ed7" sha1="729b1d6e236e06c643d746c943252b703c044304" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="simulvoo">
+ <description>Simulador de Voo</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="1003836">
+ <rom name="simulador de voo.wav" size="1003836" crc="7de71c8f" sha1="d740c569144151a34f9facf3ef141990d433ece8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="startrek">
+ <description>Star Trek</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="832572">
+ <rom name="star trek 1.wav" size="832572" crc="d233a4f9" sha1="76279157ef2923ca415b7143f624a16e00cfdc98" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="690828">
+ <rom name="star trek 2.wav" size="690828" crc="1efb2f5d" sha1="22b3f1d4c1443908421cacf11fac9314a94c4725" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stevejob">
+ <description>Foto de Steve Jobs</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="901884">
+ <rom name="foto de steve jobs.wav" size="901884" crc="5a4f54bf" sha1="a4ba646755008f2929f6530aeb5420b38ad730c7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="testacol">
+ <description>Testa Color Artifacting</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="161868">
+ <rom name="testa color artifacting 2.wav" size="161868" crc="954256c2" sha1="3e65461e6d33e84d112326591f5d2476867be02f" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="141484">
+ <rom name="testa color artifacting 3.wav" size="141484" crc="0ff96798" sha1="d10405573601ce67de539f414a6dae026ee3b378" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass3" interface="mc1000_cass">
+ <dataarea name="cass" size="165628">
+ <rom name="testa color artifacting.wav" size="165628" crc="43f00cff" sha1="0c12c5ff98d230b46753b5aba896a050e10654a3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="travess">
+ <description>Travessia</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="407916">
+ <rom name="travessia.wav" size="407916" crc="7bb5efde" sha1="fedb7691219b277461f4869917ddf357346adbb5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viscass">
+ <description>Visualiza Cassete</description>
+ <year>19??</year>
+ <publisher>&lt;type-in&gt;</publisher>
+
+ <part name="cass1" interface="mc1000_cass">
+ <dataarea name="cass" size="52108">
+ <rom name="visualiza cassete 2.wav" size="52108" crc="6030ad9a" sha1="04c1eca0be9cdb80437d09b9ce11758681acca4c" offset="0" />
+ </dataarea>
+ </part>
+ <part name="cass2" interface="mc1000_cass">
+ <dataarea name="cass" size="61516">
+ <rom name="visualiza cassete.wav" size="61516" crc="97d7e459" sha1="7b386f40f1e90e508fd56c7eb6f8aa8ed58c1e22" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+-->
+</softwarelist>
diff --git a/hash/neogeo.xml b/hash/neogeo.xml
index 229fd653e5c..e8466e18169 100644
--- a/hash/neogeo.xml
+++ b/hash/neogeo.xml
@@ -435,9 +435,10 @@
<rom loadflag="load16_word_swap" name="006-p1.p1" offset="0x000000" size="0x080000" crc="d4aaf597" sha1="34d35b71adb5bd06f4f1b50ffd9c58ab9c440a84" />
<!-- MB834200 -->
</dataarea>
- <dataarea name="mcu" size="0x1000">
+ <dataarea name="mcu" size="0x2000">
<!-- Hitachi HD6301V1 MCU -->
- <!-- <rom name="hd6301v1p.com", 0x0000, 0x1000, NO_DUMP /> -->
+ <rom offset="0x000000" size="0x02000" name="rhcom.bin" crc="e5cd6306" sha1="f6bbb8ae562804d67e137290c765c3589fa334c0" />
+ <!-- dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally) -->
</dataarea>
<dataarea name="fixed" size="0x040000">
<rom offset="0x000000" size="0x020000" name="006-s1.s1" crc="eb5189f0" sha1="0239c342ea62e73140a2306052f226226461a478" />
@@ -487,9 +488,10 @@
<rom loadflag="load16_word_swap" name="006-pg1.p1" offset="0x000000" size="0x080000" status="baddump" crc="52445646" sha1="647bb31f2f68453c1366cb6e2e867e37d1df7a54" />
<!-- Chip label p1h does not exist, renamed temporarly to pg1, marked BAD_DUMP. This needs to be verified. -->
</dataarea>
- <dataarea name="mcu" size="0x1000">
+ <dataarea name="mcu" size="0x2000">
<!-- Hitachi HD6301V1 MCU -->
- <!-- <rom name="hd6301v1p.com", 0x0000, 0x1000, NO_DUMP /> -->
+ <rom offset="0x000000" size="0x02000" name="rhcom.bin" crc="e5cd6306" sha1="f6bbb8ae562804d67e137290c765c3589fa334c0" />
+ <!-- dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally) -->
</dataarea>
<dataarea name="fixed" size="0x040000">
<rom offset="0x000000" size="0x020000" name="006-s1.s1" crc="eb5189f0" sha1="0239c342ea62e73140a2306052f226226461a478" />
@@ -3566,7 +3568,7 @@
<!-- VIC940800 -->
</dataarea>
<dataarea name="fixed" size="0x040000">
- <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="7f012104" sha1="f366dcc3923655dff16ec08a40d5fce22a84257d" />
+ <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="d62a72e9" sha1="a23e4c4fd4ec11a7467ce41227c418b4dd1ef649" />
<!-- VIC930100 -->
</dataarea>
<dataarea name="audiocpu" size="0x020000">
@@ -3604,11 +3606,11 @@
<rom loadflag="load16_word_swap" name="060-p1.p1" offset="0x000000" size="0x100000" crc="2a104b50" sha1="3eb663d3df7074e1cdf4c0e450a35c9cf55d8979" />
<!-- VIC940800 -->
<!-- the rom below acts as a patch to the program rom in the cart, replacing the first 512kb -->
- <rom loadflag="load16_word_swap" name="060-epr.sp2" offset="0x000000" size="0x080000" status="baddump" crc="3032041b" sha1="4b8ed2e6f74579ea35a53e06ccac42d6905b0f51" />
- <!-- P is on eprom, correct chip label unknown -->
+ <rom loadflag="load16_word_swap" name="1.sp2" offset="0x000000" size="0x080000" crc="3032041b" sha1="4b8ed2e6f74579ea35a53e06ccac42d6905b0f51" />
+ <!-- P is on eprom, has a Viccom logo at the top of the label with a circled '1' in the center -->
</dataarea>
<dataarea name="fixed" size="0x040000">
- <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="7f012104" sha1="f366dcc3923655dff16ec08a40d5fce22a84257d" />
+ <rom offset="0x000000" size="0x020000" name="060-s1.s1" crc="d62a72e9" sha1="a23e4c4fd4ec11a7467ce41227c418b4dd1ef649" />
<!-- VIC930100 -->
</dataarea>
<dataarea name="audiocpu" size="0x020000">
diff --git a/hash/nes.xml b/hash/nes.xml
index e6470d39e90..ec7264f884e 100644
--- a/hash/nes.xml
+++ b/hash/nes.xml
@@ -60960,6 +60960,37 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</part>
</software>
+<!-- Other two games forming the whole F-646 HIGH K Power Sports 4-in-1 were identical to original releases, so went undumped apparently -->
+ <software name="goal5" cloneof="tecmowc">
+ <description>Goal 5 Soccer (Ripped from F-646 HIGH K Power Sports 4-in-1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="txrom" />
+ <dataarea name="chr" size="65536">
+ <rom name="goal 5 soccer (unl)[p1][!].chr" size="65536" crc="21e379ee" sha1="4401033269a88d484e6768550f152d3f0a204fd3" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="65536">
+ <rom name="goal 5 soccer (unl)[p1][!].prg" size="65536" crc="04005d22" sha1="74069b62dff0bc05708875cfc7693cb6fadfcd8a" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hstar2" cloneof="f1hero2">
+ <description>High Way Star II (Ripped from F-646 HIGH K Power Sports 4-in-1)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="txrom" />
+ <dataarea name="chr" size="131072">
+ <rom name="highway star ii (unl)[p1][!].chr" size="131072" crc="8fc24316" sha1="ed6bc1c4f5964b9dfc5146d35cfeebc844b6d488" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="highway star ii (unl)[p1][!].prg" size="131072" crc="5a08b5c5" sha1="f7b317584fab6d62274021ff3dd3c7bd0d0a60f4" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="huoyansz">
<description>Huo Yan Shi Zhe (Chi)</description>
<year>19??</year>
@@ -61098,6 +61129,37 @@ preliminary proto for the PAL version, still running on NTSC systems) or the gfx
</part>
</software>
+ <software name="intcricka" cloneof="intcrick">
+ <description>International Cricket (Pirate)</description>
+ <year>200?</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="txrom" />
+ <dataarea name="chr" size="262144">
+ <rom name="international cricket (unl).chr" size="262144" crc="75dcab42" sha1="72fb441639dca8a9afb60aa57cb896373033795b" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="262144">
+ <rom name="international cricket (unl).prg" size="262144" crc="ed2c3fa6" sha1="0b273dd380e0d36442d23c472c897ae8e04bb8e2" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+<!-- the code has alse been modified to run as standalone -->
+ <software name="intcrickb" cloneof="intcrick">
+ <description>Brian Lara 2003 - International Cricket (Pirate, Alt, Ripped from Multicart)</description>
+ <year>200?</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="txrom" />
+ <dataarea name="chr" size="262144">
+ <rom name="international cricket (unl)(alt version)[f1].chr" size="262144" crc="a09bc9af" sha1="bb57acab0ba404521e06743488da396277b8ee38" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="262144">
+ <rom name="international cricket (unl)(alt version)[f1].prg" size="262144" crc="8bcb7111" sha1="188d02e77d126879419e76099288af88effb28a7" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="jgscs">
<description>Jin Gwok Sei Chuen Saang (Chi)</description>
<year>1990</year>
@@ -75953,6 +76015,21 @@ be better to redump them properly. -->
</part>
</software>
+ <software name="mc_4fg">
+ <description>Super 4-in-1 Fantasy Gun</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" />
+ <dataarea name="chr" size="65536">
+ <rom name="super 4-in-1 fantasy gun [p1][!].chr" size="65536" crc="5516b3f9" sha1="bdbfef593273dd442aeaf38bb6c9b6dd80384c10" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="super 4-in-1 fantasy gun [p1][!].prg" size="131072" crc="6fe4a699" sha1="82a65dabd598eff1154af48d17a45ccbb49cec4c" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mc_4fk21" supported="no">
<description>4 in 1 (FK23C8021)</description>
<year>19??</year>
@@ -76550,6 +76627,36 @@ be better to redump them properly. -->
</part>
</software>
+ <software name="mc_500" supported="no">
+ <description>500 in 1</description>
+ <year>19??</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! -->
+ <dataarea name="chr" size="65536">
+ <rom name="500-in-1 (anim splash, no rev, alt mapper)[p1][!].chr" size="65536" crc="25bdd64a" sha1="1f95eaf20fec9058b6917aa47dbdcec4b7a5b87d" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="500-in-1 (anim splash, no rev, alt mapper)[p1][!].prg" size="131072" crc="23371b82" sha1="ca87f90300ed0f5cc66884cc994f05d9d888c3c2" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mc_500a" supported="no">
+ <description>500 in 1 (Alt)</description>
+ <year>19??</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! -->
+ <dataarea name="chr" size="65536">
+ <rom name="500-in-1 (static splash, no rev, alt mapper)[p1][!].chr" size="65536" crc="e7dacb8a" sha1="ece1b9c7fd8be955a1df6c8505533b4fac194eeb" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="500-in-1 (static splash, no rev, alt mapper)[p1][!].prg" size="131072" crc="ed2b09a7" sha1="68d1b5063a0126e9a07eba9be532276ba064f147" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mc_50">
<description>50 in 1</description>
<year>19??</year>
@@ -76764,6 +76871,22 @@ be better to redump them properly. -->
</part>
</software>
+ <software name="mc_6ky11" supported="partial">
+ <description>Super 6-in-1 (KY-6011)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="fk23c" />
+ <feature name="pcb" value="BMC-FK23C" />
+ <dataarea name="chr" size="524288">
+ <rom name="super 6-in-1 (ky-6011)[p1][!].chr" size="524288" crc="b1543694" sha1="c756a38ac84d8db59db39b60e37fbdfb8e74c180" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="524288">
+ <rom name="super 6-in-1 (ky-6011)[p1][!].prg" size="524288" crc="850a40cf" sha1="480b5ca7976955bc7cfc128d4303e5de2b419e41" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mc_6m23" supported="no">
<description>6 in 1 (MGC-023)</description>
<year>19??</year>
@@ -77400,6 +77523,38 @@ be better to redump them properly. -->
</part>
</software>
+ <software name="mc_9999a" supported="partial">
+ <description>9999 in 1 (Alt)</description>
+ <year>19??</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" />
+ <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
+ <dataarea name="chr" size="65536">
+ <rom name="9999-in-1 (anim splash, rev 11)[p2][!].chr" size="65536" crc="5ee1cd6e" sha1="f896273a27a8efb92e2fdc4e95c30405d411d4df" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="9999-in-1 (anim splash, rev 11)[p2][!].prg" size="131072" crc="183fdacb" sha1="350d53910c4bb2036cb7bfd741bc314b15f82cf5" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mc_9999b" supported="partial">
+ <description>9999 in 1 (Alt 2)</description>
+ <year>19??</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" />
+ <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
+ <dataarea name="chr" size="65536">
+ <rom name="9999-in-1 (anim splash, rev 12)[p2][!].chr" size="65536" crc="f3ba9c7c" sha1="8e52170e032c2462666e945116f03d973b2a66e1" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="9999-in-1 (anim splash, rev 12)[p2][!].prg" size="131072" crc="33202b3e" sha1="a245fb8a895b4315764bab59c82658d849fd41dd" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mc_9x7">
<description>9999999 in 1</description>
<year>19??</year>
@@ -77416,6 +77571,37 @@ be better to redump them properly. -->
</part>
</software>
+ <software name="mc_9x7a" supported="no">
+ <description>9999999 in 1 (Alt)</description>
+ <year>19??</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" /> <!-- mapper says 217 but it's not gc6in1 either! -->
+ <dataarea name="chr" size="65536">
+ <rom name="9999999-in-1 (static splash, no rev, alt mapper)[p1][!].chr" size="65536" crc="25bdd64a" sha1="1f95eaf20fec9058b6917aa47dbdcec4b7a5b87d" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="9999999-in-1 (static splash, no rev, alt mapper)[p1][!].prg" size="131072" crc="ed2b09a7" sha1="68d1b5063a0126e9a07eba9be532276ba064f147" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mc_9x7b">
+ <description>9999999 in 1 (Alt 2)</description>
+ <year>19??</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" />
+ <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
+ <dataarea name="chr" size="65536">
+ <rom name="9999999-in-1 (static splash, rev 10)[p1].chr" size="65536" crc="9b6e8be7" sha1="4c53a3d5e510c4355041b9ad88f1e633ce85f916" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="9999999-in-1 (static splash, rev 10)[p1].prg" size="131072" crc="00a0d43b" sha1="88f4b987bedfd6c8d5131a2abab26b185b052a21" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mc_brain" supported="no">
<description>Brain Series 13 in 1</description>
<year>19??</year>
@@ -78316,6 +78502,22 @@ to check why this is different -->
</part>
</software>
+ <software name="mc_sh300o" cloneof="mc_sh300">
+ <description>Super HIK 300 in 1 1993</description>
+ <year>19??</year>
+ <publisher>&lt;pirate&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="bmc_hik300" />
+ <feature name="pcb" value="BMC-SUPERHIK-300IN1" />
+ <dataarea name="chr" size="65536">
+ <rom name="1993 super hik 300-in-1 (anim splash, protected, no rev)[p1][!].chr" size="65536" crc="4b5299dd" sha1="5da2c66a289e65ef3c4af25d23b5cd5739762616" offset="00000" status="baddump" />
+ </dataarea>
+ <dataarea name="prg" size="131072">
+ <rom name="1993 super hik 300-in-1 (anim splash, protected, no rev)[p1][!].prg" size="131072" crc="65d87329" sha1="b75f12fda544d30dafb477908acd9d29b2af91f0" offset="00000" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="mc_sh4a">
<description>Super HIK 4 in 1 (S4020)</description>
<year>19??</year>
@@ -78981,7 +79183,7 @@ that the real dumps might surface -->
<feature name="slot" value="onebus" />
<feature name="pcb" value="UNL-OneBus" />
<dataarea name="prg" size="4194304">
- <rom name="ic1.prg" size="4194304" crc="de76f71f" sha1="ff6b37a76c6463af7ae901918fc008b4a2863951" offset="0" status="baddump" />
+ <rom name="ic1.prg" size="4194304" crc="de76f71f" sha1="ff6b37a76c6463af7ae901918fc008b4a2863951" offset="0" />
</dataarea>
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
@@ -78997,7 +79199,41 @@ that the real dumps might surface -->
<feature name="slot" value="onebus" />
<feature name="pcb" value="UNL-OneBus" />
<dataarea name="prg" size="4194304">
- <rom name="ic1_ver2.prg" size="4194304" crc="b97a0dc7" sha1="bace32d73184df914113de5336e29a7a6f4c03fa" offset="0" status="baddump" />
+ <rom name="ic1_ver2.prg" size="4194304" crc="b97a0dc7" sha1="bace32d73184df914113de5336e29a7a6f4c03fa" offset="0" />
+ </dataarea>
+ <!-- 8k VRAM on cartridge -->
+ <dataarea name="vram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
+<!-- CoolBoy AEF-390 8bit Console, B8VPCBVer03 20130703 0401E2015897A -->
+ <software name="mc_8x6cb" supported="no">
+ <description>888888 in 1 (Coolboy AEF-390)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="onebus" />
+ <feature name="pcb" value="UNL-OneBus" />
+ <dataarea name="prg" size="4194304">
+ <rom name="888888-in-1 (coolboy aef-390 8bit console, b8vpcbver03 20130703 0401e2015897a)(unl)[u][!].prg" size="4194304" crc="ca4bd948" sha1="cfd6c0b03bb432de43d070100031b223c9ee7496" offset="00000" status="baddump" />
+ </dataarea>
+ <!-- 8k VRAM on cartridge -->
+ <dataarea name="vram" size="8192">
+ </dataarea>
+ </part>
+ </software>
+
+<!-- PXP2 8Bit Slim Station -->
+ <software name="mc_9x6ss" supported="no">
+ <description>999999 in 1 (PXP2 Slim Station)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <part name="cart" interface="nes_cart">
+ <feature name="slot" value="onebus" />
+ <feature name="pcb" value="UNL-OneBus" />
+ <dataarea name="prg" size="4194304">
+ <rom name="s29gl032.u3" size="4194304" crc="9f4194e8" sha1="bd2a356aea56188ea78169095cbbe603d00e0063" offset="00000" />
</dataarea>
<!-- 8k VRAM on cartridge -->
<dataarea name="vram" size="8192">
diff --git a/hash/osborne1.xml b/hash/osborne1.xml
index b4f6371a106..55132004944 100644
--- a/hash/osborne1.xml
+++ b/hash/osborne1.xml
@@ -1,51 +1,12 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
-<softwarelist name="osborne1" description="Osborne-1 floppies">
-
- <software name="osmosis" supported="no"><!-- boot error -->
- <description>Osmosis CP/M Disk Emulation System v1.0</description>
- <year>1983</year>
- <publisher>Osmosis Computer</publisher>
- <info name="release" value="198303??"/>
- <part name="flop1" interface="floppy_5_25">
- <feature name="disk_serial" value="1690" />
- <feature name="disk_label" value="Osmosis CP/M Disk Emulation System for the Osborne 1 Microcomputer" />
- <dataarea name="flop" size="3154">
- <rom name="osmo-emu.td0" size="3154" crc="5040c443" sha1="49fc78621b7a9356ebe9ed88fe8ceb1dd9befdbf" offset="0" />
- </dataarea>
- </part>
- </software>
- <software name="dddist" supported="no"><!-- boot error -->
- <description>Double Density Distribution v1.4</description>
- <year>1982</year>
- <publisher>Osmosis Computer</publisher>
- <info name="release" value="198210??"/>
- <part name="flop1" interface="floppy_5_25">
- <feature name="disk_serial" value="2121" />
- <feature name="disk_label" value="Double Density Distribution" />
- <dataarea name="flop" size="834">
- <rom name="osmos-dd.td0" size="834" crc="8b47a452" sha1="1a4746512678b498dce28f28f96396ba31043ccc" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="rt60a" supported="no"><!-- boot error -->
- <description>RT-60A Real Time Clock Software v2.7</description><!-- for the RT-60A Real Time Clock, rom dump needed -->
- <year>19??</year>
- <publisher>JG Communications</publisher>
- <part name="flop1" interface="floppy_5_25">
- <feature name="disk_label" value="RT-60A Software" />
- <dataarea name="flop" size="13793">
- <rom name="rt-60a.td0" size="13793" crc="241b2497" sha1="1385701061152202db14550f1aad6cd4b190286f" offset="0" />
- </dataarea>
- </part>
- </software>
+<softwarelist name="osborne1" description="Osborne-1 floppies">
- <software name="amcall" supported="no">
- <description>Auto MicroCALL Communications Program</description>
+ <software name="amcall">
+ <description>AMCALL (v2.06)</description>
<year>1982</year>
- <publisher>MicroCALL SERVICES</publisher>
+ <publisher>MicroCALL Services</publisher>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="40392">
<rom name="os1mcal.td0" size="40392" crc="ee61a8e9" sha1="1ad5d000e1865ebf7118cbd2fbeee581b3ad226f" offset="0" />
@@ -53,10 +14,11 @@
</part>
</software>
- <software name="amcalla" cloneof="amcall" supported="no"><!-- boot error -->
- <description>AMCALL v2.06 (Alt)</description>
+ <software name="amcalla" cloneof="amcall">
+ <description>AMCALL (v2.06, Alt)</description>
<year>1982</year>
<publisher>MicroCALL Services</publisher>
+ <info name="usage" value="Requires CP/M disk in drive A"/>
<part name="flop1" interface="floppy_5_25">
<feature name="disk_serial" value="1113" />
<feature name="part_number" value="2B50002-00" />
@@ -79,10 +41,11 @@
</part>
</software>
- <software name="mileston" supported="no"><!-- boot error -->
- <description>Milestone v1.09</description>
+ <software name="mileston">
+ <description>Milestone (Rev 1.09)</description>
<year>1981</year>
<publisher>Organic Software</publisher>
+ <info name="usage" value="Requires CP/M disk in drive A"/>
<part name="flop1" interface="floppy_5_25">
<feature name="disk_serial" value="302997" />
<feature name="part_number" value="2G011501-00" />
@@ -99,10 +62,11 @@
</part>
</software>
- <software name="interrog" supported="no"><!-- boot error -->
+ <software name="interrog">
<description>Interrogator</description>
<year>1984</year>
<publisher>Dysan</publisher>
+ <info name="usage" value="Requires CP/M disk in drive A"/>
<part name="flop1" interface="floppy_5_25">
<feature name="disk_label" value="Drive Diagnostic Program" />
<dataarea name="flop" size="35037">
@@ -111,10 +75,11 @@
</part>
</software>
- <software name="microlnk" supported="no"><!-- boot error -->
- <description>The Micro Link</description>
+ <software name="microlnk">
+ <description>The Micro Link (v2.3)</description>
<year>1981</year>
<publisher>Wordcraft</publisher>
+ <info name="usage" value="Requires CP/M disk in drive A"/>
<part name="flop1" interface="floppy_5_25">
<feature name="disk_serial" value="000835" />
<dataarea name="flop" size="6835">
@@ -123,8 +88,8 @@
</part>
</software>
- <software name="diag" supported="no"><!-- Bdos Err on A: Select -->
- <description>Diagnostics?</description>
+ <software name="sysconf">
+ <description>Osborne-1 System Confidence Test (v2.04)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
@@ -134,8 +99,20 @@
</part>
</software>
- <software name="sysconf" supported="no"><!-- cpm plus formatted? -->
- <description>Osborne-1 System Confidence Test v2.00</description>
+ <software name="sysconfa" cloneof="sysconf">
+ <description>Osborne-1 System Confidence Test (v2.04, Alt)</description>
+ <year>19??</year>
+ <publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Requires CP/M disk in drive A"/>
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="46760">
+ <rom name="os1dias.td0" size="46760" crc="04b4bec8" sha1="d764df88e9f18ca67823f41797bd536e2d4cc606" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sysconfb" cloneof="sysconf" supported="no"> <!-- cpm plus formatted? -->
+ <description>Osborne-1 System Confidence Test (v2.00)</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="flop1" interface="floppy_5_25">
@@ -145,8 +122,8 @@
</part>
</software>
- <software name="cpm">
- <description>CP/M for Osborne I v2.20</description>
+ <software name="actcpm">
+ <description>60K CP/M vers 2.20 for Osborne </description>
<year>19??</year>
<publisher>Australian Computer &amp; Telecommunications</publisher>
<part name="flop1" interface="floppy_5_25">
@@ -156,8 +133,8 @@
</part>
</software>
- <software name="basic" supported="no">
- <description>Osborne 1 BASIC</description>
+ <software name="basic80">
+ <description>BASIC-80 (Rev. 5.21)</description>
<year>1981</year>
<publisher>Microsoft</publisher>
<info name="release" value="19810529"/>
@@ -168,12 +145,11 @@
</part>
</software>
- <software name="dbase2" supported="no">
- <description>dBase II</description>
+ <software name="dbase2">
+ <description>dBase II (v2.3)</description>
<year>1982</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="release" value="19820106"/>
- <info name="version" value="2.3" />
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="56706">
<rom name="os1dbase.td0" size="56706" crc="1266f67c" sha1="641c271af3681a00e7a2750e20d7fabcaa5adb9f" offset="0" />
@@ -181,20 +157,9 @@
</part>
</software>
- <software name="conftest" supported="no">
- <description>Osbourne 1 System Confidence Test</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
- <part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="46760">
- <rom name="os1dias.td0" size="46760" crc="04b4bec8" sha1="d764df88e9f18ca67823f41797bd536e2d4cc606" offset="0" />
- </dataarea>
- </part>
- </software>
-
- <software name="mdm740" supported="no">
+ <software name="mdm740">
<description>MDM740 modem program</description>
- <year>1985</year>
+ <year>1984</year>
<publisher>&lt;unknown&gt;</publisher>
<info name="programmer" value="Irvin M. Hoff"/>
<part name="flop1" interface="floppy_5_25">
@@ -204,29 +169,29 @@
</part>
</software>
- <software name="sysdisku" cloneof="sysdisk" supported="no">
- <description>Osborne 1 System Disk (upgrade rom?)</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="cpm22">
+ <description>60k CP/M v2.2</description>
+ <year>1981</year>
+ <publisher>Digital Research</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="57670">
- <rom name="os1sysd.td0" size="57670" crc="8b67b9cc" sha1="ab49f0ed731e197940b46bf79c6536a9f622d3bb" offset="0" />
+ <dataarea name="flop" size="49640">
+ <rom name="os1syss.td0" size="49640" crc="47fcb5a7" sha1="287c56f0083303768eea526c98a098b04f0749be" offset="0" />
</dataarea>
</part>
</software>
- <software name="sysdisk" supported="no">
- <description>Osborne 1 System Disk</description>
- <year>19??</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="cpm22a" cloneof="cpm22">
+ <description>60k CP/M v2.2 (Alt)</description>
+ <year>1981</year>
+ <publisher>Digital Research</publisher>
<part name="flop1" interface="floppy_5_25">
- <dataarea name="flop" size="49640">
- <rom name="os1syss.td0" size="49640" crc="47fcb5a7" sha1="287c56f0083303768eea526c98a098b04f0749be" offset="0" />
+ <dataarea name="flop" size="57670">
+ <rom name="os1sysd.td0" size="57670" crc="8b67b9cc" sha1="ab49f0ed731e197940b46bf79c6536a9f622d3bb" offset="0" />
</dataarea>
</part>
</software>
- <software name="utils" supported="no">
+ <software name="utils">
<description>Utilities</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
@@ -237,10 +202,11 @@
</part>
</software>
- <software name="xutils" supported="no">
- <description>Extended Utilities</description><!-- Bdos Err on A: Select -->
+ <software name="xutils">
+ <description>Extended Utilities</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="usage" value="Requires CP/M disk in drive A"/>
<part name="flop1" interface="floppy_5_25">
<dataarea name="flop" size="35382">
<rom name="os1xutls.td0" size="35382" crc="630d7091" sha1="a8bc164cf8cb4f5fba49422ac10447ecacbb60dd" offset="0" />
@@ -248,8 +214,8 @@
</part>
</software>
- <software name="wordstar" supported="no">
- <description>Wordstar</description>
+ <software name="wordstar">
+ <description>Wordstar (rel. 2.26)</description>
<year>1981</year>
<publisher>Micropro International</publisher>
<part name="flop1" interface="floppy_5_25">
@@ -259,7 +225,7 @@
</part>
</software>
- <software name="blank" supported="no">
+ <software name="blank">
<description>Osborne 1 blank disk</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
@@ -269,4 +235,49 @@
</dataarea>
</part>
</software>
+
+ <!-- how are these used? maybe they are bad dumps? -->
+
+ <software name="osmosis" supported="no">
+ <description>Osmosis CP/M Disk Emulation System (v1.0)</description>
+ <year>1983</year>
+ <publisher>Osmosis Computer</publisher>
+ <info name="release" value="198303??"/>
+
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="disk_serial" value="1690" />
+ <feature name="disk_label" value="Osmosis CP/M Disk Emulation System for the Osborne 1 Microcomputer" />
+ <dataarea name="flop" size="3154">
+ <rom name="osmo-emu.td0" size="3154" crc="5040c443" sha1="49fc78621b7a9356ebe9ed88fe8ceb1dd9befdbf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dddist" supported="no">
+ <description>Double Density Distribution (v1.4)</description>
+ <year>1982</year>
+ <publisher>Osmosis Computer</publisher>
+ <info name="release" value="198210??"/>
+
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="disk_serial" value="2121" />
+ <feature name="disk_label" value="Double Density Distribution" />
+ <dataarea name="flop" size="834">
+ <rom name="osmos-dd.td0" size="834" crc="8b47a452" sha1="1a4746512678b498dce28f28f96396ba31043ccc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rt60a" supported="no">
+ <description>RT-60A Real Time Clock Software (v2.7)</description> <!-- for the RT-60A Real Time Clock, rom dump needed -->
+ <year>19??</year>
+ <publisher>JG Communications</publisher>
+ <part name="flop1" interface="floppy_5_25">
+ <feature name="disk_label" value="RT-60A Software" />
+ <dataarea name="flop" size="13793">
+ <rom name="rt-60a.td0" size="13793" crc="241b2497" sha1="1385701061152202db14550f1aad6cd4b190286f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist> \ No newline at end of file
diff --git a/hash/psx.xml b/hash/psx.xml
index c58f7e2b157..6d77ae536d8 100644..100755
--- a/hash/psx.xml
+++ b/hash/psx.xml
@@ -1119,6 +1119,21 @@ A few comments on these:
</part>
</software>
+ <!-- boot ok -->
+ <software name="akagawaj" supported="no">
+ <description>Akagawa Jirou - Yasoukyoku 2 (Japan)</description>
+ <year>2001</year>
+ <publisher>Victor</publisher>
+ <info name="alt_title" value="夜想曲2"/>
+ <info name="serial" value="SLPS-03213" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="akagawa jirou - yasoukyoku 2 (japan) [slps-03213]" sha1="2469c7c6d8d69835aae534b91c59b03aa4d2dd96"/>
+ </diskarea>
+ </part>
+ </software>
+
<software name="alabamaj" supported="no">
<description>Pop de Cute na Shinri Test - Alabama (Japan)</description>
<year>2000</year>
@@ -2797,7 +2812,7 @@ A few comments on these:
<software name="chikichi" supported="no">
<description>Chiki Chiki Machine Mou Race - Wacky Races (Japan)</description>
<year>2001</year>
- <publisher>Hudson / Infogrames</publisher>
+ <publisher>Hudson&#47;Infogrames</publisher>
<info name="alt_title" value="ドタバタ爆笑レースゲーム チキチキマシン猛レース"/>
<info name="serial" value="SLPM-86845" />
<sharedfeat name="compatibility" value="NTSC-J"/>
@@ -8875,6 +8890,20 @@ A few comments on these:
</part>
</software>
+ <software name="nankuro" supported="no">
+ <description>Nankuro (SuperLite 1500 Series) (Japan)</description>
+ <year>1999</year>
+ <publisher>Success</publisher>
+ <info name="alt_title" value="SuperLite1500 EXTRAシリーズ Vol.2 ナンクロ"/>
+ <info name="serial" value="SLPS-02067" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="superlite 1500 extra series vol.02 - nankuro (japan) [slps-02067]" sha1="8f17ac2169a351af67437fd79cfd66a13e51062e"/>
+ </diskarea>
+ </part>
+ </software>
+
<!-- missing Disc 2? -->
<software name="natsuiro" supported="no">
<description>Natsuiro Kenjutsu Komachi (Limited Edition) (Japan) (Disc 1 Only)</description>
@@ -9478,8 +9507,9 @@ A few comments on these:
<software name="pacapaca" supported="no">
<description>Pacapaca Passion (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Produce!</publisher>
+ <info name="alt_title" value="パカパカパッション"/>
<info name="serial" value="SLPS-02122" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9491,8 +9521,9 @@ A few comments on these:
<software name="pacapac2" supported="no">
<description>Pacapaca Passion 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Produce!</publisher>
+ <info name="alt_title" value="パカパカパッション2"/>
<info name="serial" value="SLPS-02720" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9504,8 +9535,9 @@ A few comments on these:
<software name="pachipac" supported="no">
<description>Pachi Pachi Saga (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>TEN Institute</publisher>
+ <info name="alt_title" value="パチパチサーガ"/>
<info name="serial" value="SLPS-00288" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9516,9 +9548,10 @@ A few comments on these:
</software>
<software name="psao5" supported="no">
- <description>Pachi-Slot Aruze Oukoku 5 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pachi-Slot Aruze Oukoku 5 - Slotmachine Simulator (Japan)</description>
+ <year>2001</year>
+ <publisher>Aruze</publisher>
+ <info name="alt_title" value="パチスロ アルゼ王国5"/>
<info name="serial" value="SLPS-03280" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9530,8 +9563,9 @@ A few comments on these:
<software name="pstbk" supported="no">
<description>Pachi-Slot Teiou - Battle Knight &amp; Atlantis Doom (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王〜バトルナイト・アトランチスドーム〜"/>
<info name="serial" value="SLPS-03108" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9542,9 +9576,10 @@ A few comments on these:
</software>
<software name="pststwis" supported="no">
- <description>Pachi-Slot Teiou - Shimauta-30 - Twiste - Nangoku Monogarari-30 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pachi-Slot Teiou - Twist - Shimauta 30 - Nankoku Monogatari (Japan)</description>
+ <year>2002</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王〜島唄-30・ツイスト・南国物語-30〜"/>
<info name="serial" value="SLPS-03442" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9555,9 +9590,10 @@ A few comments on these:
</software>
<software name="pst2" supported="no">
- <description>Pachi-Slot Teiou 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pachi-Slot Teiou 2 - Kagetsu - 2 Pair - Beaver X (Japan)</description>
+ <year>1999</year>
+ <publisher>Mecko</publisher>
+ <info name="alt_title" value="パチスロ帝王II 花月・ツーペア・マイマイ"/>
<info name="serial" value="SLPS-02217" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9568,9 +9604,10 @@ A few comments on these:
</software>
<software name="pst3" supported="no">
- <description>Pachi-Slot Teiou 3 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pachi-Slot Teiou 3 - Sea Master - Epsilon R - Wai Wai Pulsa (Japan)</description>
+ <year>1999</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王3"/>
<info name="serial" value="SLPS-02413" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9581,9 +9618,10 @@ A few comments on these:
</software>
<software name="pst6" supported="no">
- <description>Pachi-Slot Teiou 6 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description> Pachi-Slot Teiou 6 - Kung Fu Lady - BangBang - Prelude 2 (Japan)</description>
+ <year>2000</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王6"/>
<info name="serial" value="SLPS-02657" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9595,8 +9633,9 @@ A few comments on these:
<software name="pst7" supported="no">
<description>Pachi-Slot Teiou 7 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王7 メーカー推奨マニュアル1 〜ビートザドラゴン2・ルパン三世・ホッドロッドクィーン〜"/>
<info name="serial" value="SLPS-02991" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9607,9 +9646,10 @@ A few comments on these:
</software>
<software name="pstmsm3" supported="no">
- <description>Pachi-Slot Teiou Maker Suishou Manual 3 - I'm Angel - White 2 &amp; Blue 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description> Pachi-Slot Teiou - Maker Suishou Manual 3 - I'm Angel White 2 &amp; Blue 2 (Japan)</description>
+ <year>2001</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル3 アイムエンジェル〜ホワイト2&amp;ブルー2〜"/>
<info name="serial" value="SLPS-03130" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9620,9 +9660,10 @@ A few comments on these:
</software>
<software name="pstmsm5" supported="no">
- <description>Pachi-Slot Teiou Maker Suishou Manual 5 - Race Queen 2 - Tomcat (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pachi-Slot Teiou - Maker Suishou Manual 5 - Race Queen 2 - Tomcat (Japan)</description>
+ <year>2001</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル5 〜レースクイーン2・トムキャット〜"/>
<info name="serial" value="SLPS-03245" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9634,8 +9675,9 @@ A few comments on these:
<software name="pstmsm6" supported="no">
<description>Pachi-Slot Teiou Maker Suishou Manual 6 - Takarabune (Japan)</description>
- <year>199?</year>
+ <year>2001</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル6 宝船"/>
<info name="serial" value="SLPS-03329" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9646,9 +9688,10 @@ A few comments on these:
</software>
<software name="pstmsm7" supported="no">
- <description>Pachi-Slot Teiou Maker Suishou Manual 7 - Trick Monster 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pachi-Slot Teiou - Maker Suishou Manual 7 - Trick Monster 2 (Japan)</description>
+ <year>2002</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王 メーカー推奨マニュアル7 トリックモンスター2"/>
<info name="serial" value="SLPS-03391" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9660,8 +9703,9 @@ A few comments on these:
<software name="pstmda" supported="no">
<description>Pachi-Slot Teiou Mini - Dr. A7 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="パチスロ帝王 Mini"/>
<info name="serial" value="SLPS-02114" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9673,8 +9717,9 @@ A few comments on these:
<software name="palmtown" supported="no">
<description>Palm Town (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>MyCom</publisher>
+ <info name="alt_title" value="ぱーむたうん"/>
<info name="serial" value="SLPS-01820" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9686,8 +9731,9 @@ A few comments on these:
<software name="panzerba" supported="no">
<description>Panzer Bandit (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="パンツァーバンディット"/>
<info name="serial" value="SLPS-00899" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9699,8 +9745,9 @@ A few comments on these:
<software name="panzerfr" supported="no">
<description>Panzer Front bis. (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Enterbrain</publisher>
+ <info name="alt_title" value="PANZER FRONT bis."/>
<info name="serial" value="SLPS-03111" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9712,8 +9759,9 @@ A few comments on these:
<software name="paranoia" supported="no">
<description>Paranoia Scape (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Mathilda</publisher>
+ <info name="alt_title" value="PARANOIA SCAPE"/>
<info name="serial" value="SLPS-01375" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9725,8 +9773,9 @@ A few comments on these:
<software name="parlorpr" supported="no">
<description>Parlor! Pro Jr. Collection (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Nihon Telenet</publisher>
+ <info name="alt_title" value="Parlor!PRO Jr. Collection"/>
<info name="serial" value="SLPS-02781" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9738,8 +9787,9 @@ A few comments on these:
<software name="parowars" supported="no">
<description>Paro Wars (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="パロウォーズ"/>
<info name="serial" value="SLPM-86016" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9751,8 +9801,9 @@ A few comments on these:
<software name="pdultram" supported="no">
<description>PD Ultraman Invader (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1995</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="PDウルトラマンインベーダー"/>
<info name="serial" value="SLPS-00195" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9763,9 +9814,10 @@ A few comments on these:
</software>
<software name="pepsiman" supported="no">
- <description>Pepsiman The Running Hero (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pepsiman (Japan)</description>
+ <year>1999</year>
+ <publisher>KID</publisher>
+ <info name="alt_title" value="ペプシマン"/>
<info name="serial" value="SLPS-01762" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9776,9 +9828,10 @@ A few comments on these:
</software>
<software name="perfectf" supported="no">
- <description>Perfect Fishing - Iso Zuri (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Perfect Fishing - Rock Fishing (Japan)</description>
+ <year>2000</year>
+ <publisher>Seta</publisher>
+ <info name="alt_title" value="パーフェクトフィッシング(磯釣り)"/>
<info name="serial" value="SLPS-02410" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9788,25 +9841,12 @@ A few comments on these:
</part>
</software>
- <!-- missing GFX -->
- <software name="petitcar" supported="no">
- <description>Petit Carat (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-01435" />
- <sharedfeat name="compatibility" value="NTSC-J"/>
- <part name="cdrom" interface="psx_cdrom">
- <diskarea name="cdrom">
- <disk name="petit carat (japan) [slps-01435]" sha1="d5a4844ddc86dbc9ac5a3b783a93e5dbf0c1bace"/>
- </diskarea>
- </part>
- </software>
-
<!-- boot OK -->
- <software name="picnicex" supported="no">
- <description>Picnic! Excellent (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="pikinecx" supported="no">
+ <description>Pikinya! Excellent(Japan)</description>
+ <year>1998</year>
+ <publisher>ASCII</publisher>
+ <info name="alt_title" value="ピキーニャ エクセレンテ"/>
<info name="serial" value="SLPS-01345" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9819,8 +9859,9 @@ A few comments on these:
<!-- boot OK -->
<software name="pinballf" supported="no">
<description>Pinball Fantasies Deluxe (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>VAP (NTV)</publisher>
+ <info name="alt_title" value="Pinball Fantasies DELUXE"/>
<info name="serial" value="SLPS-00482" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9832,8 +9873,9 @@ A few comments on these:
<software name="pitfall3" supported="no">
<description>Pitfall 3D - Beyond the Jungle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Victor</publisher>
+ <info name="alt_title" value="ピットフォール3D"/>
<info name="serial" value="SLPS-01669" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9845,8 +9887,9 @@ A few comments on these:
<software name="planetdo" supported="no">
<description>Planet Dob (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Hudson</publisher>
+ <info name="alt_title" value="PLANET DOB"/>
<info name="serial" value="SLPS-02111" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9857,9 +9900,10 @@ A few comments on these:
</software>
<software name="planetla" supported="no">
- <description>Planet Laika - Kasei Mokushiroku (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Planet Laika (Japan)</description>
+ <year>1999</year>
+ <publisher>Enix</publisher>
+ <info name="alt_title" value="PLANET LAIKA 火星黙示録"/>
<info name="serial" value="SLPM-86264" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9870,9 +9914,10 @@ A few comments on these:
</software>
<software name="pocketdi" supported="no">
- <description>Pocket Digimon World (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pocket DigimonWorld (Japan)</description>
+ <year>2000</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="ポケットデジモンワールド"/>
<info name="serial" value="SLPS-02800" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9883,9 +9928,10 @@ A few comments on these:
</software>
<software name="pocketwb" supported="no">
- <description>Pocket Digimon World - Wind Battle Disc (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pocket DigimonWorld - Wind Battle Disc (Japan)</description>
+ <year>2000</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="ポケットデジモンワールド ウイングバトルディスク"/>
<info name="serial" value="SLPS-02992" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9896,9 +9942,10 @@ A few comments on these:
</software>
<software name="pocketwc" supported="no">
- <description>Pocket Digimon World Cool &amp; Nature Battle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pocket DigimonWorld Cool &amp; Nature Battle Disc (Japan)</description>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="ポケットデジモンワールド クール&ネイチャー バトルディスク"/>
<info name="serial" value="SLPS-03146" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9910,8 +9957,9 @@ A few comments on these:
<software name="pocketfi" supported="no">
<description>Pocket Fighter (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Capcom</publisher>
+ <info name="alt_title" value="ポケットファイター"/>
<info name="serial" value="SLPS-01360" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9923,8 +9971,9 @@ A few comments on these:
<software name="pocketmu" supported="no">
<description>Pocket Muumuu (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="ポケットムームー"/>
<info name="serial" value="SCPS-10076" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9935,9 +9984,10 @@ A few comments on these:
</software>
<software name="poitters" supported="no">
- <description>Poitter's Point 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Poitter's Point 2 - Sodom no Inbou (Japan)</description>
+ <year>1998</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ポイッターズポイント2"/>
<info name="serial" value="SLPM-86061" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9949,8 +9999,9 @@ A few comments on these:
<software name="policena" supported="no">
<description>Policenauts - Private Collection (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ポリスノーツ プライベートコレクション"/>
<info name="serial" value="SLPS-00228" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9962,8 +10013,9 @@ A few comments on these:
<software name="popnmusi" supported="no">
<description>Pop'n Music - Disney Tunes (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ポップンミュージックディズニーチューンズ"/>
<info name="serial" value="SLPM-86670" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9976,8 +10028,9 @@ A few comments on these:
<!-- boot OK -->
<software name="popnpopj" supported="no">
<description>Pop'n Pop (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="ぽっぷんぽっぷ"/>
<info name="serial" value="SLPS-01636" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -9990,8 +10043,9 @@ A few comments on these:
<!-- black screen after logos -->
<software name="popntank" supported="no">
<description>Pop'n Tanks! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Enix</publisher>
+ <info name="alt_title" value="POPN TANKS"/>
<info name="serial" value="SLPM-86146" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10003,8 +10057,9 @@ A few comments on these:
<software name="potestas" supported="no">
<description>Potestas (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Nexus</publisher>
+ <info name="alt_title" value="ポテスタス"/>
<info name="serial" value="SLPS-00324" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10016,8 +10071,9 @@ A few comments on these:
<software name="powersho" supported="no">
<description>Power Shovel ni Norou!! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="パワーショベルに乗ろう!!"/>
<info name="serial" value="SLPM-86629" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10029,8 +10085,9 @@ A few comments on these:
<software name="powersta" supported="no">
<description>Power Stakes (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Aques</publisher>
+ <info name="alt_title" value="パワーステークス"/>
<info name="serial" value="SLPM-86032" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10042,8 +10099,9 @@ A few comments on these:
<software name="powersg1" supported="no">
<description>Power Stakes Grade 1 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Aques</publisher>
+ <info name="alt_title" value="パワーステークス Grade1"/>
<info name="serial" value="SLPM-86050" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10055,8 +10113,9 @@ A few comments on these:
<software name="princess" supported="no">
<description>Princess Maker - Go! Go! Princess (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>NineLives</publisher>
+ <info name="alt_title" value="プリンセスメーカー GO!GO!プリンセス"/>
<info name="serial" value="SLPS-01505" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10068,8 +10127,9 @@ A few comments on these:
<software name="prismcou" supported="no">
<description>Prism Court (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>FPS</publisher>
+ <info name="alt_title" value="プリズムコート"/>
<info name="serial" value="SLPS-01226" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10081,8 +10141,9 @@ A few comments on these:
<software name="prisoner" supported="no">
<description>Prisoner (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Mainichi</publisher>
+ <info name="alt_title" value="PRISONER&#40;プリズナー&#41;"/>
<info name="serial" value="SLPS-02387" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10094,8 +10155,9 @@ A few comments on these:
<software name="promahpl" supported="no">
<description>Pro Mahjong Kiwame Plus (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Athena</publisher>
+ <info name="alt_title" value="プロ麻雀 極PLUS"/>
<info name="serial" value="SLPS-00402" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10107,8 +10169,9 @@ A few comments on these:
<software name="promahjo" supported="no">
<description>Pro Mahjong Kiwame Tengensenhen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Athena</publisher>
+ <info name="alt_title" value="プロ麻雀 極 天元戦編"/>
<info name="serial" value="SLPS-02347" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10120,8 +10183,9 @@ A few comments on these:
<software name="prowrest" supported="no">
<description>Pro Wrestling Sengokuden - Hyper Tag Match (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>KSS</publisher>
+ <info name="alt_title" value="プロレス戦国伝 〜HYPER TAG MATCH〜"/>
<info name="serial" value="SLPS-01006" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10132,9 +10196,10 @@ A few comments on these:
</software>
<software name="prologic" supported="no">
- <description>Pro-Logic Mah-Jong Hai-Shin (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pro Logic Mahjong Hai-Shin (Japan)</description>
+ <year>1996</year>
+ <publisher>Aques</publisher>
+ <info name="alt_title" value="プロロジック麻雀 牌神"/>
<info name="serial" value="SLPM-86018" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10144,10 +10209,26 @@ A few comments on these:
</part>
</software>
+ <!-- missing GFX -->
+ <software name="puchicar" supported="no">
+ <description>Puchi Carat (Japan)</description>
+ <year>1998</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="プチカラット"/>
+ <info name="serial" value="SLPS-01435" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="petit carat (japan) [slps-01435]" sha1="d5a4844ddc86dbc9ac5a3b783a93e5dbf0c1bace"/>
+ </diskarea>
+ </part>
+ </software>
+
<software name="pukunpaj" supported="no">
- <description>Pukunpa - Joshi Kousei no Houkago... (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Pukunpa Joshikousei No Houkago... (Japan)</description>
+ <year>1996</year>
+ <publisher>Athena</publisher>
+ <info name="alt_title" value="ぷくんパ 女子高生の放課後…"/>
<info name="serial" value="SLPS-00409" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10160,8 +10241,9 @@ A few comments on these:
<!-- boot OK -->
<software name="puyopubx" supported="no">
<description>Puyo Puyo Box (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Compile</publisher>
+ <info name="alt_title" value="ぷよぷよBOX"/>
<info name="serial" value="SLPS-03114" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10171,10 +10253,11 @@ A few comments on these:
</part>
</software>
- <software name="puypuyoo" supported="no">
- <description>Puyo Puyoon - Car-Kun to Issho (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="puyopuy4" supported="no">
+ <description>Puyo Puyo 4 - Car-Kun to Issho (Japan)</description>
+ <year>1999</year>
+ <publisher>Compile</publisher>
+ <info name="alt_title" value="ぷよぷよ〜ん カーくんといっしょ"/>
<info name="serial" value="SLPS-02412" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10186,9 +10269,10 @@ A few comments on these:
<!-- boot OK -->
<software name="puzzlear" supported="no">
- <description>Puzzle Arena Toshinden (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Puzzle Arena To Shin Den (Japan)</description>
+ <year>1997</year>
+ <publisher>Takara</publisher>
+ <info name="alt_title" value="パズルアリーナ闘神伝"/>
<info name="serial" value="SLPS-00879" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10201,8 +10285,9 @@ A few comments on these:
<!-- boot ok -->
<software name="pbobl3dx" supported="no">
<description>Puzzle Bobble 3 DX (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="パズルボブル3デラックス"/>
<info name="serial" value="SLPS-01065" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10215,8 +10300,9 @@ A few comments on these:
<!-- boot ok -->
<software name="pbobl4" supported="no">
<description>Puzzle Bobble 4 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="パズルボブル4"/>
<info name="serial" value="SLPS-01492" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10228,9 +10314,10 @@ A few comments on these:
<!-- boot ok, must skip fmv before it begins or black screen -->
<software name="qix2000j" supported="no">
- <description>Qix 2000 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Qix 2000 (Superlite 1500 Series) (Japan)</description>
+ <year>2000</year>
+ <publisher>Success</publisher>
+ <info name="alt_title" value="SuperLite1500シリーズ クイックス2000"/>
<info name="serial" value="SLPM-86659" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10242,8 +10329,9 @@ A few comments on these:
<software name="quantumg" supported="no">
<description>Quantum Gate I - Akumu no Joshou (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Gaga</publisher>
+ <info name="alt_title" value="QUANTUM GATE 〜悪夢の序章〜"/>
<info name="serial" value="SLPS-00399" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10255,8 +10343,9 @@ A few comments on these:
<software name="quizchar" supported="no">
<description>Quiz Charaokedon! Toei Tokusatsu Hero Part 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="クイズキャラおけドン! 東映特撮ヒーローPART2"/>
<info name="serial" value="SLPS-02310" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10268,9 +10357,10 @@ A few comments on these:
<!-- boot ok -->
<software name="quizdara" supported="no">
- <description>Quiz Darake no Jinsei Game - Un to Atama de Daifugou (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Quiz Darake No Jinsei Game (Japan)</description>
+ <year>1997</year>
+ <publisher>Takara</publisher>
+ <info name="alt_title" value="クイズだらけの人生ゲーム 運と頭で大富豪!?"/>
<info name="serial" value="SLPS-02282" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10282,9 +10372,10 @@ A few comments on these:
<!-- hang starting new game -->
<software name="quizmill" supported="no">
- <description>Quiz Millionaire (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Quiz$Millionaire (Japan)</description>
+ <year>2001</year>
+ <publisher>Eidos</publisher>
+ <info name="alt_title" value="クイズ$ミリオネア"/>
<info name="serial" value="SLPS-03364" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10297,8 +10388,9 @@ A few comments on these:
<!-- boot ok -->
<software name="quovadis" supported="no">
<description>Quo Vadis - Iberukatsu Seneki (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Glams</publisher>
+ <info name="alt_title" value="クオバディス 〜イベルカーツ戦役〜"/>
<info name="serial" value="SLPS-00733" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10310,9 +10402,10 @@ A few comments on these:
<!-- boot OK -->
<software name="racedriv" supported="no">
- <description>Race Drivin' a Go! Go! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Race Driving' A Go! Go! (Japan)</description>
+ <year>1996</year>
+ <publisher>Time Warner</publisher>
+ <info name="alt_title" value="RACE DRIVIN' a GO! GO!"/>
<info name="serial" value="SLPS-00167" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10325,8 +10418,9 @@ A few comments on these:
<!-- boot ok -->
<software name="rakugaki" supported="no">
<description>Rakugaki Showtime (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Enix</publisher>
+ <info name="alt_title" value="ラクガキショータイム"/>
<info name="serial" value="SLPM-86272" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10339,8 +10433,9 @@ A few comments on these:
<!-- boot ok -->
<software name="rallydea" supported="no">
<description>Rally de Africa (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Prism Arts</publisher>
+ <info name="alt_title" value="ラリー・デ・アフリカ"/>
<info name="serial" value="SLPS-01601" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10353,8 +10448,9 @@ A few comments on these:
<!-- boot ok -->
<software name="rallydee" supported="no">
<description>Rally de Europe (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Prism Arts</publisher>
+ <info name="alt_title" value="ラリー・デ・ヨーロッパ"/>
<info name="serial" value="SLPS-02679" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10366,9 +10462,10 @@ A few comments on these:
<!-- black screen after some movies -->
<software name="ramichan" supported="no">
- <description>Ramichan no Odeo Surogoku - Keio Yugekitai Gaiden (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Rami-Chan No Ooeto Surogoku&#58; Keio Yugekitai Gaiden (Japan)</description>
+ <year>1998</year>
+ <publisher>Victor</publisher>
+ <info name="alt_title" value="蘭未ちゃんの大江戸すごろく"/>
<info name="serial" value="SLPS-01546" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10380,9 +10477,10 @@ A few comments on these:
<!-- boot ok -->
<software name="ranma12b" supported="no">
- <description>Ranma 1-2 - Battle Renaissance (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Ranma 1&#47;2 Battle Renaissance (Japan)</description>
+ <year>1996</year>
+ <publisher>Shogakukan</publisher>
+ <info name="alt_title" value="らんま1&#47;2 バトルルネッサンス"/>
<info name="serial" value="SLPS-00522" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10395,8 +10493,9 @@ A few comments on these:
<!-- boot ok -->
<software name="raytrace" supported="no">
<description>Ray Tracers (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="レイ・トレーサー"/>
<info name="serial" value="SLPS-00098" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10409,8 +10508,9 @@ A few comments on these:
<!-- hangs at company logo -->
<software name="raymanja" supported="no">
<description>Rayman (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1995</year>
+ <publisher>Ubisoft</publisher>
+ <info name="alt_title" value="ユービーアイ ソフト&#40;株&#41;"/>
<info name="serial" value="SLPS-00026" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10423,8 +10523,9 @@ A few comments on these:
<!-- boot ok -->
<software name="readymai" supported="no">
<description>Ready Maid (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Princess</publisher>
+ <info name="alt_title" value="れでぃめいど"/>
<info name="serial" value="SLPM-87157" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10437,8 +10538,9 @@ A few comments on these:
<!-- boot OK -->
<software name="rbffsdm" supported="no">
<description>Real Bout Garou Densetsu Special - Dominated Mind (Limited Edition) (Japan) (Disc 1)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>SNK</publisher>
+ <info name="alt_title" value="リアルバウト餓狼伝説スペシャル DOMINATED MIND 限定版"/>
<info name="serial" value="SLPM-86090, SLPM-86091" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -10456,8 +10558,9 @@ A few comments on these:
<!-- boot OK -->
<software name="realrobo" supported="no">
<description>Real Robots - Final Attack (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="リアルロボッツ ファイナルアタック"/>
<info name="serial" value="SLPS-01125" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10470,8 +10573,9 @@ A few comments on these:
<!-- boot OK -->
<software name="reciproh" supported="no">
<description>Recipro Heat 5000 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Xing</publisher>
+ <info name="alt_title" value="レシプロヒート5000"/>
<info name="serial" value="SLPS-00744" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10484,8 +10588,9 @@ A few comments on these:
<!-- boot ok, needs gun -->
<software name="rsbhdemo" supported="no">
<description>Rescue Shot Bubibo &amp; BioHazard - Gun Survivor (Demo) (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>200?</year>
+ <publisher>SCEI</publisher>
+ <info name="alt_title" value="レスキューショットブービーぼー&バイオハザードガンサバイバー ガンコン"/>
<info name="serial" value="SLPM-80522" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10498,8 +10603,9 @@ A few comments on these:
<!-- black screen, MESS crash -->
<software name="retzork" supported="no">
<description>Return to Zork (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="リターン・トゥ・ゾーク"/>
<info name="serial" value="SLPS-00192, SLPS-00193" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -10517,8 +10623,9 @@ A few comments on these:
<!-- boot ok -->
<software name="ridegear" supported="no">
<description>Ridegear Guybrave II (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Axela</publisher>
+ <info name="alt_title" value="雷弩機兵ガイブレイブII"/>
<info name="serial" value="SLPS-01643, SLPS-01644" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -10536,8 +10643,9 @@ A few comments on these:
<!-- boot ok -->
<software name="rikujoub" supported="no">
<description>Rikujou Boueitai Maochan (Deluxe Pack) (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2003</year>
+ <publisher>Marvelous</publisher>
+ <info name="alt_title" value="陸上防衛隊まおちゃん DXパック"/>
<info name="serial" value="SLPM-87198" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10550,8 +10658,9 @@ A few comments on these:
<!-- black screen after company logos -->
<software name="riotstar" supported="no">
<description>Riot Stars (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Hect</publisher>
+ <info name="alt_title" value="ライアット・スターズ"/>
<info name="serial" value="SLPS-00829" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10563,9 +10672,10 @@ A few comments on these:
<!-- company logos shown, broken into incorrect parts, then hang -->
<software name="riseofro" supported="no">
- <description>Rise of Robots 2 - Resurection (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Rise of Robots 2 - Resurrection (Japan)</description>
+ <year>1996</year>
+ <publisher>Acclaim</publisher>
+ <info name="alt_title" value="ライズ オブ ザ ロボット 2"/>
<info name="serial" value="SLPS-00259" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10578,8 +10688,9 @@ A few comments on these:
<!-- boot ok -->
<software name="risingza" supported="no">
<description>Rising Zan - The Samurai Gunman (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>UEP</publisher>
+ <info name="alt_title" value="RISING ZAN"/>
<info name="serial" value="SLPS-01691" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10590,9 +10701,10 @@ A few comments on these:
</software>
<software name="robinllo" supported="no">
- <description>Robin Lloyd no Bouken (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Robin Lloyd no Daibouken (Japan)</description>
+ <year>2000</year>
+ <publisher>Gust</publisher>
+ <info name="alt_title" value="ロビン・ロイドの冒険"/>
<info name="serial" value="SLPS-02501" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10603,22 +10715,24 @@ A few comments on these:
</software>
<software name="robotxro" supported="no">
- <description>Robot X Robot (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-02231" />
+ <description>Robot-X-Robot (Japan)</description>
+ <year>1999</year>
+ <publisher>Nemesys</publisher>
+ <info name="alt_title" value="ロボット×ロボット"/>
+ <info name="serial" value="SLPS-02331" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
- <disk name="robot x robot (japan) [slps-02231]" sha1="fd0813351a8bbcf57cecb2e3f5481d88592140fe"/>
+ <disk name="robot x robot (japan) [slps-02331]" sha1="fd0813351a8bbcf57cecb2e3f5481d88592140fe"/>
</diskarea>
</part>
</software>
<software name="roommate" supported="no">
<description>Roommate - Inoue Ryoko (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Datam Polystar</publisher>
+ <info name="alt_title" value="ルームメイト〜井上涼子〜"/>
<info name="serial" value="SLPS-02140" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10631,8 +10745,9 @@ A few comments on these:
<!-- boot OK -->
<software name="runningh" supported="no">
<description>Running High (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>REX</publisher>
+ <info name="alt_title" value="ランニング・ハイ"/>
<info name="serial" value="SLPS-00751" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10642,10 +10757,25 @@ A few comments on these:
</part>
</software>
- <software name="sakkyoku" supported="no">
- <description>Sakkyoku Surundamon - Dance Remix-hen (Japan)</description>
- <year>199?</year>
+ <software name="soundqub" supported="no">
+ <description>S.Q. - Sound Qube (Japan)</description>
+ <year>1998</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="alt_title" value="S.Q. サウンドキューブ"/>
+ <info name="serial" value="SLPS-01309" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="sound qube (japan) [slps-01309]" sha1="54139ab64577aec717ca75daa26d87b67887a673"/>
+ </diskarea>
+ </part>
+ </software>
+
+ <software name="sakkyoku" supported="no">
+ <description>Sakkyoku Surundamon - Dance Remix (Japan)</description>
+ <year>2000</year>
+ <publisher>Ving</publisher>
+ <info name="alt_title" value="作曲するんだもん ダンスリミックス編"/>
<info name="serial" value="SLPS-02808" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10657,8 +10787,9 @@ A few comments on these:
<software name="sakumash" supported="no">
<description>Sakuma-shiki Jinsei Game (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Takara</publisher>
+ <info name="alt_title" value="さくま式人生ゲーム"/>
<info name="serial" value="SLPS-01740" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10670,8 +10801,9 @@ A few comments on these:
<software name="salaryma" supported="no">
<description>Salary Man Champ - Tatakau Salary Man (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Success</publisher>
+ <info name="alt_title" value="サラリーマンチャンプ たたかうサラリーマン"/>
<info name="serial" value="SLPM-86820" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10682,9 +10814,10 @@ A few comments on these:
</software>
<software name="salarytg" supported="no">
- <description>Salary Man Kintaro - The Game (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Salaryman Kintarou - The Game (Japan)</description>
+ <year>2000</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="サラリーマン金太郎 THE GAME"/>
<info name="serial" value="SLPS-02806" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10696,8 +10829,9 @@ A few comments on these:
<software name="salarysm" supported="no">
<description>Salary Man Settai Mahjong (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Visit</publisher>
+ <info name="alt_title" value="サラリーマン接待麻雀"/>
<info name="serial" value="SLPS-03175" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10708,9 +10842,10 @@ A few comments on these:
</software>
<software name="samuraid" supported="no">
- <description>Samurai Deeper Kyo (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Samurai Deeper Kyo (Limited Edition) (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="サムライディーパー キョウ"/>
<info name="serial" value="SLPS-03505" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10722,8 +10857,9 @@ A few comments on these:
<software name="samurais" supported="no">
<description>Samurai Spirits - Kenkaku Yubinan Pack (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>SNK</publisher>
+ <info name="alt_title" value="サムライスピリッツ 剣客指南パック"/>
<info name="serial" value="SLPS-00647" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10735,9 +10871,10 @@ A few comments on these:
<!-- odd gfx problems -->
<software name="samsho3" supported="no">
- <description>Samurai Spirits - Zankurou Musouken (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Samurai Spirits - Zankurou Musouken (PlayStation the Best) (Japan)</description>
+ <year>1997</year>
+ <publisher>SNK</publisher>
+ <info name="alt_title" value="サムライスピリッツ 斬紅郎無双剣 PlayStation the Best"/>
<info name="serial" value="SLPS-91024" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10749,8 +10886,9 @@ A few comments on these:
<software name="sangokus" supported="no">
<description>Sangokushi Eiketsuden (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="三國志英傑伝"/>
<info name="serial" value="SLPS-00309" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10760,10 +10898,25 @@ A few comments on these:
</part>
</software>
+ <software name="sangokou" supported="no">
+ <description>Sangokushi Koumeiden (Japan)</description>
+ <year>1997</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="三國志孔明伝"/>
+ <info name="serial" value="SLPS-00688" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="sangokushi koumeiden (japan) [slps-00688]" sha1="2719dea19adbb7f9adf3ed4325cc7254bd09c1d4"/>
+ </diskarea>
+ </part>
+ </software>
+
<software name="sangoku2" supported="no">
<description>Sangokushi II (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="三國志II"/>
<info name="serial" value="SLPS-01596" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10775,8 +10928,9 @@ A few comments on these:
<software name="sangoku3" supported="no">
<description>Sangokushi III (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="三國志III"/>
<info name="serial" value="SLPM-86747" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10786,23 +10940,11 @@ A few comments on these:
</part>
</software>
- <software name="sangokou" supported="no">
- <description>Sangokushi Koumeiden (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-00688" />
- <sharedfeat name="compatibility" value="NTSC-J"/>
- <part name="cdrom" interface="psx_cdrom">
- <diskarea name="cdrom">
- <disk name="sangokushi koumeiden (japan) [slps-00688]" sha1="2719dea19adbb7f9adf3ed4325cc7254bd09c1d4"/>
- </diskarea>
- </part>
- </software>
-
<software name="sangokrt" supported="no">
<description>Sangokushi Returns (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="三國志リターンズ"/>
<info name="serial" value="SLPS-00474" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10814,8 +10956,9 @@ A few comments on these:
<software name="sangoku5" supported="no">
<description>Sangokushi V (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="三国志5繁体中文版"/>
<info name="serial" value="SCPS-45128" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10827,8 +10970,9 @@ A few comments on these:
<software name="sangoku6" supported="no">
<description>Sangokushi VI (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="三國志VI"/>
<info name="serial" value="SLPM-86129" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10839,9 +10983,10 @@ A few comments on these:
</software>
<software name="sanyopac" supported="no">
- <description>Sanyo Pachinko Paradise 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Sanyo Pachinko Paradise 2 - Umi Monogatari Special (Japan)</description>
+ <year>1999</year>
+ <publisher>Irem</publisher>
+ <info name="alt_title" value="三洋パチンコパラダイス2"/>
<info name="serial" value="SLPS-02389" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10853,8 +10998,9 @@ A few comments on these:
<software name="sarugety" supported="no">
<description>Saru! Get You! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="サルゲッチュ"/>
<info name="serial" value="SCPS-10091" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10866,8 +11012,9 @@ A few comments on these:
<software name="satellit" supported="no">
<description>Satelli TV (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Nippon Ichi</publisher>
+ <info name="alt_title" value="サテライTV"/>
<info name="serial" value="SLPS-01203" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10879,8 +11026,9 @@ A few comments on these:
<software name="satomino" supported="no">
<description>Satomi no Nazo (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Sound Technology Japan</publisher>
+ <info name="alt_title" value="里見の謎"/>
<info name="serial" value="SLPS-00613" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10891,9 +11039,10 @@ A few comments on these:
</software>
<software name="schrodin" supported="no">
- <description>Schrodinger no Neko - Die Katze von Schrodinger (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Schr&#246;dinger no Neko - Die Katze von Schr&#246;dinger (Japan)</description>
+ <year>1997</year>
+ <publisher>Takara</publisher>
+ <info name="alt_title" value="シュレディンガーの猫"/>
<info name="serial" value="SLPS-00780" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10904,9 +11053,10 @@ A few comments on these:
</software>
<software name="sdgkvm" supported="no">
- <description>SD Gundam Eiyuuden - Daikessen!! Knight vs. Musha (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>SD Gundam Eiyuuden Daikessen - Knight vs. Musha (Japan)</description>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SDガンダム英雄伝 大決戦!!騎士VS武者"/>
<info name="serial" value="SLPS-03145" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10917,9 +11067,10 @@ A few comments on these:
</software>
<software name="sdgggf" supported="no">
- <description>SD Gundam G-Generation F (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>SD Gundam G Generation-F (Limited Edition)(Japan)</description>
+ <year>2000</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SDガンダムG GENERATION-F(限定版)"/>
<info name="serial" value="SLPS-02900, SLPS-02901, SLPS-02902" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -10940,9 +11091,10 @@ A few comments on these:
</software>
<software name="sdgggfif" supported="no">
- <description>SD Gundam G-Generation F if (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>SD Gundam G - Generation-F.I.F (Japan)</description>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SDガンダム GGENERATION-F.I.F"/>
<info name="serial" value="SLPS-03195" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10953,9 +11105,10 @@ A few comments on these:
</software>
<software name="sdggg0" supported="no">
- <description>SD Gundam G-Generation Zero (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>SD Gundam G - Generation Zero (Japan)</description>
+ <year>1999</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SDガンダム ジージェネレーション・ゼロ"/>
<info name="serial" value="SLPS-02200, SLPS-02201, SLPS-02202" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -10977,8 +11130,9 @@ A few comments on these:
<software name="seabassf" supported="no">
<description>Seabass Fishing 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Victor</publisher>
+ <info name="alt_title" value="シーバス・フィッシング2"/>
<info name="serial" value="SLPS-00992" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -10989,9 +11143,10 @@ A few comments on these:
</software>
<software name="seikaino" supported="no">
- <description>Seikai no Monshou (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Seikai no Monshou (Crest of the Stars) (Japan)</description>
+ <year>2000</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="星界の紋章"/>
<info name="serial" value="SLPS-02323" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11001,10 +11156,25 @@ A few comments on these:
</part>
</software>
+ <software name="seikende" supported="no">
+ <description>Seiken Densetsu - Legend of Mana (Demo) (Japan)</description>
+ <year>1999</year>
+ <publisher>Squaresoft</publisher>
+ <info name="alt_title" value=""/>
+ <info name="serial" value="SCPS-45417" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="square's preview 5 (japan) (demo) [scps-45417]" sha1="2e84ab79573ce07bb78480a9d75d601e14d07895"/>
+ </diskarea>
+ </part>
+ </software>
+
<software name="seireish" supported="no">
- <description>Seirei Shoukan - Princess of Darkness (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Seirishoukan - Princess of Darkness (Japan)</description>
+ <year>1998</year>
+ <publisher>Shoeisha</publisher>
+ <info name="alt_title" value="精霊召喚 〜プリンセス オブ ダークネス〜"/>
<info name="serial" value="SLPS-01271" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11016,8 +11186,9 @@ A few comments on these:
<software name="sengokum" supported="no">
<description>Sengoku Mugen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="戦国夢幻"/>
<info name="serial" value="SLPS-03151" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11028,9 +11199,10 @@ A few comments on these:
</software>
<software name="senkaita" supported="no">
- <description>Senkai Taisen - TV Animation Senkaiden Houshin Engi yori (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Senkai Taisen TV Animation Senkaiden Houshin Engi Yori (Japan)</description>
+ <year>2000</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="仙界大戦 〜TVアニメーション仙界伝封神演義より〜"/>
<info name="serial" value="SLPS-02736" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11041,9 +11213,10 @@ A few comments on these:
</software>
<software name="senryaku" supported="no">
- <description>Senryaku Shidan - Tora! Tora! Tora! Rikusen-hen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Senryaku Shidan - Tora! Tora! Tora! Rikusenhen (Japan)</description>
+ <year>2000</year>
+ <publisher>DaZZ</publisher>
+ <info name="alt_title" value="戦略師団 トラ!トラ!トラ! 陸戦編"/>
<info name="serial" value="SLPS-02631" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11055,8 +11228,9 @@ A few comments on these:
<software name="sentimen" supported="no">
<description>Sentimental Graffiti (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>NEC</publisher>
+ <info name="alt_title" value="センチメンタルグラフティ"/>
<info name="serial" value="SLPS-03184" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11067,9 +11241,10 @@ A few comments on these:
</software>
<software name="sentouko" supported="no">
- <description>Sentou Kokka Kai Improved (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Sentou Kokka Kai - Improved (Japan)</description>
+ <year>1997</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="戦闘国家-改- IMPROVED"/>
<info name="serial" value="SCPS-10034" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11081,8 +11256,9 @@ A few comments on these:
<software name="shachoue" supported="no">
<description>Shachou Eiyuuden - The Eagle Shooting Heroes (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="射雕英雄传"/>
<info name="serial" value="SCPS-45510" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11093,9 +11269,10 @@ A few comments on these:
</software>
<software name="shibasu1" supported="no">
- <description>Shibasu 1-2-3 Destiny! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Shibas 1-2-3 Destiny! Unmei O Kaerusha! (Japan)</description>
+ <year>2000</year>
+ <publisher>Jaleco</publisher>
+ <info name="alt_title" value="シーバス 1-2-3"/>
<info name="serial" value="SLPS-01893" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11107,8 +11284,9 @@ A few comments on these:
<software name="shinmaso" supported="no">
<description>Shin Masoukishin - Panzer Warfare (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="真・魔装機神"/>
<info name="serial" value="SLPS-02319" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11120,8 +11298,9 @@ A few comments on these:
<software name="shinmega" supported="no">
<description>Shin Megami Tensei (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Atlus</publisher>
+ <info name="alt_title" value="真・女神転生"/>
<info name="serial" value="SLPS-03170" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11132,9 +11311,10 @@ A few comments on these:
</software>
<software name="shinsdse" supported="no">
- <description>Shin SD Sengokuden Kidou Musha Taisen [Limited Edition] (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Shin SD Sengokuden - Kidou Musha Taisen (Limited Edition) (Japan)</description>
+ <year>1996</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="新SD戦国伝 機動武者大戦(限定版)"/>
<info name="serial" value="SLPS-00576" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11147,8 +11327,9 @@ A few comments on these:
<!-- boot OK -->
<software name="shinthem" supported="no">
<description>Shin Theme Park (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="alt_title" value="新テーマパーク"/>
<info name="serial" value="SLPS-00810" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11160,8 +11341,9 @@ A few comments on these:
<software name="shinriga" supported="no">
<description>Shinri Game, The (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Visit</publisher>
+ <info name="alt_title" value="ザ・心理ゲーム"/>
<info name="serial" value="SLPS-00169" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11172,9 +11354,10 @@ A few comments on these:
</software>
<software name="shinseid" supported="no">
- <description>Shinseiden Megaseed Fukkatsu-hen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Shinseiden Megaseed Fukkatsu-Hen (Japan)</description>
+ <year>1997</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="神聖伝メガシード 復活編"/>
<info name="serial" value="SLPS-00925" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11186,8 +11369,9 @@ A few comments on these:
<software name="shinsets" supported="no">
<description>Shinsetsu Samurai Spirits - Bushido Retsuden (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>SNK</publisher>
+ <info name="alt_title" value="真説サムライスピリッツ 武士道烈伝"/>
<info name="serial" value="SLPS-00814" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11198,9 +11382,10 @@ A few comments on these:
</software>
<software name="shiritsu" supported="no">
- <description>Shiritsu Justice Gakuen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Shiritsu Justice Gakuen - Legion of Heroes (Japan)</description>
+ <year>1998</year>
+ <publisher>Capcom</publisher>
+ <info name="alt_title" value="私立ジャスティス学園 〜 LEGION OF HEROES 〜"/>
<info name="serial" value="SLPS-01240, SLPS-01241" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -11217,8 +11402,9 @@ A few comments on these:
<software name="shirits2" supported="no">
<description>Shiritsu Justice Gakuen - Nekketsu Seishun Nikki 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Capcom</publisher>
+ <info name="alt_title" value="私立ジャスティス学園-熱血青春日記2-"/>
<info name="serial" value="SLPS-02120" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11230,8 +11416,9 @@ A few comments on these:
<software name="shoryusa" supported="no">
<description>Shoryu Sangokuengi (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Imageneer</publisher>
+ <info name="alt_title" value="昇龍三国演義"/>
<info name="serial" value="SLPS-00253" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11243,8 +11430,9 @@ A few comments on these:
<software name="shuranom" supported="no">
<description>Shura no Mon (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Kodansha</publisher>
+ <info name="alt_title" value="修羅の門"/>
<info name="serial" value="SLPS-01202" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11257,8 +11445,9 @@ A few comments on these:
<!-- boot OK -->
<software name="sidebysi" supported="no">
<description>Side by Side Special 2000 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="サイドバイサイドスペシャル2000"/>
<info name="serial" value="SLPM-86344" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11269,9 +11458,10 @@ A few comments on these:
</software>
<software name="sidepock" supported="no">
- <description>Side Pocket 3 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Side Pocket 3 - 3D Polygon Billiard Game (Japan)</description>
+ <year>1998</year>
+ <publisher>Data East</publisher>
+ <info name="alt_title" value="サイドポケット3"/>
<info name="serial" value="SLPS-01079" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11283,8 +11473,9 @@ A few comments on these:
<software name="sidewind" supported="no">
<description>Sidewinder (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Asmik</publisher>
+ <info name="alt_title" value="サイドワインダー"/>
<info name="serial" value="SLPS-00156" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11295,9 +11486,10 @@ A few comments on these:
</software>
<software name="silentmo" supported="no">
- <description>Silent Mobius - Genei no Datenshi (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Silent M&#246;bius - Genei no Datenshi (Japan)</description>
+ <year>1998</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="サイレントメビウス 幻影の堕天使"/>
<info name="serial" value="SLPS-01803" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11309,8 +11501,9 @@ A few comments on these:
<software name="silhouet" supported="no">
<description>Silhouette Mirage - Reprogrammed Hope (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>ESP</publisher>
+ <info name="alt_title" value="シルエットミラージュ"/>
<info name="serial" value="SLPS-01449" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11322,8 +11515,9 @@ A few comments on these:
<software name="silhstor" supported="no">
<description>Silhouette Stories (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Kaneko</publisher>
+ <info name="alt_title" value="シルエット☆ストーリィズ"/>
<info name="serial" value="SLPS-00374" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11335,9 +11529,10 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_01" supported="no">
- <description>Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai - 2000 Edition (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Jitsuyou Series Vol.01 - Norikae Annai -2000 Edition- (Japan)</description>
+ <year>2000</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.01 乗換案内〜2000年版〜"/>
<info name="serial" value="SLPS-02842" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11350,8 +11545,9 @@ A few comments on these:
<!-- boot ok -->
<software name="s15j_03" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.03 - Seimei Handan (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.03 THE 姓名判断"/>
<info name="serial" value="SLPS-02841" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11364,8 +11560,9 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_04" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.04 - Ryouri (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.04 THE 料理〜定番料理レシピ集〜"/>
<info name="serial" value="SLPS-02839" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11378,8 +11575,9 @@ A few comments on these:
<!-- boot ok -->
<software name="s15j_05" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.05 - Kusuri no Jiten - Pill Book 2001 Edition (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.05 薬の事典〜ピルブック2001年版〜"/>
<info name="serial" value="SLPM-86706" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11392,8 +11590,9 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_06" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.06 - Cocktail no Recipe (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.06 カクテルのレシピ"/>
<info name="serial" value="SLPM-86707" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11406,8 +11605,9 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_07" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.07 - Tanoshiku Manabu Unten Menkyo (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.07 楽しく学ぶ運転免許"/>
<info name="serial" value="SLPM-86797" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11420,8 +11620,9 @@ A few comments on these:
<!-- MESS crash after company logos -->
<software name="s15j_08" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.08 - 1-Jikan de Wakaru Kabushiki Toushi (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.08 1時間でわかる株式投資"/>
<info name="serial" value="SLPM-86708" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11434,8 +11635,9 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_09" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.09 - Watashi Style no Aromatherapy (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.09 わたしスタイルのアロマセラピー"/>
<info name="serial" value="SLPM-86843" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11448,8 +11650,9 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_10" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.10 - Tarot Uranai (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.10 タロット占い"/>
<info name="serial" value="SLPM-86913" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11462,8 +11665,9 @@ A few comments on these:
<!-- boot ok -->
<software name="s15j_11" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.11 - Katei de Dekiru Tsubo Shiatsu (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.11 家庭でできるツボ指圧"/>
<info name="serial" value="SLPM-86968" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11476,8 +11680,9 @@ A few comments on these:
<!-- boot ok -->
<software name="s15j_12" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.12 - Katei no Igaku (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.12 家庭の医学"/>
<info name="serial" value="SLPM-86969" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11490,8 +11695,9 @@ A few comments on these:
<!-- boot ok -->
<software name="s15j_13" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.13 - Shinri Game - Soreike X Kokoroji (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.13 心理ゲーム 〜それいけ×ココロジー ココロのウソの摩訶不思議〜"/>
<info name="serial" value="SLPM-87016" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11506,6 +11712,7 @@ A few comments on these:
<description>Simple 1500 Jitsuyou Series Vol.14 - Kurashi no Manner (Japan)</description>
<year>199?</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.14 暮らしのマナー 〜冠婚葬祭編〜"/>
<info name="serial" value="SLPM-87022" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11517,9 +11724,10 @@ A few comments on these:
<!-- boot ok -->
<software name="s15j_15" supported="no">
- <description>Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Jitsuyou Series Vol.15 - Inu no Kaikata - Sekai no Inu Catalog (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.15 犬の飼い方 〜世界の犬カタログ〜"/>
<info name="serial" value="SLPM-87051" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11531,9 +11739,10 @@ A few comments on these:
<!-- boot ok -->
<software name="s15j_16" supported="no">
- <description>Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Jitsuyou Series Vol.16 - Neko no Kaikata - Sekai no Neko Catalo (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.16 猫の飼い方 〜世界の猫カタログ〜"/>
<info name="serial" value="SLPM-87052" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11546,8 +11755,9 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_17" supported="no">
<description>Simple 1500 Jitsuyou Series Vol.17 - Planetarium (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.17 THE プラネタリウム"/>
<info name="serial" value="SLPM-87049" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11559,22 +11769,24 @@ A few comments on these:
<!-- black screen -->
<software name="s15j_18" supported="no">
- <description>Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Kentei Ni Challenge (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-3186" />
+ <description>Simple 1500 Jitsuyou Series Vol.18 - Kanji Quiz - Kanji Keitei ni Challenge (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500実用シリーズ Vol.18 THE 漢字クイズ 〜漢字検定にチャレンジ〜"/>
+ <info name="serial" value="SLPM-87072" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
- <disk name="simple 1500 jitsuyou series vol.18 - kanji quiz - kanji kentei ni challenge (japan) [slps-3186]" sha1="a8ad5f5ac74436bf7ebbad9faa20f4f04d1320e4"/>
+ <disk name="simple 1500 jitsuyou series vol.18 - kanji quiz - kanji kentei ni challenge (japan) [slpm-87072]" sha1="a8ad5f5ac74436bf7ebbad9faa20f4f04d1320e4"/>
</diskarea>
</part>
</software>
<software name="s15_h01" supported="no">
- <description>Simple 1500 Series Hello Kitty Vol.01 - Hello Kitty Bowling (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series - Hello Kitty vol.01 - Hello Kitty Bowling (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.01 Hello Kitty ボウリング"/>
<info name="serial" value="SLPM-86866" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11586,8 +11798,9 @@ A few comments on these:
<software name="s15_h02" supported="no">
<description>Simple 1500 Series Hello Kitty Vol.02 - Hello Kitty Illust Puzzle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.02 Hello Kitty イラストパズル"/>
<info name="serial" value="SLPM-86867" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11598,9 +11811,10 @@ A few comments on these:
</software>
<software name="s15_h03" supported="no">
- <description>Simple 1500 Series Hello Kitty Vol.03 - Hello Kitty Block Kuzushi (Japan)</description>
+ <description> Simple 1500 Series Hello Kitty vol.03 - Hello Kitty Block Kuzushi (Japan)</description>
<year>199?</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.03 Hello Kitty ブロックくずし"/>
<info name="serial" value="SLPM-86911" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11611,9 +11825,10 @@ A few comments on these:
</software>
<software name="s15_h04" supported="no">
- <description>Simple 1500 Series Hello Kitty Vol.04 - Trump (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series Hello Kitty Vol.04 - Hello Kitty Trump (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ ハローキティ Vol.04 Hello Kitty トランプ"/>
<info name="serial" value="SLPM-86910" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11624,9 +11839,10 @@ A few comments on these:
</software>
<software name="s15_37" supported="no">
- <description>Simple 1500 Series Vol.037 - The Illustration Puzzle &amp; Slide Puzzle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series Vol.37 - The Illustration Puzzle &#38; Slide Puzzle (Japan)</description>
+ <year>2000</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.37 THE イラストパズル&スライドパズル"/>
<info name="serial" value="SLPS-02958" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11637,9 +11853,10 @@ A few comments on these:
</software>
<software name="s15_51" supported="no">
- <description>Simple 1500 Series Vol.051 - The Jigsaw Puzzle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.51 - The Jigsaw Puzzle (Japan)</description>
+ <year>2000</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.51 THE ジグソーパズル"/>
<info name="serial" value="SLPM-86700" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11650,9 +11867,10 @@ A few comments on these:
</software>
<software name="s15_63" supported="no">
- <description>Simple 1500 Series Vol.063 - The Gun Shooting 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.63 - The Gun Shooting 2 (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.63 THE ガンシューティング2"/>
<info name="serial" value="SLPM-86816" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11663,9 +11881,10 @@ A few comments on these:
</software>
<software name="s15_67" supported="no">
- <description>Simple 1500 Series Vol.067 - The Soccer - Dynamite Soccer 1500 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.67 - The Soccer - Dynamite Soccer 1500 (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.67 THE サッカー 〜ダイナマイトサッカー1500〜"/>
<info name="serial" value="SLPM-86864" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11676,9 +11895,10 @@ A few comments on these:
</software>
<software name="s15_71" supported="no">
- <description>Simple 1500 Series Vol.071 - The Renai Simulation 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.71 - The Renai Simulation 2 (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.71 THE 恋愛シミュレーション2 〜ふれあい〜"/>
<info name="serial" value="SLPM-86870" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11689,9 +11909,10 @@ A few comments on these:
</software>
<software name="s15_72" supported="no">
- <description>Simple 1500 Series Vol.072 - The Beach Volley (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.72 - The Beach Volley (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.72 THE ビーチバレー"/>
<info name="serial" value="SLPM-86871" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11702,9 +11923,10 @@ A few comments on these:
</software>
<software name="s15_73" supported="no">
- <description>Simple 1500 Series Vol.073 - The Invader - Space Invaders 1500 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.73 - The Invaders - Space Invaders 1500 (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.73 THE インベーダー"/>
<info name="serial" value="SLPM-86900" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11715,9 +11937,10 @@ A few comments on these:
</software>
<software name="s15_76" supported="no">
- <description>Simple 1500 Series Vol.076 - The Dodge Ball (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.76 - The Dodgeball (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.76 THE ドッヂボール"/>
<info name="serial" value="SLPM-86914" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11728,9 +11951,10 @@ A few comments on these:
</software>
<software name="s15_83" supported="no">
- <description>Simple 1500 Series Vol.083 - The Wake Board - Burstrick Wake Boarding (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.83 - The Wakeboard - BursTrick Wake Boarding!! (Japan)</description>
+ <year>2001</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.83 THE ウェイクボード"/>
<info name="serial" value="SLPM-86998" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11741,9 +11965,10 @@ A few comments on these:
</software>
<software name="s15_85" supported="no">
- <description>Simple 1500 Series Vol.085 - The Sengoku Bushou - Tenka Touitsu no Yabou (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.85 - The Sengoku Bushou - Tenka Touitsu no Yabou (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.85 THE 戦国武将 〜天下統一の野望〜"/>
<info name="serial" value="SLPM-87008" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11754,9 +11979,10 @@ A few comments on these:
</software>
<software name="s15_88" supported="no">
- <description>Simple 1500 Series Vol.088 - The Gal Mahjong (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.88 - The Gal Mahjong - Love Songs - Idol wa High Rate (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.88 THE ギャル麻雀 〜LoveSongs アイドルはハイレ〜ト〜"/>
<info name="serial" value="SLPM-87023" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11767,9 +11993,10 @@ A few comments on these:
</software>
<software name="s15_89" supported="no">
- <description>Simple 1500 Series Vol.089 - The Power Shovel Ni Norou!! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.89 - The Power Shovel - Power Shovel ni Norou! (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.89 THE パワーショベル 〜パワーショベルに乗ろう!!〜"/>
<info name="serial" value="SLPM-87035" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11780,9 +12007,10 @@ A few comments on these:
</software>
<software name="s15_90" supported="no">
- <description>Simple 1500 Series Vol.090 - The Sensha (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.90 - The Sensha (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.90 THE 戦車"/>
<info name="serial" value="SLPM-87044" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11793,9 +12021,10 @@ A few comments on these:
</software>
<software name="s15_93" supported="no">
- <description>Simple 1500 Series Vol.093 - The Puzzle Bobble - Puzzle Bobble 4 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series Vol.93 - The Puzzle Bobble 4 (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.93 THE パズルボブル 〜パズルボブル4〜"/>
<info name="serial" value="SLPM-87057" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11806,9 +12035,10 @@ A few comments on these:
</software>
<software name="s15_97" supported="no">
- <description>Simple 1500 Series Vol.097 - The Squash (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series vol.97 - The Squash (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.97 THE スカッシュ"/>
<info name="serial" value="SLPM-87088" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11819,9 +12049,10 @@ A few comments on these:
</software>
<software name="s15_99" supported="no">
- <description>Simple 1500 Series Vol.099 - The Kendo (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series Vol.99 - The Kendo - Ken no Hanamichi (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.99 THE 剣道 〜剣の花道〜"/>
<info name="serial" value="SLPM-87140" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11832,9 +12063,10 @@ A few comments on these:
</software>
<software name="s15_101" supported="no">
- <description>Simple 1500 Series Vol.101 - The Sentou (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 series vol.101 - The Sentou (Japan)</description>
+ <year>2003</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.101 THE 銭湯"/>
<info name="serial" value="SLPM-87142" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11845,9 +12077,10 @@ A few comments on these:
</software>
<software name="s15_102" supported="no">
- <description>Simple 1500 Series Vol.102 - The Densha Untenshi - Densha de Go! Nagoya Tetsudo-hen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series Vol.102 - The Densha Untensha - Densha de Go! - Nagoya Tetsudou-hen (Japan)</description>
+ <year>2002</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.102 THE 電車運転手〜電車でGO!名古屋鉄道編〜"/>
<info name="serial" value="SLPM-87144" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11858,9 +12091,10 @@ A few comments on these:
</software>
<software name="s15_103" supported="no">
- <description>Simple 1500 Series Vol.103 - The Ganso Densha Untenshi - Densha de Go! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series Vol.103 - The Ganso Densha Utenshi - Densha De Go! (Japan)</description>
+ <year>2003</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.103 THE 元祖電車運転士〜電車でGO!〜"/>
<info name="serial" value="SLPM-87212" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11871,9 +12105,10 @@ A few comments on these:
</software>
<software name="s15_104" supported="no">
- <description>Simple 1500 Series Vol.104 - The Pink Panther (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple 1500 Series Vol.104 - The Pink Panther - Pinkadelic Pursuit (Japan)</description>
+ <year>2003</year>
+ <publisher>D3</publisher>
+ <info name="alt_title" value="SIMPLE1500シリーズ Vol.104 THE ピンクパンサー"/>
<info name="serial" value="SLPM-87215" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11883,10 +12118,27 @@ A few comments on these:
</part>
</software>
+ <!-- to dump!
+ <software name="sc2k_01" supported="no">
+ <description>Simple Characters 2000 Series Vol.01 - Kidou Senshi Gundam - The Gunjin Shougi (Japan)</description>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.01 機動戦士ガンダム THE 軍人将棋"/>
+ <info name="serial" value="SLPS-03309" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="simple characters 2000 series vol.01 - kidou senshi gundam (japan) [slps-03309]" sha1=""/>
+ </diskarea>
+ </part>
+ </software>
+ -->
+
<software name="sc2k_02" supported="no">
<description>Simple Characters 2000 Series Vol.02 - Afro Ken - The Puzzle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.02 アフロ犬 THE パズル"/>
<info name="serial" value="SLPS-03307" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11895,24 +12147,12 @@ A few comments on these:
</diskarea>
</part>
</software>
- <!-- dupe
- <software name="sc2k_02" supported="no">
- <description>Simple Characters 2000 Series Vol.02 - Afroken - The Puzzle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-03307" />
- <sharedfeat name="compatibility" value="NTSC-J"/>
- <part name="cdrom" interface="psx_cdrom">
- <diskarea name="cdrom">
- <disk name="simple characters 2000 series vol.02 - afroken - the puzzle (japan) [slps-03307]" sha1="5b89aac27f6435972c512abe6b949d9bae591d19"/>
- </diskarea>
- </part>
- </software>
- -->
+
<software name="sc2k_03" supported="no">
<description>Simple Characters 2000 Series Vol.03 - Kamen Rider - The Bike Race (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.03 仮面ライダー THE バイクレース"/>
<info name="serial" value="SLPS-03308" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11923,9 +12163,10 @@ A few comments on these:
</software>
<software name="sc2k_04" supported="no">
- <description>Simple Characters 2000 Series Vol.04 - Jarin-Ko Chie - The Hanafuda (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple Characters 2000 Series Vol.04 - Jarinko Chie - The Hanafuda (Japan)</description>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.04 じゃりン子チエ THE 花札"/>
<info name="serial" value="SLPS-03350" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11936,9 +12177,10 @@ A few comments on these:
</software>
<software name="sc2k_05" supported="no">
- <description>Simple Characters 2000 Series Vol.05 - HighSchool Kimengumi - The Table Hockey (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple Characters 2000 Series vol.05 - Highschool Kimengumi - The Table Hockey (Japan)</description>
+ <year>2001</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.05 ハイスクール奇面組 THE テーブルホッケー"/>
<info name="serial" value="SLPS-03362" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11950,8 +12192,9 @@ A few comments on these:
<software name="sc2k_06" supported="no">
<description>Simple Characters 2000 Series Vol.06 - Dokonjou Gaeru - The Mahjong (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.06 ど根性ガエル THE 麻雀"/>
<info name="serial" value="SLPS-03363" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11962,9 +12205,10 @@ A few comments on these:
</software>
<software name="sc2k_07" supported="no">
- <description>Simple Characters 2000 Series Vol.07 - Ikkyuusan - The Quiz (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple Characters 2000 Series vol.07 - Ikkyuu-san&#58; The Quiz (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.07 一休さん THE クイズ"/>
<info name="serial" value="SLPS-03418" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11974,10 +12218,27 @@ A few comments on these:
</part>
</software>
+ <!-- to dump!
+ <software name="sc2k_08" supported="no">
+ <description>Simple Characters 2000 Series Vol.08 - Gatchaman the Shooting (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.08 ガッチャマン THE シューティング"/>
+ <info name="serial" value="SLPS-03444" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="simple characters 2000 series vol.08 - gatchaman the shooting (japan) [slps-03444]" sha1=""/>
+ </diskarea>
+ </part>
+ </software>
+ -->
+
<software name="sc2k_09" supported="no">
<description>Simple Characters 2000 Series Vol.09 - Tsuri Kichi Sanpei - The Tsuri (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.09 釣りキチ三平 THE 釣り"/>
<info name="serial" value="SLPS-03445" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -11988,9 +12249,10 @@ A few comments on these:
</software>
<software name="sc2k_10" supported="no">
- <description>Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku - The Dodgeball (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple Characters 2000 Series Vol.10 - Sakigake!! Otojo Juku (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.10 魁!!男塾 THE 怒馳暴流"/>
<info name="serial" value="SLPS-03457" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12000,10 +12262,27 @@ A few comments on these:
</part>
</software>
+ <!-- to dump!
+ <software name="sc2k_11" supported="no">
+ <description>Simple Characters 2000 Series Vol.11 - Meitantei Conan - The Board (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.11 名探偵コナン THE ボードゲーム"/>
+ <info name="serial" value="SLPS-03458" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="simple characters 2000 series vol.11 - meitantei conan - the board (japan) [slps-03458]" sha1=""/>
+ </diskarea>
+ </part>
+ </software>
+ -->
+
<software name="sc2k_12" supported="no">
<description>Simple Characters 2000 Series Vol.12 - Kidou Butouden G Gundam - The Battle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ VOL.12 機動武闘伝Gガンダム THE バトル"/>
<info name="serial" value="SLPS-03471" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12014,9 +12293,10 @@ A few comments on these:
</software>
<software name="sc2k_13" supported="no">
- <description>Simple Characters 2000 Series Vol.13 - Shin Kidou Senki Gundam W - The Battle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple Characters 2000 Series vol.13 - Kidou Senki Gundam W - The Battle (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ VOL.13 新機動戦記ガンダムW THE バトル"/>
<info name="serial" value="SLPS-03472" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12027,9 +12307,10 @@ A few comments on these:
</software>
<software name="sc2k_14" supported="no">
- <description>Simple Characters 2000 Series Vol.14 - Nantettantei Idol - The Jigsaw Puzzle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple Characters 2000 Series Vol.14 - Nante Tantei Idol - The Jigsaw Puzzle (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.14 なんてっ探偵アイドル THE ジグソーパズル"/>
<info name="serial" value="SLPS-03473" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12040,9 +12321,10 @@ A few comments on these:
</software>
<software name="sc2k_15" supported="no">
- <description>Simple Characters 2000 Series Vol.15 - Cyborg 009 - The Block Kuzushi (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simple Characters 2000 Series vol.15 - The Block Kuzushi (Japan)</description>
+ <year>2002</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.15 サイボーグ009 THE ブロックくずし"/>
<info name="serial" value="SLPS-03474" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12054,8 +12336,9 @@ A few comments on these:
<software name="sc2k_16" supported="no">
<description>Simple Characters 2000 Series Vol.16 - Ganba no Bouken - The Puzzle Action (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2003</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.16 ガンバの冒険 THE パズルアクション"/>
<info name="serial" value="SLPS-03546" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12065,10 +12348,27 @@ A few comments on these:
</part>
</software>
+ <!-- to dump!
+ <software name="sc2k_17" supported="no">
+ <description>Simple Characters 2000 Series vol.17 - Sentou Mecha Xabungle - The Racing Game (Japan)</description>
+ <year>2003</year>
+ <publisher>Bandai&#47;D3</publisher>
+ <info name="alt_title" value="SIMPLEキャラクター2000シリーズ Vol.17 戦闘メカ ザブングル THE アクション"/>
+ <info name="serial" value="SLPS-03547" />
+ <sharedfeat name="compatibility" value="NTSC-J"/>
+ <part name="cdrom" interface="psx_cdrom">
+ <diskarea name="cdrom">
+ <disk name="simple characters 2000 series vol.17 - sentou mecha xabungle - rhe racing game (japan) [slps-03547]" sha1=""/>
+ </diskarea>
+ </part>
+ </software>
+ -->
+
<software name="simulati" supported="no">
- <description>Simulation Zoo (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Simulation Zoo&#58; Sekaiichi no Doubutsuen o Tsukurou (Japan)</description>
+ <year>1996</year>
+ <publisher>SoftBank</publisher>
+ <info name="alt_title" value="シミュレーションズー"/>
<info name="serial" value="SLPS-00458" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12080,8 +12380,9 @@ A few comments on these:
<software name="sisterpr" supported="no">
<description>Sister Princess - Pure Stories (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Media Works</publisher>
+ <info name="alt_title" value="シスター・プリンセス 〜ピュア・ストーリーズ〜 &#60;初回限定生産&#62;"/>
<info name="serial" value="SLPS-03360" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12093,8 +12394,9 @@ A few comments on these:
<software name="slaphapp" supported="no">
<description>Slap Happy Rhythm Busters (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>ASK</publisher>
+ <info name="alt_title" value="スラップ ハッピー リズム バスターズ"/>
<info name="serial" value="SLPS-02789" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12106,8 +12408,9 @@ A few comments on these:
<software name="snatcher" supported="no">
<description>Snatcher (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="スナッチャー"/>
<info name="serial" value="SLPS-00154" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12119,8 +12422,9 @@ A few comments on these:
<software name="snobowki" supported="no">
<description>Snobow Kids Plus (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>ASCII</publisher>
+ <info name="alt_title" value="スノボキッズプラス"/>
<info name="serial" value="SLPS-01823" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12132,8 +12436,9 @@ A few comments on these:
<software name="sonataja" supported="no">
<description>Sonata (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>T&#38;E</publisher>
+ <info name="alt_title" value="Sonata"/>
<info name="serial" value="SLPS-01843, SLPS-01844" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12150,8 +12455,9 @@ A few comments on these:
<software name="sotsugyo" supported="no">
<description>Sotsugyou Crossworld (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Hearty Robin</publisher>
+ <info name="alt_title" value="卒業クロスワールド"/>
<info name="serial" value="SLPS-00273" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12163,8 +12469,9 @@ A few comments on these:
<software name="sougakut" supported="no">
<description>Sougaku Toshi - Osaka (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>King Records</publisher>
+ <info name="alt_title" value="奏(騒)楽都市 OSAKA"/>
<info name="serial" value="SLPS-01722, SLPS-01723" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12181,8 +12488,9 @@ A few comments on these:
<software name="soukyugu" supported="no">
<description>Soukyu Gurentai - Oubushustugeki (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Data East</publisher>
+ <info name="alt_title" value="蒼穹紅蓮隊 黄武出撃"/>
<info name="serial" value="SLPS-01172" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12192,23 +12500,11 @@ A few comments on these:
</part>
</software>
- <software name="soundqub" supported="no">
- <description>Sound Qube (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-01309" />
- <sharedfeat name="compatibility" value="NTSC-J"/>
- <part name="cdrom" interface="psx_cdrom">
- <diskarea name="cdrom">
- <disk name="sound qube (japan) [slps-01309]" sha1="54139ab64577aec717ca75daa26d87b67887a673"/>
- </diskarea>
- </part>
- </software>
-
<software name="spaceinv" supported="no">
<description>Space Invaders X (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="スペースインベーダーX(エックス)"/>
<info name="serial" value="SLPM-86419" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12220,8 +12516,9 @@ A few comments on these:
<software name="spectral" supported="no">
<description>Spectral Blade (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Idea Factory</publisher>
+ <info name="alt_title" value="スペクトラルブレイド"/>
<info name="serial" value="SLPS-02526" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12232,9 +12529,10 @@ A few comments on these:
</software>
<software name="speedkin" supported="no">
- <description>Speed King - Neo Kobe 2045 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Speed King (Japan)</description>
+ <year>1996</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="スピードキング"/>
<info name="serial" value="SLPM-86013" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12246,8 +12544,9 @@ A few comments on these:
<software name="speedpow" supported="no">
<description>Speed Power Gunbike (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="可変走攻 ガンバイク"/>
<info name="serial" value="SLPS-01066" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12259,8 +12558,9 @@ A few comments on these:
<software name="spiderma" supported="no">
<description>Spider-Man (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Activision</publisher>
+ <info name="alt_title" value="SPIDER-MAN"/>
<info name="serial" value="SLPM-86739" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12270,23 +12570,10 @@ A few comments on these:
</part>
</software>
- <software name="squaresp" supported="no">
- <description>Square's Preview 5 (Japan) (Demo)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SCPS-45417" />
- <sharedfeat name="compatibility" value="NTSC-J"/>
- <part name="cdrom" interface="psx_cdrom">
- <diskarea name="cdrom">
- <disk name="square's preview 5 (japan) (demo) [scps-45417]" sha1="2e84ab79573ce07bb78480a9d75d601e14d07895"/>
- </diskarea>
- </part>
- </software>
-
<software name="squareso" supported="no">
<description>Squaresoft Memory Card Data CD (Japan)</description>
<year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Squaresoft</publisher>
<info name="serial" value="SLPM-80556" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12298,8 +12585,9 @@ A few comments on these:
<software name="stahlfed" supported="no">
<description>Stahlfeder (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Santos</publisher>
+ <info name="alt_title" value="シュタールフェーダー 〜鉄甲飛空団〜"/>
<info name="serial" value="SLPS-00162" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12311,8 +12599,9 @@ A few comments on these:
<software name="startlin" supported="no">
<description>Startling Odyssey 1 - Blue Evolution (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>RayForce</publisher>
+ <info name="alt_title" value="スタートリング・オデッセイ1 ブルーエヴォリューション"/>
<info name="serial" value="SLPS-02043" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12324,8 +12613,9 @@ A few comments on these:
<software name="streetfi" supported="no">
<description>Street Fighter Collection (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Capcom</publisher>
+ <info name="alt_title" value="ストリートファイターコレクション"/>
<info name="serial" value="SLPS-00800, SLPS-00801" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12342,8 +12632,9 @@ A few comments on these:
<software name="suchiepa" supported="no">
<description>Suchie-Pai Adventure - Doki Doki Nightmare (Japan) (Disc 2 Only)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Jaleco</publisher>
+ <info name="alt_title" value="スーチーパイアドベンチャー"/>
<info name="serial" value="SLPS-01265" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12354,9 +12645,10 @@ A few comments on these:
</software>
<software name="suikoenb" supported="no">
- <description>Suiko Enbu (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Suiko Enbu - Outlaws of the Lost Dynasty (Japan)</description>
+ <year>1996</year>
+ <publisher>Data East</publisher>
+ <info name="alt_title" value="水 滸 演 武"/>
<info name="serial" value="SLPS-00137" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12367,9 +12659,10 @@ A few comments on these:
</software>
<software name="sunsoft1" supported="no">
- <description>Sunsoft Classics Vol.1 - Memorial Series (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Memorial Star Series Sunsoft Vol. 1 - Ikki &#38; Super Arabian (Japan)</description>
+ <year>2001</year>
+ <publisher>Sunsoft</publisher>
+ <info name="alt_title" value="メモリアル☆シリーズ サンソフト Vol.1"/>
<info name="serial" value="SLPS-03135" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12380,9 +12673,10 @@ A few comments on these:
</software>
<software name="sunsoft2" supported="no">
- <description>Sunsoft Classics Vol.2 - Memorial Series (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Memorial Star Series Sunsoft Vol. 2 - Route 16 - Turbo &#38; Atlantis no Nazo (Japan)</description>
+ <year>2001</year>
+ <publisher>Sunsoft</publisher>
+ <info name="alt_title" value="メモリアル☆シリーズ サンソフトVOL.2"/>
<info name="serial" value="SLPS-03181" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12394,8 +12688,9 @@ A few comments on these:
<software name="sunsoft3" supported="no">
<description>Sunsoft Classics Vol.3 - Memorial Series (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Sunsoft</publisher>
+ <info name="alt_title" value="メモリアル☆シリーズ サンソフトVOL.3"/>
<info name="serial" value="SLPS-03366" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12406,9 +12701,10 @@ A few comments on these:
</software>
<software name="sunsoft4" supported="no">
- <description>Sunsoft Classics Vol.4 - Memorial Series (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Memorial Star Series Sunsoft Vol.4 - Chou wakusei senki metafight &#38; Lipple island (Japan)</description>
+ <year>2002</year>
+ <publisher>Sunsoft</publisher>
+ <info name="alt_title" value="メモリアル☆シリーズ サンソフト VOL.4"/>
<info name="serial" value="SLPS-03382" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12419,9 +12715,10 @@ A few comments on these:
</software>
<software name="sunsoft5" supported="no">
- <description>Sunsoft Classics Vol.5 - Memorial Series (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Memorial Star Series Sunsoft Vol.5 - Raf World &#38; Hebereke (Japan)</description>
+ <year>2002</year>
+ <publisher>Sunsoft</publisher>
+ <info name="alt_title" value="メモリアル☆シリーズ サンソフト VOL.5"/>
<info name="serial" value="SLPS-03397" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12432,9 +12729,10 @@ A few comments on these:
</software>
<software name="sunsoft6" supported="no">
- <description>Sunsoft Classics Vol.6 - Memorial Series (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Memorial Star Series Sunsoft Vol.6 - Battle Formula &#38; Gimmick! (Japan)</description>
+ <year>2002</year>
+ <publisher>Sunsoft</publisher>
+ <info name="alt_title" value="メモリアル☆シリーズ サンソフトVOL.6"/>
<info name="serial" value="SLPS-03486" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12446,8 +12744,9 @@ A few comments on these:
<software name="superadv" supported="no">
<description>Super Adventure RockMan (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Capcom</publisher>
+ <info name="alt_title" value="スーパーアドベンチャーロックマン"/>
<info name="serial" value="SLPS-01051, SLPS-01052, SLPS-01053" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12469,8 +12768,9 @@ A few comments on these:
<software name="superfoo" supported="no">
<description>Super Football Champ (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="SUPER FOOTBALL CHAMP"/>
<info name="serial" value="SLPS-00569" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12482,8 +12782,9 @@ A few comments on these:
<software name="superliv" supported="no">
<description>Super Live Stadium (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Aques</publisher>
+ <info name="alt_title" value="スーパーライブスタジアム"/>
<info name="serial" value="SLPM-86019" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12493,23 +12794,11 @@ A few comments on these:
</part>
</software>
- <software name="superlit" supported="no">
- <description>SuperLite 1500 Extra Series Vol.02 - Nankuro (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-02067" />
- <sharedfeat name="compatibility" value="NTSC-J"/>
- <part name="cdrom" interface="psx_cdrom">
- <diskarea name="cdrom">
- <disk name="superlite 1500 extra series vol.02 - nankuro (japan) [slps-02067]" sha1="8f17ac2169a351af67437fd79cfd66a13e51062e"/>
- </diskarea>
- </part>
- </software>
-
<software name="susumeka" supported="no">
- <description>Susume! Kaizoku (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Susume! Kaizoku - Be Pirates! (Japan)</description>
+ <year>1998</year>
+ <publisher>ArtDink</publisher>
+ <info name="alt_title" value="進め! 海賊"/>
<info name="serial" value="SLPS-01737" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12520,9 +12809,10 @@ A few comments on these:
</software>
<software name="tkarahaj" supported="no">
- <description>T kara Hajimaru Monogatari (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>T Kara Hajimaru Monogatari (Japan)</description>
+ <year>1998</year>
+ <publisher>Jaleco</publisher>
+ <info name="alt_title" value="Tから始まる物語"/>
<info name="serial" value="SLPS-01350" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12534,8 +12824,9 @@ A few comments on these:
<software name="tactical" supported="no">
<description>Tactical Armor Custom Gasaraki (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="Tactical Armor Custom ガサラキ"/>
<info name="serial" value="SLPS-02181" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12547,8 +12838,9 @@ A few comments on these:
<software name="tacticso" supported="no">
<description>Tactics Ogre - Let Us Cling Together (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Artdink</publisher>
+ <info name="alt_title" value="タクティクス・オウガ"/>
<info name="serial" value="SLPS-00767" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12560,8 +12852,9 @@ A few comments on these:
<software name="taihoshi" supported="no">
<description>Taiho Shichauzo! - You're Under Arrest (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Pioneer</publisher>
+ <info name="alt_title" value="逮捕しちゃうぞ"/>
<info name="serial" value="SLPM-86782, SLPM-86783" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12577,9 +12870,10 @@ A few comments on these:
</software>
<software name="talesoff" supported="no">
- <description>Tales of Fandom Vol.1 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tales of Fandom Vol.1 (Cless Version) (Japan)</description>
+ <year>2002</year>
+ <publisher>Namco</publisher>
+ <info name="alt_title" value="テイルズオブファンダム Vol.1(クレス・ルーティー・ファラバージョン)"/>
<info name="serial" value="SLPS-03375" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12592,7 +12886,7 @@ A few comments on these:
<software name="tamamayu" supported="no">
<description>Tamamayu Monogatari - Dennou Bijutsukan (Japan) (Demo)</description>
<year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <publisher>Genki</publisher>
<info name="serial" value="SLPM-80325" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12604,8 +12898,9 @@ A few comments on these:
<software name="tanteiea" supported="no">
<description>Tantei Jinguuji Saburo - Early Collection (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Data East</publisher>
+ <info name="alt_title" value="探偵神宮寺三郎 Early Collection"/>
<info name="serial" value="SLPS-02157" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12616,9 +12911,10 @@ A few comments on these:
</software>
<software name="tanteimr" supported="no">
- <description>Tantei Jinguuji Saburo - Mikan no Report (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tantei Jinguuji Saburo - Mikan No Rupo (Popular Edition) (Japan)</description>
+ <year>2000</year>
+ <publisher>Data East</publisher>
+ <info name="alt_title" value="普及版1,500円シリーズ 探偵神宮寺三郎 未完のルポ 普及版"/>
<info name="serial" value="SLPS-03016" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12629,9 +12925,10 @@ A few comments on these:
</software>
<software name="tanteitk" supported="no">
- <description>Tantei Jinguuji Saburo - Tomoshibi ga Kienu Ma ni (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tantei Jinguji Saburo - Tomosibi Ga Kienumani (Japan)</description>
+ <year>1999</year>
+ <publisher>Data East</publisher>
+ <info name="alt_title" value="探偵 神宮寺三郎 灯火が消えぬ間に"/>
<info name="serial" value="SLPS-02427" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12642,9 +12939,10 @@ A few comments on these:
</software>
<software name="tanteiyo" supported="no">
- <description>Tantei Jinguuji Saburo - Yume no Owari ni (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tantei Jinguji Saburo - Yumeno Owarini (Japan)</description>
+ <year>1998</year>
+ <publisher>Data East</publisher>
+ <info name="alt_title" value="探偵 神宮寺三郎 夢の終わりに"/>
<info name="serial" value="SLPS-01356" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12656,8 +12954,9 @@ A few comments on these:
<software name="tatsunok" supported="no">
<description>Tatsunoko Fight (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Takara</publisher>
+ <info name="alt_title" value="タツノコファイトt"/>
<info name="serial" value="SLPS-02939" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12668,9 +12967,10 @@ A few comments on these:
</software>
<software name="tenmadej" supported="no">
- <description>Ten Made Jack (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Ten Made Jack &#47; Tenma de Jack - Odoroki Manenoki Daitoubou (Japan)</description>
+ <year>2000</year>
+ <publisher>Enix</publisher>
+ <info name="alt_title" value="天までジャック オドロキマメノキ大逃亡!!"/>
<info name="serial" value="SLPM-86368" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12682,8 +12982,9 @@ A few comments on these:
<software name="tenantwa" supported="no">
<description>Tenant Wars (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Kid</publisher>
+ <info name="alt_title" value="テナントウォーズ"/>
<info name="serial" value="SLPS-01243" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12695,8 +12996,9 @@ A few comments on these:
<software name="tenchimu" supported="no">
<description>Tenchi Muyou! Toukou Muyou - No Need for School (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Xing</publisher>
+ <info name="alt_title" value="天地無用! 〜登校無用〜"/>
<info name="serial" value="SLPS-00451, SLPS-00452" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12713,8 +13015,9 @@ A few comments on these:
<software name="tenchiwo" supported="no">
<description>Tenchi wo Kurau II - Sekiheki no Tatakai (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Capcom</publisher>
+ <info name="alt_title" value="天地を喰らうII"/>
<info name="serial" value="SLPS-00203" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12726,8 +13029,9 @@ A few comments on these:
<software name="tennisar" supported="no">
<description>Tennis Arena (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Ubi Soft</publisher>
+ <info name="alt_title" value="TENNIS ARENA"/>
<info name="serial" value="SLPS-01303" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12738,9 +13042,10 @@ A few comments on these:
</software>
<software name="tensenny" supported="no">
- <description>Tensen-Nyannyan - Gekijou-ban (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tensen Nyannyan Gekigyouban (Japan)</description>
+ <year>1998</year>
+ <publisher>Time Point</publisher>
+ <info name="alt_title" value="天仙娘々〜劇場版〜"/>
<info name="serial" value="SLPS-01278" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12752,8 +13057,9 @@ A few comments on these:
<software name="tenshino" supported="no">
<description>Tenshi no Shippo (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2003</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="天使のしっぽ"/>
<info name="serial" value="SLPS-03531" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12765,8 +13071,9 @@ A few comments on these:
<software name="tetrisxj" supported="no">
<description>Tetris X (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Bullet Proof</publisher>
+ <info name="alt_title" value="テトリス X"/>
<info name="serial" value="SLPS-00321" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12777,9 +13084,10 @@ A few comments on these:
</software>
<software name="tfxjapan" supported="no">
- <description>TFX (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>TFX - Tactical Fighter Experiment (Japan)</description>
+ <year>1996</year>
+ <publisher>Imageneer &#47; Ocean</publisher>
+ <info name="alt_title" value="TFX"/>
<info name="serial" value="SLPS-00511" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12791,8 +13099,9 @@ A few comments on these:
<software name="thatsqtj" supported="no">
<description>That's QT (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Koei</publisher>
+ <info name="alt_title" value="ザッツキューティ"/>
<info name="serial" value="SLPM-86340" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12804,8 +13113,9 @@ A few comments on these:
<software name="themehos" supported="no">
<description>Theme Hospital (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="alt_title" value="テーマホスピタル"/>
<info name="serial" value="SLPS-01405" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12816,9 +13126,10 @@ A few comments on these:
</software>
<software name="thunderf" supported="no">
- <description>Thunderforce V - Perfect System (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Thunder Force V - Perfect System (Japan)</description>
+ <year>1998</year>
+ <publisher>TechnoSoft</publisher>
+ <info name="alt_title" value="サンダー・フォースV ~パーフェクト・システム~"/>
<info name="serial" value="SLPS-01406" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12830,8 +13141,9 @@ A few comments on these:
<software name="timegaln" supported="no">
<description>Time Gal &amp; Ninja Hayate (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="タイムギャル&#38;忍者ハヤテ"/>
<info name="serial" value="SLPS-00383, SLPS-00384" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12848,8 +13160,9 @@ A few comments on these:
<software name="tinybull" supported="no">
<description>Tiny Bullets (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="タイニーバレット"/>
<info name="serial" value="SCPS-10130" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12861,8 +13174,9 @@ A few comments on these:
<software name="toheartj" supported="no">
<description>To Heart (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Aqua Plus</publisher>
+ <info name="alt_title" value="トゥハート"/>
<info name="serial" value="SLPS-01919, SLPS-01920" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12879,8 +13193,9 @@ A few comments on these:
<software name="toaplans" supported="no">
<description>Toaplan Shooting Battle 1 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="東亜プラン シューティングバトル1"/>
<info name="serial" value="SLPS-00436" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12893,8 +13208,9 @@ A few comments on these:
<!-- OK, some problems with sky gfx -->
<software name="tocatour" supported="no">
<description>Toca Touring Car Championship (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Upstar</publisher>
+ <info name="alt_title" value="TOCA TOURINGCAR CHAMPION SHIP"/>
<info name="serial" value="SLPS-01410" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12907,8 +13223,9 @@ A few comments on these:
<!-- boot OK -->
<software name="tkpzldm" supported="no">
<description>Tokimeki Memorial - Taisen Puzzle-Dama (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ときめきメモリアル対戦ぱずるだま"/>
<info name="serial" value="SLPM-86005" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12919,9 +13236,9 @@ A few comments on these:
</software>
<software name="tm2ev1" supported="no">
- <description>Tokimeki Memorial 2 Emotional Voice System (Vol.1 - Kotoko-Miyuki-Kaedeko) (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tokimeki Memorial 2 EVS Append Disc 1 (Kotoko-Miyuki-Kaedeko) (Japan)</description>
+ <year>2000</year>
+ <publisher>Aspect</publisher>
<info name="serial" value="SLPM-80527" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12932,9 +13249,9 @@ A few comments on these:
</software>
<software name="tm2ev2" supported="no">
- <description>Tokimeki Memorial 2 Emotional Voice System (Vol.2 - Homura-Akane-Kaori) (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tokimeki Memorial 2 EVS Append Disc 2 (Homura-Akane-Kaori) (Japan)</description>
+ <year>2000</year>
+ <publisher>Aspect</publisher>
<info name="serial" value="SLPM-80544" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12945,9 +13262,9 @@ A few comments on these:
</software>
<software name="tm2ev3" supported="no">
- <description>Tokimeki Memorial 2 Emotional Voice System (Vol.3 - Miho-Mei-Sumire) (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tokimeki Memorial 2 EVS Append Disc 3 (Miho-Mei-Sumire) (Japan)</description>
+ <year>2000</year>
+ <publisher>Enterbrain</publisher>
<info name="serial" value="SLPM-80550" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -12958,9 +13275,10 @@ A few comments on these:
</software>
<software name="tm2s1" supported="no">
- <description>Tokimeki Memorial 2 Substories Vol.1 - Dancing Summer Vacation (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tokimeki Memorial 2 Substories vol. 1 - Dancing Summer Vacation (Japan)</description>
+ <year>2000</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ときめきメモリアル2 Substories 〜Dancing Summer Vacation〜"/>
<info name="serial" value="SLPM-86549, SLPM-86550" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12977,8 +13295,9 @@ A few comments on these:
<software name="tm2s2" supported="no">
<description>Tokimeki Memorial 2 Substories Vol.2 - Leaping School Festival (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ときめきメモリアル2 Substories 〜Leaping School Festival〜"/>
<info name="serial" value="SLPM-86775, SLPM-86776" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -12994,9 +13313,10 @@ A few comments on these:
</software>
<software name="tm2s3" supported="no">
- <description>Tokimeki Memorial 2 SubStories Vol.3 - Memories Ringing on (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tokimeki Memorial 2 SubStories Vol.3 - Memories Ringing On (Japan)</description>
+ <year>2001</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ときめきメモリアル2 サブストーリーズ〜Memories Ringing On〜"/>
<info name="serial" value="SLPM-86881, SLPM-86882" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -13013,9 +13333,10 @@ A few comments on these:
<!-- boot ok -->
<software name="tmds1" supported="no">
- <description>Tokimeki Memorial Drama Series Vol.1 - Nijiiro no Seishun (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tokimeki Memorial Drama Series Vol.1 - Nijiiro No Seishun (Konami the Best) (Japan)</description>
+ <year>1999</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="タイトル:ときめきメモリアル ドラマシリーズVol.1 虹色の青春(ベスト)"/>
<info name="serial" value="SLPM-86360" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13028,8 +13349,9 @@ A few comments on these:
<!-- boot ok -->
<software name="tokyomaj" supported="no">
<description>Tokyo Majin Gakuen Gehouchou (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Asmik Ace</publisher>
+ <info name="alt_title" value="東京魔人学園外法帖"/>
<info name="serial" value="SLPS-03333, SLPS-03334, SLPS-03335" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -13052,8 +13374,9 @@ A few comments on these:
<!-- black screen -->
<software name="tomba" supported="no">
<description>Tomba! The Wild Adventures (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Whoopee Camp</publisher>
+ <info name="alt_title" value="トンバ! ザ・ワイルドアドベンチャー"/>
<info name="serial" value="SLPS-02350" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13065,9 +13388,10 @@ A few comments on these:
<!-- boot ok -->
<software name="tomikato" supported="no">
- <description>Tomikatown wo Tukurou! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Tomica Town o Tsukurou! (Japan)</description>
+ <year>1999</year>
+ <publisher>Tomy</publisher>
+ <info name="alt_title" value="トミカタウンをつくろう!"/>
<info name="serial" value="SLPS-01935" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13080,8 +13404,9 @@ A few comments on these:
<!-- hangs on now loading -->
<software name="topoloja" supported="no">
<description>ToPoLo (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Artdink</publisher>
+ <info name="alt_title" value="ToPoLo"/>
<info name="serial" value="SLPS-00620" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13094,8 +13419,9 @@ A few comments on these:
<!-- black screen after company logos -->
<software name="toshcard" supported="no">
<description>Toshinden Card Quest (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Takara</publisher>
+ <info name="alt_title" value="闘神伝 カードクエスト"/>
<info name="serial" value="SLPS-01113" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13108,8 +13434,9 @@ A few comments on these:
<!-- black screen -->
<software name="tougemax" supported="no">
<description>Touge Max G (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Atlus</publisher>
+ <info name="alt_title" value="峠MAX G"/>
<info name="serial" value="SLPS-02361" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13122,8 +13449,9 @@ A few comments on these:
<!-- boot OK -->
<software name="toukiden" supported="no">
<description>Touki Denshou - Angel Eyes (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Tecmo</publisher>
+ <info name="alt_title" value="闘姫伝承 ANGEL EYES"/>
<info name="serial" value="SLPS-01168" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13136,8 +13464,9 @@ A few comments on these:
<!-- boot OK -->
<software name="toyotane" supported="no">
<description>Toyota Netz Racing (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Atlus</publisher>
+ <info name="alt_title" value="ソフト ネッツ・レーシング"/>
<info name="serial" value="SLPM-80429" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13150,8 +13479,9 @@ A few comments on these:
<!-- boot ok -->
<software name="toysdrea" supported="no">
<description>Toys Dream (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>KSS</publisher>
+ <info name="alt_title" value="トイズドリーム"/>
<info name="serial" value="SLPS-01704" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13164,13 +13494,14 @@ A few comments on these:
<!-- boot OK -->
<software name="tripuzzj" supported="no">
<description>Tripuzz (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-0911" />
+ <year>1997</year>
+ <publisher>Santos</publisher>
+ <info name="alt_title" value="トリパズ"/>
+ <info name="serial" value="SLPS-00911" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
- <disk name="tripuzz (japan) [slps-0911]" sha1="ee7b2282597dde183796d7a1b50994565e047f4d"/>
+ <disk name="tripuzz (japan) [slps-00911]" sha1="ee7b2282597dde183796d7a1b50994565e047f4d"/>
</diskarea>
</part>
</software>
@@ -13178,8 +13509,9 @@ A few comments on these:
<!-- boot ok -->
<software name="trumpshi" supported="no">
<description>Trump Shiyouyo! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Bottom Up</publisher>
+ <info name="alt_title" value="トランプしようよ!"/>
<info name="serial" value="SLPS-01440" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13194,6 +13526,7 @@ A few comments on these:
<description>Tsun-tsun-gumi 2 - Moji Moji Bakkun (Japan)</description>
<year>199?</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="alt_title" value=""/>
<info name="serial" value="SLPS-01694" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13206,8 +13539,9 @@ A few comments on these:
<!-- boot ok -->
<software name="tsuntsu3" supported="no">
<description>Tsun-tsun-gumi 3 - Kanji Vader (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Kodansha</publisher>
+ <info name="alt_title" value="つんつん組3 〜もじもじぱっくん〜"/>
<info name="serial" value="SLPS-01839" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13220,8 +13554,9 @@ A few comments on these:
<!-- black screen -->
<software name="tsuribak" supported="no">
<description>Tsuri Baka Nisshi (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Shogakukan</publisher>
+ <info name="alt_title" value="釣りバカ日誌"/>
<info name="serial" value="SLPS-00440" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13234,8 +13569,9 @@ A few comments on these:
<!-- boot ok -->
<software name="tvanimat" supported="no">
<description>TV Animation X - Unmei no Tatakai (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="TVanimation X〜運命の選択〜"/>
<info name="serial" value="SLPS-03459" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13248,8 +13584,9 @@ A few comments on these:
<!-- black screen -->
<software name="twingodd" supported="no">
<description>Twin Goddesses (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1994</year>
+ <publisher>PolyGram</publisher>
+ <info name="alt_title" value="ツイン・ゴッデス"/>
<info name="serial" value="SLPS-00018" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13262,8 +13599,9 @@ A few comments on these:
<!-- black screen -->
<software name="twinbeet" supported="no">
<description>Twinbee Taisen Puzzle-Dama (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1994</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ツインビー対戦ぱずるだま"/>
<info name="serial" value="SLPS-00015" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13276,8 +13614,9 @@ A few comments on these:
<!-- boot ok -->
<software name="twinbeer" supported="no">
<description>TwinBee-RPG (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="ツインビーRPG"/>
<info name="serial" value="SLPM-86077" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13289,9 +13628,10 @@ A few comments on these:
<!-- boot ok -->
<software name="twinssto" supported="no">
- <description>Twins Story (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Twins Story - Kimi ni Tsutaetakute (Japan)</description>
+ <year>1999</year>
+ <publisher>Panther</publisher>
+ <info name="alt_title" value="ツインズストーリー きみにつたえたくて・・・"/>
<info name="serial" value="SLPS-02126" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13304,8 +13644,9 @@ A few comments on these:
<!-- boot OK -->
<software name="twotenka" supported="no">
<description>Two-Tenkaku (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1995</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="通天閣"/>
<info name="serial" value="SLPS-00131" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13333,8 +13674,9 @@ A few comments on these:
<!-- boot ok -->
<software name="ufoadayi" supported="no">
<description>UFO - A Day in the Life (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>ASCII</publisher>
+ <info name="alt_title" value="UFO ~A day in the life~"/>
<info name="serial" value="SLPS-02032" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13347,8 +13689,9 @@ A few comments on these:
<!-- black screen, bad sounds -->
<software name="ugetsuki" supported="no">
<description>Ugetsu Kitan (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Tonkin House</publisher>
+ <info name="alt_title" value="雨月奇譚 〜うげつきたん〜"/>
<info name="serial" value="SLPS-00391" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13361,8 +13704,9 @@ A few comments on these:
<!-- boot ok -->
<software name="ukiukits" supported="no">
<description>Ukiuki Tsuri Tengoku - Uogami Densetsu wo Oe (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Teichiku</publisher>
+ <info name="alt_title" value="ウキウキ釣り天国〜魚神伝説を追え〜"/>
<info name="serial" value="SLPS-02579" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13375,8 +13719,9 @@ A few comments on these:
<!-- stuck on sony logo -->
<software name="ultimaun" supported="no">
<description>Ultima Underworld - The Stygian Abyss (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Electronic Arts</publisher>
+ <info name="alt_title" value="ウルティマ アンダーワールド"/>
<info name="serial" value="SLPS-00742" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13388,9 +13733,10 @@ A few comments on these:
<!-- boot ok -->
<software name="ultraman" supported="no">
- <description>Ultraman Tiga &amp; Dyna Fighting Evolution - New Generations (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Ultraman Tiga &#38; Ultraman Dyna Fighting Evolution - New Generations (Japan)</description>
+ <year>1998</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="ウルトラマンティガ&#38;ダイナ 新たなる2つの光"/>
<info name="serial" value="SLPS-01455" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13403,8 +13749,9 @@ A few comments on these:
<!-- boot ok -->
<software name="ultramze" supported="no">
<description>Ultraman Zearth (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Tohoku Shinsha</publisher>
+ <info name="alt_title" value="ウルトラマンゼアス"/>
<info name="serial" value="SLPS-00652" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13416,9 +13763,10 @@ A few comments on these:
<!-- black screen after company logos -->
<software name="uminonus" supported="no">
- <description>Umi no Nushi Tsuri (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Umi No Nushi Tsuri Takarajimi NI Mukatte (Japan)</description>
+ <year>1999</year>
+ <publisher>Pack-in-Soft</publisher>
+ <info name="alt_title" value="海のぬし釣り−宝島に向かって−"/>
<info name="serial" value="SLPS-02172" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13430,9 +13778,10 @@ A few comments on these:
<!-- black screen -->
<software name="umiharak" supported="no">
- <description>Umihara Kawase Shun - Second Edition (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Umihara Kawase Shun - Second Edition (Maruan Series 1) (Japan)</description>
+ <year>2000</year>
+ <publisher>Xing</publisher>
+ <info name="alt_title" value="マル安シリーズ1 海腹川背・旬 〜セカンドエディション〜"/>
<info name="serial" value="SLPS-02549" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13445,8 +13794,9 @@ A few comments on these:
<!-- boot ok -->
<software name="ungrawal" supported="no">
<description>Ungra Walker (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Success</publisher>
+ <info name="alt_title" value="アングラウォーカー"/>
<info name="serial" value="SLPM-87055" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13459,8 +13809,9 @@ A few comments on these:
<!-- boot ok -->
<software name="urawazam" supported="no">
<description>Urawaza Mahjong - Korette Tenhoutte Yatsukai (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>Spike</publisher>
+ <info name="alt_title" value="裏技麻雀〜これって天和ってやつかい〜"/>
<info name="serial" value="SLPS-02807" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13473,9 +13824,10 @@ A few comments on these:
<!-- boot OK -->
<software name="vtennis2" supported="no">
<description>V-Tennis 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS 00469" />
+ <year>1996</year>
+ <publisher>Tonkin House</publisher>
+ <info name="alt_title" value="Vテニス2"/>
+ <info name="serial" value="SLPS-00469" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
@@ -13485,10 +13837,11 @@ A few comments on these:
</software>
<!-- boot ok, every other fmv frame broken -->
- <software name="vampirek" supported="no">
- <description>Vampire - Kyuuketsuki Densetsu (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <software name="vampirky" supported="no">
+ <description>Vampir Kyuuketsuki Densetsu (Japan)</description>
+ <year>1999</year>
+ <publisher>Artdink</publisher>
+ <info name="alt_title" value="ヴァンピール 吸血鬼伝説"/>
<info name="serial" value="SLPS-01932" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13501,8 +13854,9 @@ A few comments on these:
<!-- boot ok -->
<software name="vehiclec" supported="no">
<description>Vehicle Cavalier (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Vanguard Works</publisher>
+ <info name="alt_title" value="ヴィーグル・キャヴァリアー"/>
<info name="serial" value="SLPS-00232" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13515,8 +13869,9 @@ A few comments on these:
<!-- boot ok -->
<software name="victorys" supported="no">
<description>Victory Spike (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Imagineer</publisher>
+ <info name="alt_title" value="ヴィクトリー・スパイク"/>
<info name="serial" value="SLPS-00372" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13528,9 +13883,10 @@ A few comments on these:
<!-- black screen after copyrights -->
<software name="victoryz" supported="no">
- <description>Victory Zone (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Victory Zone - Real Pachinko Simulator (Japan)</description>
+ <year>1995</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="ヴィクトリーゾーン"/>
<info name="serial" value="SCPS-10002" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13543,8 +13899,9 @@ A few comments on these:
<!-- black screen after memory card message -->
<software name="virtualh" supported="no">
<description>Virtual Hiyru no Ken (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Culture Brain</publisher>
+ <info name="alt_title" value="バーチャル飛龍の拳"/>
<info name="serial" value="SLPS-00338" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13557,8 +13914,9 @@ A few comments on these:
<!-- boot ok -->
<software name="virtualk" supported="no">
<description>Virtual Kyotei '98 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Nihon Bussan</publisher>
+ <info name="alt_title" value="バーチャル競艇 '98"/>
<info name="serial" value="SLPS-01396" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13571,8 +13929,9 @@ A few comments on these:
<!-- boot ok -->
<software name="virtualp" supported="no">
<description>Virtual Pro Wrestling (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Asmik Ace</publisher>
+ <info name="alt_title" value="バーチャルプロレスリング"/>
<info name="serial" value="SLPS-00449" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13585,8 +13944,9 @@ A few comments on these:
<!-- boot ok -->
<software name="virus" supported="no">
<description>Virus - The Battle Field (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>PolyGram</publisher>
+ <info name="alt_title" value="病毒 - 战场"/>
<info name="serial" value="SLPS-02008" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13598,9 +13958,10 @@ A few comments on these:
<!-- boot ok -->
<software name="visionof" supported="no">
- <description>Vision Of Escaflowne, The (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Vision Of Escaflowne, The (Limited Edition) (Japan)</description>
+ <year>1999</year>
+ <publisher>Bandai</publisher>
+ <info name="alt_title" value="天空のエスカフローネ限定版 Fortune BOX"/>
<info name="serial" value="SLPS-01014" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13613,8 +13974,9 @@ A few comments on these:
<!-- hangs loading afte initial fmv -->
<software name="volfossj" supported="no">
<description>Volfoss (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Namco</publisher>
+ <info name="alt_title" value="ボルフォス"/>
<info name="serial" value="SLPS-03140" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13626,9 +13988,10 @@ A few comments on these:
<!-- boot ok -->
<software name="wagamama" supported="no">
- <description>Wagamama Fairy Mirumo de Pon! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Wagamama Fairy Mirumo de Pon! - Mirumo no Mahou Gakkou Monogatari (Japan)</description>
+ <year>2003</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="わがままフェアリーミルモでポン! ミルモの魔法学校ものがたり"/>
<info name="serial" value="SLPM-87220" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13641,8 +14004,9 @@ A few comments on these:
<!-- boot ok -->
<software name="wangantr" supported="no">
<description>Wangan Trial (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Pack-in-Soft</publisher>
+ <info name="alt_title" value="湾岸トライアル"/>
<info name="serial" value="SLPS-01213, SLPS-01214" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom1" interface="psx_cdrom">
@@ -13659,9 +14023,10 @@ A few comments on these:
<!-- boot ok -->
<software name="warerami" supported="no">
- <description>Warera Mitsurin Tankentai!! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Warera Mitsubayashi Tankentai!! (Japan)</description>
+ <year>2000</year>
+ <publisher>Victor</publisher>
+ <info name="alt_title" value="われら密林探検隊!!"/>
<info name="serial" value="SLPS-02658" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13673,9 +14038,10 @@ A few comments on these:
<!-- boot ok -->
<software name="watersum" supported="no">
- <description>Water Summer (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Water Summer (Limited Edition) (Japan)</description>
+ <year>2002</year>
+ <publisher>Princess Soft</publisher>
+ <info name="alt_title" value="WATER SUMMER(初回限定版)"/>
<info name="serial" value="SLPM-87085" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13687,9 +14053,10 @@ A few comments on these:
<!-- boot ok -->
<software name="weddingp" supported="no">
- <description>Wedding Peach - Doki Doki Oironaoshi Fashion Daisakuse (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Wedding Peach - Doki Doki Oiro-Naoshi Fashion Daisakusen (Japan)</description>
+ <year>1996</year>
+ <publisher>KSS</publisher>
+ <info name="alt_title" value="ウェディングピーチ ドキドキお色直し"/>
<info name="serial" value="SLPS-00368" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13702,13 +14069,14 @@ A few comments on these:
<!-- stuck on sony logo -->
<software name="welcomeh" supported="no">
<description>Welcome House</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="Welcome Hous" />
+ <year>1996</year>
+ <publisher>Gust</publisher>
+ <info name="alt_title" value="ウエルカムハウス"/>
+ <info name="serial" value="SLPS-00190" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
- <disk name="welcome house" sha1="0aa66eca197e87d56c0cc30c45dbdb311883d3d9"/>
+ <disk name="welcome house (japan) [slps-00190]" sha1="0aa66eca197e87d56c0cc30c45dbdb311883d3d9"/>
</diskarea>
</part>
</software>
@@ -13716,8 +14084,9 @@ A few comments on these:
<!-- boot ok -->
<software name="weltorve" supported="no">
<description>Weltorv Estleia (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Hudson</publisher>
+ <info name="alt_title" value="ウエルト オブ イストリア"/>
<info name="serial" value="SLPS-01887" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13730,8 +14099,9 @@ A few comments on these:
<!-- boot ok -->
<software name="whitedia" supported="no">
<description>White Diamond (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Escot</publisher>
+ <info name="alt_title" value="ホワイトダイアモンド"/>
<info name="serial" value="SLPS-02352" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13744,8 +14114,9 @@ A few comments on these:
<!-- hangs / gets stuck on loading screen playing bad sound -->
<software name="wingover" supported="no">
<description>Wing Over (Japan)</description>
- <year>199?</year>
+ <year>1997</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="alt_title" value="ウイングオーバー"/>
<info name="serial" value="SLPS-00598" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13758,8 +14129,9 @@ A few comments on these:
<!-- boot ok -->
<software name="wizardsh" supported="no">
<description>Wizard's Harmony R (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Arc System Works</publisher>
+ <info name="alt_title" value="Wizard's Harmony R"/>
<info name="serial" value="SLPS-01716" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13772,8 +14144,9 @@ A few comments on these:
<!-- boot ok -->
<software name="wolffang" supported="no">
<description>Wolf Fang (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Xing</publisher>
+ <info name="alt_title" value="ウルフファング"/>
<info name="serial" value="SLPS-00254" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13786,8 +14159,9 @@ A few comments on these:
<!-- some games work -->
<software name="wonder3a" supported="no">
<description>Wonder 3 Arcade Gears (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Xing</publisher>
+ <info name="alt_title" value="ワンダー3"/>
<info name="serial" value="SLPS-00927" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13800,8 +14174,9 @@ A few comments on these:
<!-- crash MESS -->
<software name="wonderbc" supported="no">
<description>Wonder B-Cruise - Dogiborn Daisakusen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Sunsoft</publisher>
+ <info name="alt_title" value="わんダービークルズ"/>
<info name="serial" value="SLPS-02322" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13814,8 +14189,9 @@ A few comments on these:
<!-- boot ok -->
<software name="wondertr" supported="no">
<description>Wonder Tracker (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="ワンダートレック"/>
<info name="serial" value="SCPS-10072" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13827,9 +14203,10 @@ A few comments on these:
<!-- boot ok -->
<software name="worldlea" supported="no">
- <description>World League Soccer - Challenge Nippon! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>World League Soccer - Challenge Nippon! ( Family Price 1500) (Japan)</description>
+ <year>2000</year>
+ <publisher>Coconuts Japan</publisher>
+ <info name="alt_title" value="ワールドリーグサッカー"/>
<info name="serial" value="SLPS-02687" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13842,8 +14219,9 @@ A few comments on these:
<!-- black screen -->
<software name="worldnev" supported="no">
<description>World Neverland - Olerud Oukoku Monogatari (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>RiverhillSoft</publisher>
+ <info name="alt_title" value="World Neverland〜オルルド王国物語〜"/>
<info name="serial" value="SLPS-01037" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13856,8 +14234,9 @@ A few comments on these:
<!-- boot ok -->
<software name="worldpro" supported="no">
<description>World Pro Tennis '98 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>I.Magic</publisher>
+ <info name="alt_title" value="ワールドプロテニス98"/>
<info name="serial" value="SLPS-01379" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13870,8 +14249,9 @@ A few comments on these:
<!-- boot ok -->
<software name="wwfwrest" supported="no">
<description>WWF Wrestlemania - The Arcade Game (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Acclaim</publisher>
+ <info name="alt_title" value="レッスルマニア・ジ・アーケードゲーム"/>
<info name="serial" value="SLPS-00223" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13884,8 +14264,9 @@ A few comments on these:
<!-- boot OK -->
<software name="xracingj" supported="no">
<description>X-Racing (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Nichibutsu</publisher>
+ <info name="alt_title" value="X.RACING(エックスレーシング)"/>
<info name="serial" value="SLPS-01063" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13898,8 +14279,9 @@ A few comments on these:
<!-- boot ok, but invisible player sprite -->
<software name="x2noreli" supported="no">
<description>X2 - No Relief (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1997</year>
+ <publisher>Capcom</publisher>
+ <info name="alt_title" value="X2"/>
<info name="serial" value="SLPS-00766" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13926,8 +14308,9 @@ A few comments on these:
<!-- boot ok -->
<software name="yakiniku" supported="no">
<description>Yakiniku Bugyou (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="焼肉奉行"/>
<info name="serial" value="SLPS-03209" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13940,8 +14323,9 @@ A few comments on these:
<!-- boot ok -->
<software name="yakitori" supported="no">
<description>Yakitori Musume - Sugo Ude Hanjouki (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Media</publisher>
+ <info name="alt_title" value="やきとり娘〜スゴ腕繁盛記〜"/>
<info name="serial" value="SLPS-03435" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13954,8 +14338,9 @@ A few comments on these:
<!-- boot ok -->
<software name="yamagaau" supported="no">
<description>Yamagata Digital Museum - Autumn (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Imagineer</publisher>
+ <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタAutumn"/>
<info name="serial" value="SLPS-01662" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13968,8 +14353,9 @@ A few comments on these:
<!-- boot ok -->
<software name="yamagasp" supported="no">
<description>Yamagata Digital Museum - Spring (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Imagineer</publisher>
+ <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタSpring"/>
<info name="serial" value="SLPS-01581" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13982,8 +14368,9 @@ A few comments on these:
<!-- boot ok -->
<software name="yamagasu" supported="no">
<description>Yamagata Digital Museum - Summer (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Imagineer</publisher>
+ <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタSummer"/>
<info name="serial" value="SLPS-01661" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -13996,8 +14383,9 @@ A few comments on these:
<!-- boot ok -->
<software name="yamagawi" supported="no">
<description>Yamagata Digital Museum - Winter (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Imagineer</publisher>
+ <info name="alt_title" value="デジタルミュージアム ヒロ・ヤマガタWinter"/>
<info name="serial" value="SLPS-01663" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14007,25 +14395,12 @@ A few comments on these:
</part>
</software>
- <!-- boot ok -->
- <software name="yasoukyo" supported="no">
- <description>Yasoukyoku 2 (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
- <info name="serial" value="SLPS-03213" />
- <sharedfeat name="compatibility" value="NTSC-J"/>
- <part name="cdrom" interface="psx_cdrom">
- <diskarea name="cdrom">
- <disk name="yasoukyoku 2 (japan) [slps-03213]" sha1="2469c7c6d8d69835aae534b91c59b03aa4d2dd96"/>
- </diskarea>
- </part>
- </software>
-
<!-- black screen -->
<software name="yoshimot" supported="no">
<description>Yoshimoto Muchicco Daikessen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Sony</publisher>
+ <info name="alt_title" value="ヨシモト ムチッ子大決戦"/>
<info name="serial" value="SLPS-02308" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14037,9 +14412,10 @@ A few comments on these:
<!-- boot ok -->
<software name="youkaiha" supported="no">
- <description>Youkai Hanaasobi (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Youkai Hana Asobi (Japan)</description>
+ <year>2001</year>
+ <publisher>Unbalance</publisher>
+ <info name="alt_title" value="妖怪花あそび"/>
<info name="serial" value="SLPM-86857" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14052,8 +14428,9 @@ A few comments on these:
<!-- black screen -->
<software name="yugiohmo" supported="no">
<description>Yu-Gi-Oh! Monster Capsule Breed &amp; Battle (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Konami</publisher>
+ <info name="alt_title" value="遊戯王 モンスターカプセル ブリード&バトル"/>
<info name="serial" value="SLPM-86096" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14066,8 +14443,9 @@ A few comments on these:
<!-- boot ok -->
<software name="yukinkob" supported="no">
<description>Yukinko Burning (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2002</year>
+ <publisher>Princess Soft</publisher>
+ <info name="alt_title" value="ゆきんこ ばあにんぐ"/>
<info name="serial" value="SLPM-87013" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14080,8 +14458,9 @@ A few comments on these:
<!-- white screen after initial menus -->
<software name="yumenots" supported="no">
<description>Yume no Tsubasa (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2000</year>
+ <publisher>KID</publisher>
+ <info name="alt_title" value="夢のつばさ"/>
<info name="serial" value="SLPS-02954" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14094,8 +14473,9 @@ A few comments on these:
<!-- black screen -->
<software name="yumeiroi" supported="no">
<description>Yume-Iroiro (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Feathered</publisher>
+ <info name="alt_title" value="夢☆色いろ"/>
<info name="serial" value="SLPS-01401" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14107,14 +14487,15 @@ A few comments on these:
<!-- black screen -->
<software name="yuugenga" supported="no">
- <description>Yuugen Gaisha Chikyuu Boueitai - Earth Defenders Corporation (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Yuugen Kaisha Chikyuu Boueitai - Guard of Earth Organization (Japan)</description>
+ <year>1999</year>
+ <publisher>Media Rings</publisher>
+ <info name="alt_title" value="有限会社 地球防衛隊"/>
<info name="serial" value="SLPS-02024" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
<diskarea name="cdrom">
- <disk name="yuugen gaisha chikyuu boueitai - earth defenders corporation (japan) [slps-02024]" sha1="34f2ae1cd241e5bfe494ee3f1d8545e00d303010"/>
+ <disk name="yuugen kaisha chikyuu boueitai - guard of earth organization (japan) [slps-02024]" sha1="34f2ae1cd241e5bfe494ee3f1d8545e00d303010"/>
</diskarea>
</part>
</software>
@@ -14122,8 +14503,9 @@ A few comments on these:
<!-- boot ok, bad fmv every other frame -->
<software name="yuukyuun" supported="no">
<description>Yuukyuu no Eden - The Eternal Eden (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>ASCII</publisher>
+ <info name="alt_title" value="悠久のエデン"/>
<info name="serial" value="SLPS-01928" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14150,8 +14532,9 @@ A few comments on these:
<!-- boot ok, hang on loading screen after first menu -->
<software name="yuuyamid" supported="no">
<description>Yuuyami Doori Tankentai (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1999</year>
+ <publisher>Spike</publisher>
+ <info name="alt_title" value="夕闇通り探検隊"/>
<info name="serial" value="SLPS-02274" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14164,8 +14547,9 @@ A few comments on these:
<!-- boot ok -->
<software name="zapsnowb" supported="no">
<description>Zap! Snowboarding Trix '98 (Japan)</description>
- <year>199?</year>
+ <year>1997</year>
<publisher>&lt;unknown&gt;</publisher>
+ <info name="alt_title" value="ZAP! SNOWBOADRING TRIX '98"/>
<info name="serial" value="SLPS-00909" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14178,8 +14562,9 @@ A few comments on these:
<!-- boot ok -->
<software name="zeiramzo" supported="no">
<description>Zeiramzone (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1996</year>
+ <publisher>Banpresto</publisher>
+ <info name="alt_title" value="ゼイラムゾーン"/>
<info name="serial" value="SLPS-00575" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14192,8 +14577,9 @@ A few comments on these:
<!-- black screen after company logos -->
<software name="zeitgeis" supported="no">
<description>Zeitgeist (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1995</year>
+ <publisher>Taito</publisher>
+ <info name="alt_title" value="ツァイトガイスト"/>
<info name="serial" value="SLPS-00034" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14206,8 +14592,9 @@ A few comments on these:
<!-- boot ok -->
<software name="zennippo" supported="no">
<description>Zen-Nippon Joshi Pro Wrestling - Joou Densetsu Yume no Taikousen (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>TEN</publisher>
+ <info name="alt_title" value="全日本女子プロレス 女王伝説 夢の対抗戦"/>
<info name="serial" value="SLPS-01475" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14219,9 +14606,10 @@ A few comments on these:
<!-- black screen -->
<software name="zennipok" supported="no">
- <description>Zen-Nippon Pro-Wrestling - Ouja no Kon (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Zen-Nippon Pro Wrestling - Ouja no Kon (Japan)</description>
+ <year>1999</year>
+ <publisher>Human</publisher>
+ <info name="alt_title" value="全日本プロレス 王者の魂"/>
<info name="serial" value="SLPS-01849" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14233,9 +14621,10 @@ A few comments on these:
<!-- boot OK -->
<software name="zero4cha" supported="no">
- <description>Zero 4 Champ Doozy-J (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Zero4 Champ Doozy-J (Japan)</description>
+ <year>1997</year>
+ <publisher>Media Rings</publisher>
+ <info name="alt_title" value="ZERO4 CHAMP Doozy-J"/>
<info name="serial" value="SLPS-00755" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14248,8 +14637,9 @@ A few comments on these:
<!-- boot OK -->
<software name="zigzagba" supported="no">
<description>Zig Zag Ball (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>1998</year>
+ <publisher>Upstar</publisher>
+ <info name="alt_title" value="ZIG ZAG BALL"/>
<info name="serial" value="SLPS-01483" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14261,9 +14651,10 @@ A few comments on these:
<!-- boot OK -->
<software name="zipangut" supported="no">
- <description>Zipangutou - Unmei wa Saikoro ga Kimeru! (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Zipangujima&#58; Unmei wa Saikoro ga Kimeru! (Japan)</description>
+ <year>1999</year>
+ <publisher>Human</publisher>
+ <info name="alt_title" value="じぱんぐ島 〜運命はサイコロが決める!?〜"/>
<info name="serial" value="SLPS-02260" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14276,8 +14667,9 @@ A few comments on these:
<!-- black screen after logos -->
<software name="zoidsbat" supported="no">
<description>Zoids - Battle Card Game - Seihou Tairiku Senki (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <year>2001</year>
+ <publisher>Tomy</publisher>
+ <info name="alt_title" value="ゾイドバトルカードゲーム 西方大陸戦記"/>
<info name="serial" value="SLPS-03255" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14289,9 +14681,10 @@ A few comments on these:
<!-- boot OK -->
<software name="zoidstei" supported="no">
- <description>Zoids - Teikoku vs. Kyouwakoku - Meka Seitai no Idenshi (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Zoids - Zenebus VS Heric (Japan)</description>
+ <year>2000</year>
+ <publisher>Tomy</publisher>
+ <info name="alt_title" value="メカ生体ゾイド"/>
<info name="serial" value="SLPS-02982" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
@@ -14303,9 +14696,10 @@ A few comments on these:
<!-- boot OK -->
<software name="zoids2" supported="no">
- <description>Zoids 2 - Heric Kyouwakoku vs. Guylos Teikoku (Japan)</description>
- <year>199?</year>
- <publisher>&lt;unknown&gt;</publisher>
+ <description>Zoids 2 - Helic Republic VS Guylos Empire (Japan)</description>
+ <year>2002</year>
+ <publisher>Tomy</publisher>
+ <info name="alt_title" value="ZOIDS2 ヘリック共和国VSガイロス帝国"/>
<info name="serial" value="SLPS-03389" />
<sharedfeat name="compatibility" value="NTSC-J"/>
<part name="cdrom" interface="psx_cdrom">
diff --git a/hash/tvc_flop.xml b/hash/tvc_flop.xml
new file mode 100644
index 00000000000..7031d62dadc
--- /dev/null
+++ b/hash/tvc_flop.xml
@@ -0,0 +1,10579 @@
+<?xml version="1.0"?>
+<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
+
+<!--
+
+Most of these can be run in BASIC by using LOAD"*"
+If the program doesn't automatically start, start it with RUN
+
+-->
+
+
+<softwarelist name="tvc_flop" description="Videoton TVC floppies">
+ <software name="21">
+ <description>21</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="21.dsk" size="368640" crc="1b28d754" sha1="1d5931a3bc46d61b5b08a59dee3faf341f56f95d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="3dim">
+ <description>Három dimenziós ábrázolás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="3dim.dsk" size="368640" crc="769d7cc6" sha1="78cddddf3051e14cada03a806af7a434369168bd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="3dlabiri">
+ <description>3D Labirintus</description>
+ <year>198?</year>
+ <publisher>Buddha Softhouse</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="3dlabirintus.dsk" size="368640" crc="b27d4d34" sha1="680713aba577b684d81cf11c9e371fef0ad2e4b5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labdatvc">
+ <description>5 Labdajáték</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="5labdajatek.dsk" size="368640" crc="3b8d5d17" sha1="72cc5cfa18ee995757c7356b9aa6d8879b3aad7c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bnh">
+ <description>A Bolygó Neve - Halál</description>
+ <year>1988</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="a_bolygo_neve_halal.dsk" size="368640" crc="bb7b1cbe" sha1="77b70b640d9bf0bc7444097f9cd5e7c37afa3dcb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="asuniked">
+ <description>A Sünikéd Éhes...</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="a_suniked_ehes.dsk" size="368640" crc="a366c8fe" sha1="cc1fc3aa7fb3bec8b385b33a75798d0c56c4d3c4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab01">
+ <description>Ábrázolás - 01 Tartalomjegyzék</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab1.dsk" size="368640" crc="65ab93f1" sha1="7f3d70de1f248e5a1eb109c2501e8818bd63a5e3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab02">
+ <description>Ábrázolás 02 - Téglatest 6 Vetülete</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab2.dsk" size="368640" crc="ec67b321" sha1="a5e0045b6160c156a5af38c527a973bda4f8bb5d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab03">
+ <description>Ábrázolás 03 - Hatoldalú hasáb ferde síkmetszése</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab3.dsk" size="368640" crc="0658943c" sha1="fdfa0d2bb63787bd7beed3d107732279acd5d5f5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab04">
+ <description>Ábrázolás 04 - Gúla ferde síkmetszése</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab4.dsk" size="368640" crc="3e7914d3" sha1="6f60e983b9069ba559ea9cb250bf6dd53c136353" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab05">
+ <description>Ábrázolás 05 - Háromoldalú hasáb csonkítása</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab5.dsk" size="368640" crc="d24eae87" sha1="99166268af1c29c223e2a9a2a62a38c1349ef7ec" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab06">
+ <description>Ábrázolás 06 - Itt a pont, ott a pont, hol a pont?</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab6.dsk" size="368640" crc="9d118829" sha1="64cbd48d9dd127fcbfbb88407209bdba3da2e1f8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab07">
+ <description>Ábrázolás 07 - Hamis? Igaz?</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab7.dsk" size="368640" crc="cf9ab8ca" sha1="86581ab8e3070fcb83febd1e4c07d8c5de99df17" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab08">
+ <description>Ábrázolás 08 - Kockázzunk!</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab8.dsk" size="368640" crc="faa42d26" sha1="009e4dd4563e11046f9b2c35c6c8409bffd0d66b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab09">
+ <description>Ábrázolás 09 - Téglatest véletlen vetületei</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab9.dsk" size="368640" crc="e1c33bee" sha1="32462c444a7c87ece8ea7069c504516664db5f9a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ab10">
+ <description>Ábrázolás 10 - Hatoldalú hasáb véletlen vetületei</description>
+ <year>198?</year>
+ <publisher>László Papp</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ab10.dsk" size="368640" crc="9b1ae62a" sha1="44b1d4e7b17df5a378c7099801b694fcf975bcbc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adatkeze">
+ <description>Adatfile-kezelő program</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="adatkeze.dsk" size="368640" crc="e6804a98" sha1="2f8500a0d86d7cd259a36425d048100e99b9ffc2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="adventur">
+ <description>The Adventure Game</description>
+ <year>1987</year>
+ <publisher>Tamás Juhász</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="adventure.dsk" size="368640" crc="8e7471ce" sha1="164d93ac82ba43ce30b033022b3b0e2dbd3e4222" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gyikkira">
+ <description>A Gyíkkirály</description>
+ <year>1990</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="agyikkiraly.dsk" size="368640" crc="7fe66e19" sha1="f8807fbdff3c491dfb96c20726fbf2811ec6d23a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="aknaker">
+ <description>Aknakereső</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="aknakereso.dsk" size="368640" crc="cd4c1b10" sha1="26606455054da36f2de7367370043528158dfcdc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="aknamezo">
+ <description>Aknamező</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="aknamezo.dsk" size="368640" crc="de8cc54a" sha1="208d9bdfbd5a9e3506c07e3a4168170ff063b06a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="aknamezoa" cloneof="aknamezo">
+ <description>Aknamező (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="aknamev2.dsk" size="368640" crc="14acc80e" sha1="f5b507caa2dd18d4b71b47e6a22b8324fc4aeb25" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alfa">
+ <description>Alfa</description>
+ <year>198?</year>
+ <publisher>JÓZSIsoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="alfa.dsk" size="368640" crc="d9ef6ce4" sha1="1ed213223e3e0e5286f1112435f8e52f628e507f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alien8">
+ <description>Alien 8</description>
+ <year>1985</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="alien8.dsk" size="368640" crc="2ef199c8" sha1="4d4e538f429471a49acef3a19beebef50ffb8a47" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alien8a" cloneof="alien8">
+ <description>Alien 8 (Alt)</description>
+ <year>1985</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="alienv2.dsk" size="368640" crc="dbc4a596" sha1="a2c450cb31e67402b816b83f7242c746fce2730f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alien8b" cloneof="alien8">
+ <description>Alien 8 (Alt 2)</description>
+ <year>1985</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="alien8v3.dsk" size="368640" crc="08201e6e" sha1="3436561e3afd0febb0f77273b88ec3e7861f76bb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="alien8c" cloneof="alien8">
+ <description>Alien 8 (Alt 3)</description>
+ <year>1985</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="alien8v4.dsk" size="368640" crc="e28476e0" sha1="65e7156861454348a78459b83a91a6085f4d0089" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="amoba">
+ <description>Amőba</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="amoba.dsk" size="368640" crc="f903c844" sha1="223858ffbcf246058715bb950d2c55f59cc2c305" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="amobaa" cloneof="amoba">
+ <description>Amőba (Alt)</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="amobav2.dsk" size="368640" crc="2a634df1" sha1="8d39aacbbdd4f183b887187fd3115bf96ad6ed25" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="angol">
+ <description>Angol</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="angol.dsk" size="368640" crc="76232f1e" sha1="5cbbfeaec71261f7bb2acb8dfa8f7c1c1c312ed6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="antiriad">
+ <description>Antiriad</description>
+ <year>1986</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="antiriad.dsk" size="368640" crc="e024feda" sha1="646402c19cbd4392436e99905731dd8975d6d73a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="arnhem">
+ <description>Arnhem</description>
+ <year>1985</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="arnhem.dsk" size="368640" crc="250d1cea" sha1="f5516e4899e22158a828b094083dba93782eb742" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="assembly">
+ <description>Assembly</description>
+ <year>198?</year>
+ <publisher>Atlas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="assembly.dsk" size="368640" crc="d9fb0a24" sha1="52306cc19fe780e48e1b7701f28de32d2774040e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="astrobl">
+ <description>Astro Blaster</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="astroblaster.dsk" size="368640" crc="625498c9" sha1="0d8abc3e9b7e01caa64ee8ff35d575fd9a02e2a4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="astroblt" cloneof="astrobl">
+ <description>Astro Blaster (Trained)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="astroblastertrainer.dsk" size="368640" crc="01e6ced4" sha1="4b396dfb79959f33b6a227eb0c6cbe5947e0a1ae" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="astrobat">
+ <description>Astro Blaster (Atlas)</description>
+ <year>198?</year>
+ <publisher>Atlas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="astroba.dsk" size="368640" crc="891b107d" sha1="9d6545168d1583ea4ed599a66f0da6c7c2b49b9d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="astrocsa">
+ <description>Asztro csata</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="astrocsata.dsk" size="368640" crc="b9e32bff" sha1="3ceab9df1826028640fe9710d9f93680b8c6decf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="atkeles">
+ <description>Átkelés</description>
+ <year>198?</year>
+ <publisher>I. Juhász</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="atkeles.dsk" size="368640" crc="68a5c45c" sha1="300b0317413540981bc8e745345a67a52024f852" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="atomero">
+ <description>Atomerőmű</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="atomeromu.dsk" size="368640" crc="c8275482" sha1="491e84eb39ebac2406caacafe7bf17a4e1d55c75" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="atomix">
+ <description>Atomix</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="atomix.dsk" size="368640" crc="7b987f43" sha1="3b9815f9f2a25e721a13ccc0c470e0a1e04d3d8e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="atomixp" cloneof="atomix">
+ <description>Atomix Plusz</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="atomixp.dsk" size="368640" crc="0a36df47" sha1="5a71425891849aa9885ed8eddff0a6ac2ef2767e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="atomixpj" cloneof="atomix">
+ <description>Atomix Plusz Javított</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="atomixpj.dsk" size="368640" crc="bd400ef6" sha1="6980499ad76ed404721a27cae6edf410f4b70bf0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="attores">
+ <description>Áttörés</description>
+ <year>198?</year>
+ <publisher>Bit &amp; Guy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="attores.dsk" size="368640" crc="d1d7e985" sha1="1542bbb22acc81c162c53b91569ea7898bbd10fb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="attoresa" cloneof="attores">
+ <description>Áttörés (Alt)</description>
+ <year>198?</year>
+ <publisher>Bit &amp; Guy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="attorv2.dsk" size="368640" crc="76462d13" sha1="12db74d0ed0e12eb01f28d966bf24b547ed0cdd8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="attoresb" cloneof="attores">
+ <description>Áttörés (Alt 2)</description>
+ <year>198?</year>
+ <publisher>Bit &amp; Guy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="attoresv3.dsk" size="368640" crc="b095d154" sha1="085cdb8acc40fb36d1e0f4dcd98dc99ba5b9e09b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="automani">
+ <description>Autó Mánia</description>
+ <year>1990</year>
+ <publisher>Széplaky Stúdió</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="automania.dsk" size="368640" crc="ecfb74dd" sha1="b6c5089b579299dae6564f7faf72efd5c1d7da25" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="autosped">
+ <description>Auto Speed</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="autosped.dsk" size="368640" crc="dd8b065c" sha1="f56f04efac8af9429aef4ea565a7798838016fa0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="awari">
+ <description>Awari</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="awari.dsk" size="368640" crc="51a580af" sha1="ab83b0a504fec56cf87a9300adafb978b78df1fd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="awaria" cloneof="awari">
+ <description>Awari (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="awariv2.dsk" size="368640" crc="9d86e42c" sha1="f256eb103dfc674302070345ba1808d10fb487b1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="awari2">
+ <description>Awari II</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="awari2.dsk" size="368640" crc="afecfb5c" sha1="5e1f8ebaa25ab82e120dc7d1fde9588e0f804877" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="awari1">
+ <description>Awari 1</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="awari_.dsk" size="368640" crc="1bd29860" sha1="370e46972ecbfebfd991806331df9702afaf3ea2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="azannya">
+ <description>Azannya!</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="azannya.dsk" size="368640" crc="7e5cbce6" sha1="00b9e19690824c56468834fc32032d176158da49" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="azsaru">
+ <description>A Zsaru</description>
+ <year>1990</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="azsaru.dsk" size="368640" crc="0669a309" sha1="f8593717fcc311cd9aa8cb60bb0d2262a59ac307" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bombazo">
+ <description>Az Utolsó Bombázó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="azutolsobombazo.dsk" size="368640" crc="3ca7673b" sha1="104aafcea03b1213c1f26be041161285e2469538" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bakterio">
+ <description>Bakteriográf</description>
+ <year>198?</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bakterio.dsk" size="368640" crc="71e26148" sha1="d4d61fcfb522ff72012b9f0e60212ed89695c994" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bananfal">
+ <description>Banánfaló</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bananfalo.dsk" size="368640" crc="0a1cebd4" sha1="81ebdb0d7364d64b312dcbe914d717c35dccf8b9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bananfala" cloneof="bananfal">
+ <description>Banánfaló (Alt)</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bananfalov2.dsk" size="368640" crc="04dd3795" sha1="23398dfc4220a58e41ec556e7be29cababc09f09" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bananfalb" cloneof="bananfal">
+ <description>Banánfaló (Alt 2)</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bananv3.dsk" size="368640" crc="b5b46bcf" sha1="12a07474029d6f1a2099bff3a0220e73636c3403" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="banyasz">
+ <description>Bányász</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="banyasz.dsk" size="368640" crc="ed81598c" sha1="169a2367e45781a84274a3113acb74b7f7741c90" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="banyasza" cloneof="banyasz">
+ <description>Bányász (Alt)</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="banyaszv2.dsk" size="368640" crc="b748801d" sha1="86d792ef16881ed05fa868c75b7d6aedb9da8f69" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="barbar">
+ <description>Barbár</description>
+ <year>198?</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="barbar.dsk" size="368640" crc="3f474c3e" sha1="be260365cbe1de44ca16e4ce7116bdd924e994ac" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="barchoba">
+ <description>Barchoba</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="barchoba.dsk" size="368640" crc="54710a53" sha1="5f7e4e8eb060711b7f137411d88d84bb24404614" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="barkochb">
+ <description>Barkochba</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="barkochba.dsk" size="368640" crc="a06d72fc" sha1="607b8ef595e3918b4266babd9562d8867aca705f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="barna">
+ <description>Barna</description>
+ <year>199?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="barna.dsk" size="368640" crc="5f0e5f7f" sha1="152f458d22998e675a02bb0def8c94b0cd2d0cc8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="basicmon">
+ <description>TV Computer BASIC Monitor</description>
+ <year>1987</year>
+ <publisher>H-Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="basicmon.dsk" size="368640" crc="d152878e" sha1="7f97e94464137fe0b49973f7bb25ff17943d15b6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="batman">
+ <description>Batman</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="batman.dsk" size="368640" crc="c9895709" sha1="14851985bfbd702eae0629c7545ce1b088892423" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bazisurh">
+ <description>Bázis - űrhajós</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bazis-urhajos.dsk" size="368640" crc="902af665" sha1="43c420cae5eec9d86be5b1fdfd20247a614c4805" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bazis">
+ <description>Bázis</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bazis.dsk" size="368640" crc="fcccab2c" sha1="ce959dabc94fdcb343cdad6a4927665a006a9078" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bekajate">
+ <description>Béka-játék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bekajate.dsk" size="368640" crc="c6fe9d67" sha1="32560aab2548d7172d7e925d86afd827af337139" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bekajatea" cloneof="bekajate">
+ <description>Béka-játék (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bekajav2.dsk" size="368640" crc="41f4f4e3" sha1="da90c598aa50fd2d7d08131542018574f9cbc893" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bekajateb" cloneof="bekajate">
+ <description>Béka-játék (Alt 2)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bekajav3.dsk" size="368640" crc="f301a96c" sha1="3cb811d888d25721acfa59198dce09b3189764ba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="beka">
+ <description>Béka</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bekav1.dsk" size="368640" crc="45dc3be4" sha1="d355d50467aad66bb55703dba19b92cf06f6113b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bekaa" cloneof="beka">
+ <description>Béka (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bekav2.dsk" size="368640" crc="8f74afaa" sha1="0c012ab8e36340d3af05514b8a549d848f7dbc20" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bekab" cloneof="beka">
+ <description>Béka (Alt 2)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bekaev.dsk" size="368640" crc="1cb67f8d" sha1="b18935762c90978abaff31990ab9be7c6a054faf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="beszelo">
+ <description>Beszélő program</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="beszelo.dsk" size="368640" crc="7223f302" sha1="07486a0c4965108506bce2986a0e43245534f0eb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="betegban">
+ <description>BetegBank</description>
+ <year>198?</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="betegbank.dsk" size="368640" crc="62d29266" sha1="bfbabffddbf1b1352829cad2aa30af73eed9ab9f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bigbadjo">
+ <description>Big Bad John</description>
+ <year>1987</year>
+ <publisher>Zsolt Dobrovics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bigbadjohn.dsk" size="368640" crc="d6a50bff" sha1="9da832f0e27120317998a6335e2504ddb1f623e4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bioritmu">
+ <description>Bioritmus (v1)</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bioritv1.dsk" size="368640" crc="37fcb814" sha1="04146134c916e49982a3ebb4c9e37821c6275462" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bioritmua" cloneof="bioritmu">
+ <description>Bioritmus (Alt)</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bioritv2.dsk" size="368640" crc="317ffc7a" sha1="00f4b3903595de53982190148febbcd2f26eef85" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="biortape" cloneof="bioritmu">
+ <description>Bioritmus (Cassette Version)</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="biortape.dsk" size="368640" crc="aebd9a62" sha1="55451395e2889dc2af6620a7be7bd69044cd89df" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="biv02">
+ <description>Biológia - Növényhatározás - Kétszikűek 1. - BIV02</description>
+ <year>1987</year>
+ <publisher>Panda Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="biv02.dsk" size="368640" crc="0e82dfbc" sha1="04d65de23e912ae8f0f994db67d62e6266b04234" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="black">
+ <description>Black</description>
+ <year>1989</year>
+ <publisher>Laszlo Csanyi</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="black.dsk" size="368640" crc="69cd924b" sha1="8d994a7bd069fcd4d40ead00634a260f6a0b88e9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="blocking">
+ <description>Blocking</description>
+ <year>1991</year>
+ <publisher>Vz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="blocking.dsk" size="368640" crc="d11ddd60" sha1="fc57732cb9a8e12f1dea1e8f10967254d11f5789" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bob">
+ <description>Bob</description>
+ <year>198?</year>
+ <publisher>Mamut Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bob.dsk" size="368640" crc="42200a37" sha1="7c6c0e471e2651f0ee1460a1e6a1df377a83f9df" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bobkutya">
+ <description>Bob (kutya)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bobkutya.dsk" size="368640" crc="7f16f8ca" sha1="ede752356380562766f6c18023cb6ce758c4aa27" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boba" cloneof="bob">
+ <description>Bob (Alt)</description>
+ <year>198?</year>
+ <publisher>Mamut Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bobv2.dsk" size="368640" crc="e295300e" sha1="2320f1e7b6a9790047eb649eb3e0b4396a69799b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bogar">
+ <description>Bogár</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bogar.dsk" size="368640" crc="e8d2af28" sha1="db2b59ac2de42bc17cad4224dae8c953adaf8a8f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bombazd">
+ <description>Bombázd le Ceausecut</description>
+ <year>198?</year>
+ <publisher>Osmagyar Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bombazdleceausecut.dsk" size="368640" crc="2005060b" sha1="fa420ee8e511f8fb7fc862591475a19ca1e0c0e1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bomlas">
+ <description>Rádióaktív bomlás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bomlas.dsk" size="368640" crc="f6b90bef" sha1="55992b7a85321e493ac226fcf8c3251b8fa5fd0b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boszork1">
+ <description>Boszorkány 1</description>
+ <year>198?</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="boszorka.dsk" size="368640" crc="908a29ae" sha1="37224955339d6236616abcc09ad0bf0db049336f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="boszork2">
+ <description>Boszorkány 2</description>
+ <year>198?</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="boszorkany2.dsk" size="368640" crc="db1dc079" sha1="6280c3bba5e0462cfacefa5f528332b9d01a4c59" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="asmbot">
+ <description>Mnemonic IV Assembler-Monitor - Bottom</description>
+ <year>1989</year>
+ <publisher>László Bata</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bottom.dsk" size="368640" crc="963cf18e" sha1="fc106957e23d5a8bbee8d264e5f6853317c8714a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bdash">
+ <description>Boulder Dash</description>
+ <year>1989</year>
+ <publisher>Zsolt Dobrovics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="boulderdash.dsk" size="368640" crc="fd59920c" sha1="2713de539eb9208d5ce28fc5359d3bfe5627c114" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="box">
+ <description>Box</description>
+ <year>198?</year>
+ <publisher>Szeki</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="box.dsk" size="368640" crc="4c759bd6" sha1="1a935d79633a17cdc313acc5d30c2b8306dce3ba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="box2">
+ <description>Box 2</description>
+ <year>198?</year>
+ <publisher>Szeki</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="box2.dsk" size="368640" crc="f5855825" sha1="bc93cfd97a88d08975440ce4e2940b2314af5669" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="break2">
+ <description>Break 2</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="break2.dsk" size="368640" crc="73facc52" sha1="f2fe9ff8f144162b02955a032a2b252417462dbc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="break3">
+ <description>Break 3</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="break3.dsk" size="368640" crc="c4e3e138" sha1="41c8992d8b8fc8d546135a9574e22d4791afe6a7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="breakopn">
+ <description>Breakopen</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="breakopen.dsk" size="368640" crc="4f3777e2" sha1="b3d336445688ae20736cdc7b64399dc117ac1745" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bulldozr">
+ <description>Bulldozer</description>
+ <year>198?</year>
+ <publisher>Compi &amp; Urz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bulldoze.dsk" size="368640" crc="557937de" sha1="2763c1df53ab2f12f99f9ea926698b1c6131bba4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bulldozrj" cloneof="bulldozr">
+ <description>Bulldozer (Joystick)</description>
+ <year>198?</year>
+ <publisher>Compi &amp; Urz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dozerjoy.dsk" size="368640" crc="589c301c" sha1="1219aa4eba7265f0ab3271c0074b297765b46fd7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="buvar">
+ <description>Búvár</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="buvar.dsk" size="368640" crc="f7144b23" sha1="027e4ff5adbe34f64a8f0f36ba89f23d63fecdc6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="buvoskoc">
+ <description>Bűvös kocka</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="buvoskoc.dsk" size="368640" crc="ed72dcd5" sha1="8b478b32feb8ba5c0c666bca4b859f0d46c87a85" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="buvosneg">
+ <description>Bűvös négyzetek</description>
+ <year>1987</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="buvosnegyzetek.dsk" size="368640" crc="db684bac" sha1="e97fe8b3a1bef44f094ff5b428ed393caa8fe273" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cammogo">
+ <description>Cammogó-derby</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cammogoderby.dsk" size="368640" crc="f6bab1d8" sha1="740a77501f94ffa39558be11b232f3c83598863a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="casio">
+ <description>Casio</description>
+ <year>198?</year>
+ <publisher>Péter Dörner</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="casio.dsk" size="368640" crc="0c4a7b6d" sha1="dedec6352e140e5fe0cfe12636f6b27956fd3780" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cellovo">
+ <description>Céllövő</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cellov.dsk" size="368640" crc="b8e67e0b" sha1="9bae4b3b28f8706a75d5baf02f9eac94436c5ce3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cellovol">
+ <description>Céllövölde</description>
+ <year>198?</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cellovo.dsk" size="368640" crc="3be0aae9" sha1="683b722553180fb5e61193ab3c47ad68b97a5fcc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="centiped">
+ <description>Centipede</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="centipede.dsk" size="368640" crc="45374dc4" sha1="dfdf9d9021c9344b27e6256045986e51b708aca7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="centaury">
+ <description>Centaury-1</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="centaury-1.dsk" size="368640" crc="bbc3f0df" sha1="8f506679d57d3dcebd1d52bec5f1e81119dd864b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nasasim">
+ <description>NASA Simulator - Space Shuttle</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="challenger.dsk" size="368640" crc="e96055c6" sha1="9f2eb4dc079c5bdcc8f55b893b9458f7cc638b2e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="chip">
+ <description>Chip</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="chip.dsk" size="368640" crc="eab5152e" sha1="d458798eef74643329490a165a4f3ff3f3c2204e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cicik">
+ <description>Lebegő Cicik</description>
+ <year>198?</year>
+ <publisher>G.V. Alfa Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cicik.dsk" size="368640" crc="4e9057e4" sha1="29c45862a3e648637f65400579e77a3f8cad53ee" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cikcakk">
+ <description>Cikcakk</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cikcakk.dsk" size="368640" crc="3462df3b" sha1="058ab717c6bd99568545b0b879297b7399b37817" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ciklon">
+ <description>Ciklon</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ciklon.dsk" size="368640" crc="3aa85ee7" sha1="6c555314fe929cf4c9f216997238a6fa375c213b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="circle">
+ <description>Circle</description>
+ <year>198?</year>
+ <publisher>Atlas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="circle.dsk" size="368640" crc="7b01a040" sha1="bf06eb7dfa37b549fe2da0b32abc75f8f5b0d166" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="citadell">
+ <description>Citadella</description>
+ <year>1988</year>
+ <publisher>SVS Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="citadella.dsk" size="368640" crc="ae232b7c" sha1="1ae5fb204eefd69b84ce6dd11445e83c1a5537ba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="citycru">
+ <description>City Cruiser</description>
+ <year>1988</year>
+ <publisher>Banjoe</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="citycruiser.dsk" size="368640" crc="b8775557" sha1="bdb8aeb07d56ff756669f78addf9153b1b525119" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="clement">
+ <description>Clementina a boszorkány</description>
+ <year>198?</year>
+ <publisher>Zoltán Nagy - Zsolt Magyar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="clementina.dsk" size="368640" crc="4a98c979" sha1="b4738426e3227e6103170f9295a22a179e50f81c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cobra">
+ <description>Cobra</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cobra.dsk" size="368640" crc="374cdb58" sha1="374f7dd57b41d8c28fa72790010f536b6ec01d06" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cobyvada">
+ <description>Coby-Vadász</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cobyvada.dsk" size="368640" crc="736b98a2" sha1="7819d6d8e50e030f70ef7a04b9e40755a91c2a27" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cocademo">
+ <description>Coca Cola Demo</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cocademo.dsk" size="368640" crc="348c1d2e" sha1="33f80f3eec0785a6d7f71283358f374b16f0067c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="codas64">
+ <description>Codas 64</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="codas64.dsk" size="368640" crc="854839bd" sha1="e8800d172fc5e0f3568c84d0ed045e7e8f5c8e45" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cogan">
+ <description>Cogan</description>
+ <year>198?</year>
+ <publisher>László Bagi - SonySoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cogan.dsk" size="368640" crc="62ea9d26" sha1="d648b4d8090095d0407aecbbcb35e6f7ed901efb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="color16">
+ <description>Color-16 színes karakterkészítő</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="color-16.dsk" size="368640" crc="dc20bad8" sha1="cbf8dcb07a348c2da2832880616813a02ca15b44" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="coloris">
+ <description>Coloris</description>
+ <year>198?</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="coloris.dsk" size="368640" crc="bc111816" sha1="4e68909f80b070b24e9e7cf2a1bae9fe87d5e8c3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="colorisa" cloneof="coloris">
+ <description>Coloris (Alt)</description>
+ <year>198?</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="colorisv2.dsk" size="368640" crc="87e0b744" sha1="f721dca8c6665e3574c50f56dd213182627b1e17" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="colormag">
+ <description>Colormagic - Színbűvölő</description>
+ <year>1987</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="colormagic.dsk" size="368640" crc="21bcb2aa" sha1="542073b04212f9e831b68c467a9ae1c058241eee" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="coltris">
+ <description>Coltris</description>
+ <year>1993</year>
+ <publisher>Gati Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="coltris.dsk" size="368640" crc="adb76c06" sha1="194b8eb22532d5cf676184aacf9def998c4e9597" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="commando">
+ <description>Commando</description>
+ <year>1989</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="commando.dsk" size="368640" crc="cf079b80" sha1="125112a57f30c0f5afab99b5f58b16fa6814e2e8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="commandoa" cloneof="commando">
+ <description>Commando (Alt)</description>
+ <year>1989</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="commanv2.dsk" size="368640" crc="bde0de7f" sha1="71b9ee3afeaa33d2c2e10790d145ca37820344af" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cmdo_sil">
+ <description>Commando (SIL)</description>
+ <year>1987</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="commando1.dsk" size="368640" crc="98ca35f9" sha1="66d126f761c581e7c7645cc6ae5b824ad38db654" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="compwrld">
+ <description>ComputerWorld</description>
+ <year>1991</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="computerworld.dsk" size="368640" crc="2e07bd81" sha1="1c743c9944006a0371c58ca2d5d5905040c56834" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cosinus">
+ <description>Cosinus</description>
+ <year>1985</year>
+ <publisher>HLV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cosinus.dsk" size="368640" crc="b4fe3700" sha1="83442e640ae1ccb62d013528cd422cde151dc225" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cowboy">
+ <description>Cowboy</description>
+ <year>1987</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cowboy.dsk" size="368640" crc="7530a04a" sha1="e358dfcc19f32f2b0c653cc6b344c445387ddefb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cracked">
+ <description>Crack Ed</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="craked.dsk" size="368640" crc="f97e55ec" sha1="844f2f8aeefb450fc506d5093ec8923a42aebc7b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kangaroo">
+ <description>Crazy Kangaroo</description>
+ <year>1986</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="crazykangaroo.dsk" size="368640" crc="87b01f60" sha1="a29d8ee0d3079e6438423c2464423c2005b98818" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kangarooa" cloneof="kangaroo">
+ <description>Crazy Kangaroo (Alt)</description>
+ <year>1986</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="crazy_kangaroov2.dsk" size="368640" crc="966c6173" sha1="4dd7609826999fb974738452c823482729785787" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kangaroob" cloneof="kangaroo">
+ <description>Crazy Kangaroo (Alt 2)</description>
+ <year>1986</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="crazy_kangaroov3.dsk" size="368640" crc="28f80f65" sha1="10b5f49829028eb963dc1e6032b11eb3d8e30175" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kangaroocr" cloneof="kangaroo">
+ <description>Crazy Kangaroo (Cracked)</description>
+ <year>1986</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="crazycr.dsk" size="368640" crc="1978c0a0" sha1="5e668549bea5c316d7594ad367bc39d2a2112cc7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kangaroot" cloneof="kangaroo">
+ <description>Crazy Kangaroo (Trainer)</description>
+ <year>1986</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="crazykangarootrainer.dsk" size="368640" crc="f6adbe76" sha1="4469b6b1ba597869099bb45b7a9b82c16f73f396" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="csapda">
+ <description>Csapda</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="csapda.dsk" size="368640" crc="27d587a6" sha1="431718a37e4446d95c1a7c77ef13cad86063760d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="csavarga">
+ <description>Csavargás a gombák birodalmában</description>
+ <year>1988</year>
+ <publisher>Green Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="csavargas.dsk" size="368640" crc="7d787cd7" sha1="959692eeb7abdcac93df2f5ccf13459a42f904fd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="csavargaa" cloneof="csavarga">
+ <description>Csavargás a gombák birodalmában (Alt)</description>
+ <year>1988</year>
+ <publisher>Green Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="csavargasv2.dsk" size="368640" crc="c9d27650" sha1="3c0673b6a73e29c3724cf523136b9bb4362b1a9d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="csonak">
+ <description>Csónak a folyón</description>
+ <year>198?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="csonak.dsk" size="368640" crc="ec8578ac" sha1="8f981e385ace159d26ff67da5e9c46cf113e036c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="csovesek">
+ <description>Csövesek</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="csovesek.dsk" size="368640" crc="f3d8104a" sha1="50bd0a115f841fc52c60f2dfafa2d21df0491dff" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="csrobot">
+ <description>C.S. Robot</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="csrobot.dsk" size="368640" crc="512c83e3" sha1="5447255f8b2be9a48fd73cdea77b2410a88e8b62" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cyrus2">
+ <description>Cyrus 2</description>
+ <year>1985</year>
+ <publisher>Intelligent Chess Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cyrus2.dsk" size="368640" crc="1c014ee8" sha1="4089bbc6234bb0887aee6ac7710604452f2d7560" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cyrus2en" cloneof="cyrus2">
+ <description>Cyrus 2 (English)</description>
+ <year>1985</year>
+ <publisher>Intelligent Chess Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cyrus2 (english) (v1).dsk" size="368640" crc="bebb0b50" sha1="c3b5450b62b77f84285c5bc3e6a51e0e8ffd0eda" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cyrus2ena" cloneof="cyrus2">
+ <description>Cyrus 2 (English, Alt)</description>
+ <year>1985</year>
+ <publisher>Intelligent Chess Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="cyrus2 (english) (alt).dsk" size="368640" crc="67bc6481" sha1="06be720c39821aed0e76d21575352051c8eba960" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dama">
+ <description>Dáma</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dama.dsk" size="368640" crc="dbf17698" sha1="b5c089fe54c921cde6000d67273a9e077b83671e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="damaa" cloneof="dama">
+ <description>Dáma (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="damav2.dsk" size="368640" crc="7391f7b3" sha1="0bd593378e5d294b1bee7c49ac70be2b9ecab484" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dama1">
+ <description>Dáma (Different)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dama_.dsk" size="368640" crc="39753ded" sha1="43a28c69082cfe8f030774b56eda116b502bc015" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="darkside">
+ <description>Dark Side</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="darkside.dsk" size="368640" crc="68a551db" sha1="03f0df24ac234d02351c1e587111bf63d23a8121" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="datakesz">
+ <description>Data sor készítő</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="datakesz.dsk" size="368640" crc="2e0de17c" sha1="b9523d9c13c509aee4eeff44e74ad145b0052f60" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvcdcopy">
+ <description>TVC Disk Copy 1.0</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dcopy10.dsk" size="368640" crc="1e5c882e" sha1="48978a68ad343bdf4d5091adc93b8b2154a8a10e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ddtleir">
+ <description>Mini DDT - Leiras</description>
+ <year>198?</year>
+ <publisher>Gaba Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ddtleir.dsk" size="368640" crc="5f76a558" sha1="37256cd9e77a3add9ca79ef7eabaea551f6f531f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="debugger">
+ <description>Debugger</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="debugger.dsk" size="368640" crc="baf3ceea" sha1="ec5cf3b194be77736ff3a2c69efff6956bc305f7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="deflekt">
+ <description>Deflektor</description>
+ <year>1987</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="deflektor.dsk" size="368640" crc="fb75b1cd" sha1="97cb3c86abe932fc5075c22f4d6933ac6b3311d9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demokaz1">
+ <description>Demo Kazetta 01 - Bevezetés</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="demo01-bevezetes.dsk" size="368640" crc="11929d4d" sha1="261e8efbe95e1e736adc6c9ca4d3e687db7933c5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demokaz2">
+ <description>Demo Kazetta 02 - Tili-Toli</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="demo02-tili-toli.dsk" size="368640" crc="89f9202c" sha1="9296d48fc176fb7842522b41bc8dd1f94081de49" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demokaz3">
+ <description>Demo Kazetta 03 - Rajzoló</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="demo03-rajzolo.dsk" size="368640" crc="eef8a8cb" sha1="212a8540951c0fcf2d50db59e05efaa063d50415" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demokaz4">
+ <description>Demo Kazetta 04 - Zene</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="demo04-zene.dsk" size="368640" crc="e587ad50" sha1="7a55339d9cc31e0114d75f6c7a5958127a32837b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demokaz5">
+ <description>Demo Kazetta 05 - Betűkészítő, Bombázó</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="demo05-betukeszito.dsk" size="368640" crc="36302c7d" sha1="703a4159bea1447e06b6703e01493fb8447577fd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demokaz5a" cloneof="demokaz5">
+ <description>Demo Kazetta 05 - Betűkészítő, Bombázó (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="demo5v2.dsk" size="368640" crc="d989cb86" sha1="f95292afee1f647d667d254e16ba073e3a4541c1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demodisk">
+ <description>Demo Kazetta/Lemez 01-06</description>
+ <year>2007</year>
+ <publisher>Viktor Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="demodisk.dsk" size="368640" crc="7e6a6093" sha1="5482e34dd5fa60bd0297465acade927cf3b3091b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo01">
+ <description>DG Kép 1</description>
+ <year>1991</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="demo01.dsk" size="737280" crc="ddef02de" sha1="4b3f309a807b09df0c1c30d8120f3db5e80897bd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo02">
+ <description>DG Kép 2</description>
+ <year>1991</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="demo02.dsk" size="737280" crc="e44e1b47" sha1="dca4a194d124ac6cc319c3be336b4a29816f1507" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="demo03">
+ <description>DG Kép 3</description>
+ <year>1993</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="demo03.dsk" size="737280" crc="21afe287" sha1="b2b732e08085bf1d037a09d52228e9acbd1f869a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="diffuzio">
+ <description>Diffúzió</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="diffuzio.dsk" size="368640" crc="a18f752f" sha1="7c5d7534aad55c887a957f5a0b890106ad23b408" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="digipok">
+ <description>Digipók</description>
+ <year>1987</year>
+ <publisher>Bit &amp; Guy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="digipok.dsk" size="368640" crc="ec32b239" sha1="f771adcf30c61b6925f71fb0d5ea1c582c5bb293" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="digipoka" cloneof="digipok">
+ <description>Digipók (Alt)</description>
+ <year>1987</year>
+ <publisher>Bit &amp; Guy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="digipokv2.dsk" size="368640" crc="687acfa9" sha1="655081f53c19514e4b526da688313be1f9536d92" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dinosaur">
+ <description>Dinosaurus</description>
+ <year>198?</year>
+ <publisher>Buddha Softhouse</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dinosaur.dsk" size="368640" crc="07d48ddf" sha1="2bda1d8a02cede85a8c5872a12c4e40180dc5c24" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="discmond">
+ <description>Disc Monitor v2.00 Demo</description>
+ <year>1990</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="discmond.dsk" size="368640" crc="63d1aa96" sha1="2e62c18b60b2ab185dd34f6d1ad4e192f595bad6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dobgep">
+ <description>Dobgép</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dobgep.dsk" size="368640" crc="c3d5b82f" sha1="3b378d827de7418b8f869f4553fa188950076a62" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dobprg">
+ <description>Dobprogram</description>
+ <year>1989</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dobprg.dsk" size="368640" crc="fb966ef0" sha1="ff386b7ff076c0fe657db1d89f68ab7d6f0b0658" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="domino">
+ <description>Dominó</description>
+ <year>198?</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dominov1.dsk" size="368640" crc="79ac23a0" sha1="f5650a46ca215e0b1e9287e115ff61e9e3e4791b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dominoa" cloneof="domino">
+ <description>Dominó (Alt)</description>
+ <year>198?</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="dominov2.dsk" size="368640" crc="6dd7f648" sha1="b9e7caf0b5df6c8e9a2bd8d5cddd510fa94f206c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="donald">
+ <description>Donald és Dézi</description>
+ <year>1989</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="donald.dsk" size="368640" crc="f171b15b" sha1="b03bed6b6b1f5e5335789a11f8d4213b6423156e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dkong">
+ <description>Donkey Kong</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="donkeykong.dsk" size="368640" crc="516c8a33" sha1="dc41a04790a5c58f9f234bcb0fccdd29c3104dbc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dkonga" cloneof="dkong">
+ <description>Donkey Kong (Alt)</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="donkeykongv2.dsk" size="368640" crc="63a80a00" sha1="1b51f483bb30ce780677c6c30e8a8d2dbc023d34" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="drawer">
+ <description>Drawer</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="drawer.dsk" size="368640" crc="6c1d80eb" sha1="e5952fa3c097e44188958040bbc1470b6c79bb17" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ediass">
+ <description>EdiAss</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ediass.dsk" size="368640" crc="7803831d" sha1="cdc17aa7936ad1e375ff699d8c646f5cf335e01a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="effekt1">
+ <description>Effekt 1 - Hangeffekt</description>
+ <year>198?</year>
+ <publisher>Szeki</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="effekt.dsk" size="368640" crc="5c8d12ce" sha1="8e60fea9d0029597ad3dd25cf9a047eaa2acb970" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="effekt2">
+ <description>Effekt 2 - Raster Effektek</description>
+ <year>198?</year>
+ <publisher>Szeki</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="effekt2.dsk" size="368640" crc="d85fc7c7" sha1="5d9d132d72c11275881e832081e77250a7042953" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="egybeir1">
+ <description>Egybeirjam? Különírjam? 1</description>
+ <year>1988</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="egybeirjam_kulonirjam_i.dsk" size="368640" crc="fdaf97b9" sha1="2926b62916a214946a5d052405bcb56c9a6cb739" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="egybeir2">
+ <description>Egybeirjam? Különírjam? 2</description>
+ <year>1988</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="egybeirjam_kulonirjam_ii.dsk" size="368640" crc="f7d41a0e" sha1="0db2d8285f765874a5736a6bf4d47123ce8fd606" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ejtoerny">
+ <description>Ejtőernyő</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ejtoernyo.dsk" size="368640" crc="c09dd1ad" sha1="e96e3df96f822166c8998df99cc011104f774dd5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="electman">
+ <description>Electric Man</description>
+ <year>1987</year>
+ <publisher>Béla Szalontai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="electricman.dsk" size="368640" crc="b7c12ff1" sha1="868decd65c4485fd33ddb2499f97818cd9323cd2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="eleccube">
+ <description>Electronics Cube</description>
+ <year>1988</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="electronicscube.dsk" size="368640" crc="4b01fb2f" sha1="91dbae923da5cc825e57f92a104e6a0087fa9673" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="eletjate">
+ <description>Életjáték</description>
+ <year>198?</year>
+ <publisher>Tekacs Bela</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="eletjatek.dsk" size="368640" crc="633cead9" sha1="870c2efef910df058e06038b72d4af5c3aacc002" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="eletkoro">
+ <description>Életkorod</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="eletkoro.dsk" size="368640" crc="155620dc" sha1="76b7e9f813d3d9adab4606644c38c2d3b2e76eca" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="elite">
+ <description>Elite</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="elite.dsk" size="368640" crc="3545e4fc" sha1="8770d8bef9abb2f962e12b8aa2df6b8ea95d81dc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="elitea" cloneof="elite">
+ <description>Elite (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="elitev2.dsk" size="368640" crc="a8f40861" sha1="28b56562d8c06b656c5b77b1acf48f75ddd0b66b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ellopo">
+ <description>Ellopó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ellopo.dsk" size="368640" crc="8bead775" sha1="56e988da9a0fc760fe9f23ca8b46b43fa49676fe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="english1">
+ <description>English Test no.1</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="english1.dsk" size="368640" crc="e8cfab13" sha1="d05003c445dbe77030a16e9a3f690afd3b47a52d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="english2">
+ <description>English Test no.2</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="english2.dsk" size="368640" crc="64c2cb71" sha1="be560d97f8d07ecb32645e16788d460b11af7a07" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="english3">
+ <description>English Test no.3</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="english3.dsk" size="368640" crc="69df0d43" sha1="35f5a38caaf9dca88c356839f9d7b16c03f2a982" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="english4">
+ <description>English Test no.4</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="english4.dsk" size="368640" crc="72aaffb4" sha1="a5642e9f30272ad669b8f1ef8c005b81ae0c726a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="english5">
+ <description>English Test no.5</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="english5.dsk" size="368640" crc="25870265" sha1="8d1a5f7305ad8d78d524db21d5aa56152dff513c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="erod">
+ <description>Erőd</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="erod.dsk" size="368640" crc="4cbe273c" sha1="5d7d2319a193c28ec453fdae268b862b4c12b0c1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="etforth">
+ <description>ET-Forth 1.1</description>
+ <year>1987</year>
+ <publisher>Geza Kos</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="et-forth.dsk" size="368640" crc="9826d74b" sha1="900d4920bf651c55c06258f62ea195358f8a4426" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="europa">
+ <description>Keresd a Térképen - Európa</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="europa.dsk" size="368640" crc="3c7f0d4d" sha1="e2f8a4e619a6248f21ddb948c36ed8c9d7861b80" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="europaa" cloneof="europa">
+ <description>Keresd a Térképen - Európa (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="europav2.dsk" size="368640" crc="5fe0bd7b" sha1="2eec5d88bf63e8e9b3459c01cc0e0938aab956f6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="expedici">
+ <description>Expedíció</description>
+ <year>1989</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="expedici.dsk" size="368640" crc="3dddaef3" sha1="e97d6863680215895449aee26bdf74920664accf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="expedicia" cloneof="expedici">
+ <description>Expedíció (Alt)</description>
+ <year>1989</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="expediciov2.dsk" size="368640" crc="d5a82a6f" sha1="d76131ee379a0a0e83a1efe776d0da6626f38dee" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="faltoro">
+ <description>TV-Computer Faltörő Játék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="faltoro.dsk" size="368640" crc="69adadae" sha1="8775f07548f29265b98213abd97211f8a815c83a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="faltjate">
+ <description>Faltörő játék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="faltorojatek.dsk" size="368640" crc="b879d758" sha1="9686b6af60d137f36a38b5debf91fdde00b7c264" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family1">
+ <description>Family 1</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="family1.dsk" size="368640" crc="b3a6e891" sha1="e11aff8cf1993ced8c65649f48909e03c8dd1471" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family2">
+ <description>Family 2</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="family2.dsk" size="368640" crc="06de22c8" sha1="877e99f888dc711a64286eb9e1371079422438e3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family2a" cloneof="family2">
+ <description>Family 2 (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="family.dsk" size="368640" crc="2be9ff2d" sha1="c4b53ac2477fbaac1bdaefca88e7cc20dd949c0f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family2b" cloneof="family2">
+ <description>Family 2 (Alt 2)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="family3.dsk" size="368640" crc="b0ebd77a" sha1="b776717b8ef8da74241ec05ef7feaf04edcd32f4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family4">
+ <description>Family 4 - Lesson 1</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="family4.dsk" size="368640" crc="2d227803" sha1="d4ca0cf6f7812d881c7533cd1460b5d76d661b52" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="family5">
+ <description>Family 5 - Test</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="family5.dsk" size="368640" crc="65fa9bc1" sha1="2462c50c3b2ff896fdcb0f99e588e83ddcbe49d4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="farao">
+ <description>Fáraó</description>
+ <year>1988</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="farao.dsk" size="368640" crc="75e1f280" sha1="c34e4b8c87400502356ffaf559ad84ccb13ac2f4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fcopy10">
+ <description>TVC File Copy 1.0</description>
+ <year>1986</year>
+ <publisher>Gyorgy Hudoba - Tibor Cseh</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fcopy10.dsk" size="368640" crc="8a798a56" sha1="abb759f90bc23d79f635cd55abc675cf2cf042da" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fcopyd2t">
+ <description>File Másolás - Floppy to Magnó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fcopyd2t.dsk" size="368640" crc="2f4d9e30" sha1="7c7f465d118931b2c426644db381dd0ea37d8f1c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tapecopy">
+ <description>File Másolás - Magnó to Floppy</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tapecopy.dsk" size="368640" crc="a0b7ffb2" sha1="3e300c66285fe7374227599c947bcf2e0c155619" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tapedos">
+ <description>File Másoló - VTDOS to Floppy</description>
+ <year>1990</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tapedos.dsk" size="368640" crc="20d8c027" sha1="b4e20f21f7894a9da438794af19dde406bbd6227" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fcopyt2t">
+ <description>File Másoló - Szalag to Szalag</description>
+ <year>1990</year>
+ <publisher>László Tóth</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fcopyt2t.dsk" size="368640" crc="871e4cd2" sha1="432ac36ac056862fe795d569b0166f2debaa0a3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fejtoro">
+ <description>15-ös fejtörő</description>
+ <year>198?</year>
+ <publisher>Nyitrai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fejtoro.dsk" size="368640" crc="3e7cabba" sha1="c852abad0699c9a360b29280e5cf12cbb12f5dbb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="feketeso">
+ <description>Fekete Sólyom</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="feketesolyom.dsk" size="368640" crc="a7877882" sha1="44f0adf2d07e460d479e71815c34b07bbc309476" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="felderit">
+ <description>Felderítő</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="felderito.dsk" size="368640" crc="39c40157" sha1="c3659996a8d15cd49530f401987181704ebd7429" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="felirato">
+ <description>Feliratozó</description>
+ <year>1987</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="feliratozo.dsk" size="368640" crc="ce756b86" sha1="34f46c7afff954aefbaf76bc996932dbec4b383b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="felkaru">
+ <description>Félkarú rabló</description>
+ <year>1986</year>
+ <publisher>Gabor Balogh</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="felkarurablo.dsk" size="368640" crc="2a4a6539" sha1="cb21892344e743ced485a08bde315426744b041b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="festojat">
+ <description>Festő játék</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="festojatek.dsk" size="368640" crc="d8e5160f" sha1="9f5accbb2f8eace4c6aa6e691e72ee2db9d656f5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fgabr">
+ <description>Függvényábrázolás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fgabr.dsk" size="368640" crc="01540ca0" sha1="cf3cf1c9828d5e7f556eeb8225cbae5259de8c5f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="filem">
+ <description>Fájlmásoló</description>
+ <year>198?</year>
+ <publisher>Csongrád - SCS</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="filem.dsk" size="368640" crc="7f916870" sha1="c9d249e0e6485aa29cdd71a4dca960150b7c998b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="firebow">
+ <description>Firebow - The Planet of Death</description>
+ <year>1991</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="firebow.dsk" size="368640" crc="1c0b82c8" sha1="5b275ffbe9aadc28176443abc6a248b74969ff73" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="firebowt" cloneof="firebow">
+ <description>Firebow - The Planet of Death (Trainer)</description>
+ <year>1991</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="firebow(trainer).dsk" size="368640" crc="99f466d2" sha1="f8bb890cf9f71afa1a7ae8fc31995b01db1b3236" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="firebowl">
+ <description>Firebow Leírás</description>
+ <year>1992</year>
+ <publisher>Krisztan Dunder</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="firebowleiras.dsk" size="368640" crc="83a3d2af" sha1="2c329757f1b67f7f83d6e49eb760156bfc079a88" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fiv03">
+ <description>Fizika - Soros RC kör - FIV03</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fiv03.dsk" size="368640" crc="9c16bae7" sha1="e1ee22d78a7ea303515d22d6082ab862fb24fd58" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fiv92">
+ <description>Fizika - Mágneses mező - FIV92</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fiv92.dsk" size="368640" crc="660647fe" sha1="f06770d4c7a44bab5485cf5490d087562861c777" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fizikaio">
+ <description>Fizikai összefüggések</description>
+ <year>1987</year>
+ <publisher>Novotrade - Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fizikaio.dsk" size="368640" crc="a9080926" sha1="2bd12c7d8f5239e69db19fdbdf1a991a0e1cea40" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flight">
+ <description>Flight</description>
+ <year>1987</year>
+ <publisher>BirdSoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="flight.dsk" size="368640" crc="3a5b39de" sha1="37059f9baf324de69ad4c8be270f63a0bac9b37d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flipper">
+ <description>Flipper</description>
+ <year>1987</year>
+ <publisher>Andromeda</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="flipper.dsk" size="368640" crc="cac0266d" sha1="61aef2fc0bf5dcbbb9efaff2bd721ff9808c28c4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flippera" cloneof="flipper">
+ <description>Flipper (Alt)</description>
+ <year>1987</year>
+ <publisher>Andromeda</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="flipperv2.dsk" size="368640" crc="bcc1076e" sha1="4a1780c57c6ee9fad3dca886fff506a00ece69bb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flipperb" cloneof="flipper">
+ <description>Flipper (Alt 2)</description>
+ <year>1987</year>
+ <publisher>Andromeda</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="flipperv3.dsk" size="368640" crc="62ad6b93" sha1="458ff82ee48e369e3e5eb9f7a8006791b29bd479" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flopp">
+ <description>Flopp</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="flopp.dsk" size="368640" crc="c786f028" sha1="9dce1035fbeb039039f5353c3c8bbdbe8ab80c96" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="flsgraph">
+ <description>FLS Graphics Editor</description>
+ <year>1987</year>
+ <publisher>Flighter Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="flsgraph.dsk" size="368640" crc="d9f8635c" sha1="68937de97a2a67ee0a4b0c73f29630e4c3aa2520" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="foci">
+ <description>Foci</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="foci.dsk" size="368640" crc="8d2d4fc9" sha1="c07e8ac69109bec00662608cf4ef0d9454a681b6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fogmosos">
+ <description>Fogmosós Játék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fogmosos.dsk" size="368640" crc="5000daa4" sha1="0d0f8507583c2e1eafafcc39601b399483b3070e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="foldrajz">
+ <description>Környezetismeret Oktató és Témazáró</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="foldrajz.dsk" size="368640" crc="c0360132" sha1="3b103b0cb6ee86c10b9a9fdd01945a994c3e1897" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="football">
+ <description>Football</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="football.dsk" size="368640" crc="d59dc075" sha1="0a90ac9a7ff6d86ea715db0f4b5568743600a045" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fordits">
+ <description>Fordíts</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fordits.dsk" size="368640" crc="1be27897" sha1="643d63446829d3cc7ca54c66182140491c9fda55" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="format">
+ <description>Format</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="format.dsk" size="368640" crc="6c2c4fcd" sha1="f65022a9c1fe4d7c890d0cf25e4884c64b765086" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="forthlei">
+ <description>Forth Leírás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="forthlei.dsk" size="368640" crc="6d7e861d" sha1="39873721c8c661c97be357f22b3ba44c23ace3c3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fov02">
+ <description>Földrajz - Magyarországi városok - FOV02</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fov02.dsk" size="368640" crc="c4b5fbd5" sha1="b7eb0a7373a06358f1c26b6f8515ff847cd393e4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fov03">
+ <description>Földrajz - Szovjetúnió városai - FOV03</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fov03.dsk" size="368640" crc="18b44bd1" sha1="21c3758ed188957785e2ec7767165b87a9a8c004" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fov04">
+ <description>Földrajz - USA városai - FOV04</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fov04.dsk" size="368640" crc="e64fab74" sha1="eae2cfd6b2ccb27652a90af2576f14d59d1c3237" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="freddie">
+ <description>Freddie</description>
+ <year>198?</year>
+ <publisher>Black Star Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="freddie.dsk" size="368640" crc="31f1b1bd" sha1="1c5f0053406d9e76c7ecb3258d1c1798d8b712c0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fuel">
+ <description>Fuel</description>
+ <year>1988</year>
+ <publisher>Attila Barabas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fuel.dsk" size="368640" crc="2a3f8eb9" sha1="9d626605b1e393d92399fe3d777fd7e301beced5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="fuggvabr">
+ <description>Függvény ábrázolás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fuggvabr.dsk" size="368640" crc="287bd584" sha1="f22da75020f875bca769567d935a8ed8df883b3b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="futakep">
+ <description>Fut A Kép - Keretlebontás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="futakep.dsk" size="368640" crc="36bac09e" sha1="ac3f7546b7bef4eedc5fcbf77d75c1880bcc903c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="futovad">
+ <description>Futóvad</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="futovad.dsk" size="368640" crc="0c4000d9" sha1="df6bac6af111f5b887744adf63ae12204a7d6ee3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="galaxy">
+ <description>Galaxy</description>
+ <year>1991</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="galaxyv1.dsk" size="368640" crc="52798b37" sha1="047a1e628fa007a7dcc8cbe9925da33d72f2f1b5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="galaxya" cloneof="galaxy">
+ <description>Galaxy (Alt)</description>
+ <year>1991</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="galaxyv2.dsk" size="368640" crc="2dee5fb4" sha1="bad6a1d6447db78e8f8ea86700d137026f095435" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="galaxyb" cloneof="galaxy">
+ <description>Galaxy (Alt 2)</description>
+ <year>1991</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="galaxyv3.dsk" size="368640" crc="1dd5a65f" sha1="ddbe88f6182beaf94159edd7fc797867b6ce122d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gallaste">
+ <description>Gall Asterix</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gallasterix.dsk" size="368640" crc="b919330b" sha1="dcea5391e0ba084d57e99768c8b941e9f62c7bf0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="generato">
+ <description>Generátor</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="generato.dsk" size="368640" crc="c96ac673" sha1="b15b764057b7d4f508800773c62f346df22ccb17" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geo">
+ <description>Geo</description>
+ <year>1987</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="geo_v1.dsk" size="368640" crc="14bc4370" sha1="0ace1946b43ecf5a658ae2c3cb4734b841451ec0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geoa" cloneof="geo">
+ <description>Geo (Alt)</description>
+ <year>1987</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="geo_v2.dsk" size="368640" crc="36cb7159" sha1="8cee0fcd7306e698ef033761529a566ce8047f9a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geob" cloneof="geo">
+ <description>Geo (Alt 2)</description>
+ <year>1987</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="geo_v3.dsk" size="368640" crc="3a5b9241" sha1="6b525522aafa3009cd06015bfc04b1aa0527ea3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geomtran">
+ <description>Geometriai Transzformációk</description>
+ <year>1988</year>
+ <publisher>Novotrade - Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="geomtran.dsk" size="368640" crc="9e86935e" sha1="a976ab430f13f940a5abb7eee1ee1279a74a08d1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="geomtrana" cloneof="geomtran">
+ <description>Geometriai Transzformációk (Alt)</description>
+ <year>1988</year>
+ <publisher>Novotrade - Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mertan.dsk" size="368640" crc="bd6cf35c" sha1="47b9c550f04c3ecf7b982b9688f5f7cc33630398" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gepzene">
+ <description>Gépzene</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gepzene.dsk" size="368640" crc="8fb491ad" sha1="e7242936df7745926ec90d22130048582a9ef719" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ghostbus">
+ <description>Ghostbusters</description>
+ <year>1991</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ghostbusters.dsk" size="368640" crc="b74e5558" sha1="b10678784cfc9079eeef64bb925cfd95eb17d864" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gianti">
+ <description>Giantigascutus</description>
+ <year>198?</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gianti.dsk" size="368640" crc="9f0248b0" sha1="ccfb73a120cee14d8c531d651f46339c259ac07c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="giliszta">
+ <description>Giliszta</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="giliszta.dsk" size="368640" crc="52d5ce52" sha1="15c7385ff4c26974c371be84fe7fabe6c9fa7b78" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="goblinka">
+ <description>Goblin Kastélya</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="goblinkastelya.dsk" size="368640" crc="dba9b3ad" sha1="b76879ab5cdd45d07a8523114f4feb576722d720" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="goldcopy">
+ <description>Goldcopy</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="goldcopy.dsk" size="368640" crc="0790b5e8" sha1="3a2a6d1b0df0101b6736c8bacb50982af4bc4410" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="golf">
+ <description>Golf</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="golf.dsk" size="368640" crc="38e35609" sha1="cea07690a1ae4288390152c6b635712749cb05d4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="golyoviz">
+ <description>Golyó a Vízben</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="golyoviz.dsk" size="368640" crc="58b924a2" sha1="03725c7554cc616e7e0360cea3e9c01914d84287" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gombak">
+ <description>Gombák</description>
+ <year>1990</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gombak.dsk" size="368640" crc="d73779d3" sha1="044f2b4a761071bd31effcbd388aa61ffeadb7f7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gombocfa">
+ <description>Gombócfaló</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gombocfalo_v1.dsk" size="368640" crc="2dfdc20f" sha1="dcd1af3a86a444c8d3f3567a7211799791d4f620" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gombocfaa" cloneof="gombocfa">
+ <description>Gombócfaló (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gombocfalo_v2.dsk" size="368640" crc="afe63b34" sha1="c7ab4374cd2541582116ea1ee80951555d92f579" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gombtuko">
+ <description>Gömbtükör</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gombtuko.dsk" size="368640" crc="b2fc3019" sha1="2257586dbd983ba966b6ca1d9b7cb75008a4fd23" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gravitac">
+ <description>Gravitáció</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gravitac.dsk" size="368640" crc="bc894aa3" sha1="6954bf9279d9101533835365fc3bf7db219f3afe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="griff">
+ <description>Griff</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="griff.dsk" size="368640" crc="94d4ece6" sha1="72222d128f9712bc90ea0ba76203ea5c3cffe4d4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="griff3d">
+ <description>Griff - 3 Dimenziós Griff Grafika</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="graf.dsk" size="368640" crc="f9252fad" sha1="015bf77d5815f27a86383d385fc4fd2d344e9581" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="grdemo">
+ <description>Griff-Grafika Bemutató Program</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="grdemo.dsk" size="368640" crc="7061705c" sha1="682a4e5ba62af822d5160e8955934e051dfa193f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gt2">
+ <description>Ghost Tower 2</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gt2.dsk" size="368640" crc="3b0a70df" sha1="6839ddc5a101eea7e9e8470ed678751676caf780" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gulpman">
+ <description>Gulpman (Trainer)</description>
+ <year>1990</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gulpmant.dsk" size="368640" crc="ad6ed72e" sha1="49506c6a68e3c2fb8e29795518d0c2b231b05099" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gunfight">
+ <description>Gunfight</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gunfight.dsk" size="368640" crc="02587b89" sha1="01696d97379e05b6c6681d1efd454e7d37feadca" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gusztleg">
+ <description>Gusztáv legyeket írt</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gusztavlegyeketirt.dsk" size="368640" crc="d5b05567" sha1="279bbb9d2ffe3b5c02201f925bf3046c0a8ac65c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gusztspo">
+ <description>Gusztáv Sportol</description>
+ <year>198?</year>
+ <publisher>László Nagy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gusztavsportol.dsk" size="368640" crc="2d48ac6d" sha1="fca224ee59288a49966684671b40841dfd425e08" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gyertya">
+ <description>Gyertya</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gyertya.dsk" size="368640" crc="53c8018e" sha1="375055eccd09ea61576b6be61f32edcb2f0140e6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="gyufajat">
+ <description>Gyufajáték</description>
+ <year>198?</year>
+ <publisher>Zsolt</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="gyufajatek.dsk" size="368640" crc="64619a01" sha1="a9f5b961cadcdb92fe88af6530d8d54282605005" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hajo">
+ <description>Hajó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hajo.dsk" size="368640" crc="17685e78" sha1="79c138213247f2edc082b3a479068fb8e5dd760f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hajo1">
+ <description>Hajó (Different)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hajor.dsk" size="368640" crc="748421f6" sha1="bdd4c622c10b8e89646d2d15f42b5317f592f8a7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="halak">
+ <description>Halak</description>
+ <year>1991</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="halak.dsk" size="368640" crc="80fb19d2" sha1="b8241bbee506933f940b08fac8ebdd118c91e117" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="halalla">
+ <description>Halállabirintus</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="halallabirintus.dsk" size="368640" crc="fc8a000c" sha1="21e8b97f0da9673b991ac570ed619510b74090d5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hamm">
+ <description>Hamm</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hamm.dsk" size="368640" crc="fd020ea9" sha1="0a74f95f21b83da4df10bed9042e3b0cf275c9f1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hang">
+ <description>Hang</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hang.dsk" size="368640" crc="8de35864" sha1="bc7c93f9fe36a9a583fa42d6233530b473ef73f9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hangd">
+ <description>Hang (Different)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hangd.dsk" size="368640" crc="2030a412" sha1="d7422817eea76372dd04172331c63091c297c88a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hangdigi">
+ <description>Hangdigitalizáló</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hangdigi.dsk" size="368640" crc="bd430ec6" sha1="3961b3732fd2626c4c919f678e42d0da639e580e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hanggal">
+ <description>Hanggal</description>
+ <year>1989</year>
+ <publisher>Endre Győrffy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hanggal.dsk" size="368640" crc="b69352d2" sha1="e6908982c21de9658585750139c0aa7a17327ba0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hangok">
+ <description>Hangok</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hangok.dsk" size="368640" crc="c9911b93" sha1="ac67521e71aa840351a0d54f476510a8b3620e8a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hangosbi">
+ <description>Hangos Billentyűzet</description>
+ <year>198?</year>
+ <publisher>Tombor Márton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hangosbi.dsk" size="368640" crc="0d190703" sha1="7dedecbc346a9d4ca9131be6fada161874a66ff6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hanoi">
+ <description>Hanoi Torony</description>
+ <year>1983</year>
+ <publisher>Gyorgy Vamos - Janos Horvath</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hanoi.dsk" size="368640" crc="f495f99d" sha1="f56c88ac925e42f3aefe5d14642e5bf7ed3d1370" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hanoitr">
+ <description>Hanoi-Torony</description>
+ <year>1987</year>
+ <publisher>Zsolt</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hanoi_.dsk" size="368640" crc="a394f747" sha1="f6602f3493586a7fa309f844014e8408a0fa1652" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hanoi_t">
+ <description>Hanoi Tornyai</description>
+ <year>1986</year>
+ <publisher>ZMKMF</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hanoi_t.dsk" size="368640" crc="63e78bb2" sha1="5fe56dc9cd5011e35ad87119a614ff1171c9ef27" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="harcaflk">
+ <description>Harc a Föld Körül</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="harcaflk.dsk" size="368640" crc="5b8a4486" sha1="29cb470ee18232a8b660340830938913e8a42fa7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="harcaflka" cloneof="harcaflk">
+ <description>Harc a Föld Körül (Alt)</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="harcafoldkorul.dsk" size="368640" crc="5cd0d02b" sha1="2b55f2b3a37008ba74d456cd16d1dbb896551915" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="haromtes">
+ <description>Háromtestprobléma</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="haromtes.dsk" size="368640" crc="21857488" sha1="deaa347fd5b2810d351ed464f484c31bde273452" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hcopy">
+ <description>HCopy</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hcopy.dsk" size="368640" crc="e47e3073" sha1="5ebd2c5bb8597c6afc3f37eacd1a082861d56261" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hds">
+ <description>Hiper Digital - System v3.5</description>
+ <year>1989</year>
+ <publisher>Béla Szalontai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hds.dsk" size="368640" crc="ee41e22f" sha1="04b14ff93dcfbcac2b84f5a022311362e2cfabc8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="head">
+ <description>Head</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="head.dsk" size="368640" crc="63cd5d17" sha1="196d69350ffb609fdcc657f54a7a9b51ce4e09b8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="heartlnd">
+ <description>Heartland</description>
+ <year>1990</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="heartland.dsk" size="368640" crc="dee6da92" sha1="0df2550e4fb4298bd59f07354f930051dd51e154" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hlndisme">
+ <description>Heartland Ismertető</description>
+ <year>1990</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="heartlandismerteto.dsk" size="368640" crc="2a8506ce" sha1="59cad75f312d85f8bf4b07422bc4478821642cd9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="helikopt">
+ <description>Helikopter</description>
+ <year>198?</year>
+ <publisher>SCS - Csongrád</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="helikopter.dsk" size="368640" crc="d1a324af" sha1="4b54de6bfa4f779faf549f9008ad735acfe82b1a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="helpbasi">
+ <description>HELP BASIC v1.0</description>
+ <year>198?</year>
+ <publisher>Albatross</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="helpbasi.dsk" size="368640" crc="8a564273" sha1="99e6721124369c1e2757d27ce6c5fdac48787102" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="helpleir">
+ <description>HELP BASIC v1.0 Leírás</description>
+ <year>198?</year>
+ <publisher>Albatross</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="helpleir.dsk" size="368640" crc="3428c982" sha1="4efce15ca6b93f02fbee84783b1a4a525671b659" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hexa">
+ <description>Decimális - Hexadecimális átváltó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hexa.dsk" size="368640" crc="b9dc6633" sha1="9261d4faf479ff05684b11313ece81bff9b1a39d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="homoru">
+ <description>Homorú Tükör Képalkotása</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="homoru.dsk" size="368640" crc="442d979a" sha1="d95e23ef17a7b0af0161e556f1592d7a2238db85" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hotelneu">
+ <description>Hotel Neutron</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hotelneu.dsk" size="368640" crc="7ac8a035" sha1="40a54e448087c067b4de7173ef740cfc370ce9ea" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hoterjed">
+ <description>Hőterjedés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hoterjed.dsk" size="368640" crc="55c792b7" sha1="66a2f22c43b3fb130b90e27629d1c152e8b364fe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hullam">
+ <description>Hullámcsomag</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hullam.dsk" size="368640" crc="60cb5ecc" sha1="f324cb4846b956b45a0d637253fb37ed3fd46a5f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hungaror">
+ <description>Hungaroring</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hungaroring.dsk" size="368640" crc="fbb2b8d5" sha1="747036ff9aa71c5a729e7a98985c1949b5213484" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ikplusz">
+ <description>Interkarate+</description>
+ <year>1989</year>
+ <publisher>Tom</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ikplusz.dsk" size="368640" crc="01a364d7" sha1="dbdc90b55b9d58499b2d41cb5364a2fe8f6571b4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ikplusza" cloneof="ikplusz">
+ <description>Interkarate+ (Alt)</description>
+ <year>1989</year>
+ <publisher>Tom</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ikpluszv2.dsk" size="368640" crc="862f9832" sha1="f6ff18681bc3a89889a6e376d209a94918c5f3e1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="inv182">
+ <description>Angol-Magyar Szótár és Kikérdező - INV182</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="inv182.dsk" size="368640" crc="cd1fcaa9" sha1="fadd24eef8d47cc752c668f4ec4f8eb792cd1d0d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="inv183">
+ <description>Német-Magyar Szótár és Kikérdező - INV183</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="inv183.dsk" size="368640" crc="fd9dbb26" sha1="39da76b2a482a62edf89b2e7237c982f23b21a94" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="inv24">
+ <description>Űrcsata - INV24</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="inv24.dsk" size="368640" crc="6ff75ae0" sha1="863ba2681df9760c5b774d8b42439e73101af1c8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="invaders">
+ <description>Space Invaders</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="invaders.dsk" size="368640" crc="6780bf62" sha1="e351beaadc3684a3c93cd4a38269d281332629bc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="invazio">
+ <description>Invázió</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="invazio.dsk" size="368640" crc="acc155ac" sha1="d4d78bcc3ac18c2ad52e1769d7a7f86d22cf19db" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="iqteszt">
+ <description>IQ Teszt</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="iq-teszt.dsk" size="368640" crc="ca412285" sha1="69e6be3d716326f8214b3a1457ef493270050558" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jancsi">
+ <description>Jancsi a Várban</description>
+ <year>1986</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="jancsiavarban.dsk" size="368640" crc="15f6a09b" sha1="68375326e57cdab2e0309f7bd513c286753420e2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jatekok">
+ <description>Játékok</description>
+ <year>198?</year>
+ <publisher>Jozsef Petrovszky - Szabolcs Rota</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="jatekok.dsk" size="368640" crc="22e61972" sha1="aab273c53eb00557616ddec10e2818d6d3fbdb38" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jegyzet">
+ <description>Jegyzettömb</description>
+ <year>1987</year>
+ <publisher>Gyorgy Gerlai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="jegyzettomb.dsk" size="368640" crc="5aeaed3f" sha1="b9f67723f8381371fc27ea9df69790398750ffb2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jetpack">
+ <description>Jet Pack</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="jetpack.dsk" size="368640" crc="88b151bf" sha1="4b2dd04d34dad27719bfa3c91ad465e724e1adb9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="joy">
+ <description>Joy</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="joy.dsk" size="368640" crc="59dc043d" sha1="732a0d839884c2207a4c8aa680ee2aa825d38957" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jumpjack">
+ <description>Jumping Jack</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="jumpingjack.dsk" size="368640" crc="673c0c33" sha1="3d620796f4175275fc9d0da40eb8fbb18fb8dd43" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jupiter">
+ <description>Jupiter</description>
+ <year>198?</year>
+ <publisher>Péter Dörner</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="jupiter.dsk" size="368640" crc="7abd132a" sha1="6fd70d5dd176ec13417f0c7033523718a9e91a78" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kalandfi">
+ <description>Kalandozások a Fizikában</description>
+ <year>1987</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kalandfi.dsk" size="368640" crc="fb54fb88" sha1="a246a05ca926dc4f67051b5343a696cfff9bca5b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kalandoz">
+ <description>Kalandozz Velem!</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kalandozz_velem.dsk" size="368640" crc="41f084d4" sha1="8d88d16e180e3f7ef093758136b5903d589dfd6d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kalannen">
+ <description>Kalán néni puzzle</description>
+ <year>1989</year>
+ <publisher>Sume Software Service</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kalanneni.dsk" size="368640" crc="4b91f79a" sha1="984d727686c2279bca1c0f626c49dac5a1fb274e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kapkodo">
+ <description>Kapkodó</description>
+ <year>198?</year>
+ <publisher>Zsolt</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kapkodo.dsk" size="368640" crc="7f0665f6" sha1="1e5d0e2d38d47cfdb758ae304fc3431a9bcc2267" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="karakter">
+ <description>Karakter készítő</description>
+ <year>1987</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="karakter.dsk" size="368640" crc="d4bf2e0e" sha1="e2efff44954cb42f875622e994f3124dd5f98fc3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="karate">
+ <description>Karate</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="karate.dsk" size="368640" crc="356c4ccb" sha1="c29415025a952da6e5430301c27e57d19bf46314" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kardhala">
+ <description>Kardhalak és Kincsek</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kardhalakeskincsek.dsk" size="368640" crc="70985e44" sha1="4f9669b47605d2586c3c2d46a2f5eeaa21d7acc6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kardhalf">
+ <description>Kardhalak és Kincsek (Different)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kardhf.dsk" size="368640" crc="0bc5b2c8" sha1="5747f41ac06a54593fc222d1b7c6c56e09c6d12d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="keljfelj">
+ <description>Keljfeljancsi</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="keljfeljancsi.dsk" size="368640" crc="1e9317d3" sha1="21de1655907fc1df3496cfd800c7b30a66439757" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kem">
+ <description>Kém</description>
+ <year>1988</year>
+ <publisher>SPT</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kem.dsk" size="368640" crc="6acbb509" sha1="0ee53f33bbd01f1800a63d3019efe7e1df0d364d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kemia">
+ <description>Boszorkánykonyha - Kalandozások a Kémiában</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kemia.dsk" size="368640" crc="c17e7e7c" sha1="7f2b8f8d8a39d52e0a2a0804ad9a8d37a9ac4eb9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kepek">
+ <description>Képek</description>
+ <year>1987</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kepek.dsk" size="368640" crc="cf829ec3" sha1="91c82f053b4ec7ad1bfe77f2842888c7232fc62d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="keprub">
+ <description>Keprub</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="keprub.dsk" size="368640" crc="3c70d715" sha1="b11f5ef24549ed88562eece798c5e4f58328d70a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kepujsag">
+ <description>Képújság</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kepujsag.dsk" size="368640" crc="b0637d71" sha1="89e38fbbe6a3863d28bc9aa29d787809172a8594" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="keresd">
+ <description>Keresd a gyűrűt</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="keresdagyurut.dsk" size="368640" crc="47105b8c" sha1="dbbd30c9cb02a5afd04567c25d98bc9200fe7c0f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kigyo">
+ <description>Kígyó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kigyo.dsk" size="368640" crc="5202d07e" sha1="92922d3716fe54c02a4824bc840b856abf3c4a73" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kigyosja">
+ <description>Kigyós Játék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kigyosjatekv1.dsk" size="368640" crc="1c2cc376" sha1="72af320d6b665799d2329b10361b8bffb89398f6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kigyosjaa" cloneof="kigyosja">
+ <description>Kigyós Játék (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kigyosjatekv2.dsk" size="368640" crc="48e87697" sha1="f300bbafab505a33e0f36adab38eb3fa4c2effd4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kikzene">
+ <description>Kikstart - Zene</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kikzene.dsk" size="368640" crc="33ff38f9" sha1="fd3b70001588d49cdca7e025be53aae76267e10d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kimento">
+ <description>Kimentő</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kimento.dsk" size="368640" crc="3f536d06" sha1="64d352ddc72c677c81b24d32637d6017ad362db1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kincsatl">
+ <description>Kincskereső (Atlas)</description>
+ <year>1987</year>
+ <publisher>Atlas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kincsatl.dsk" size="368640" crc="18f0b1a7" sha1="1c5316da9ecaa8f1c508e91b70824d1d4574a66e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kincsker">
+ <description>Kincskereső</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kincsker.dsk" size="368640" crc="bcf771a3" sha1="2f13648b804b9bdcca02c9154699ceb4e40d2b89" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kiscsava">
+ <description>Kis Csavargó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kiscsavargo.dsk" size="368640" crc="d3213065" sha1="e52a1f72c43a0efa138dfe302ab38a918fd50109" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kisersil">
+ <description>Kísértetkastély 1</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kisertet1.dsk" size="368640" crc="b5a52864" sha1="8bf0fffa8257493bbe94e585d2d530a70161f43e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kisertet">
+ <description>Kísértetkastély</description>
+ <year>1989</year>
+ <publisher>Attila Canjavec</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kisertetkastelyv1.dsk" size="368640" crc="d1891cf8" sha1="c52971b50a01a6318c8e755c0b02ae2f82e080be" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kiserteta" cloneof="kisertet">
+ <description>Kísértetkastély (Alt)</description>
+ <year>1989</year>
+ <publisher>Attila Canjavec</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kisertetkastelyv2.dsk" size="368640" crc="87b931b0" sha1="cd4be66c2c4e9814a8a7f16d0bd8524ab4ed2b65" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kisertetb" cloneof="kisertet">
+ <description>Kísértetkastély (Alt 2)</description>
+ <year>1989</year>
+ <publisher>Attila Canjavec</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kisertetkastelyv3.dsk" size="368640" crc="9982a4b7" sha1="7de873f25e6c801a6b672b975ca25ff8cd3cf7d9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kismozdo">
+ <description>Kismozdony</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kismozdony.dsk" size="368640" crc="0948f8b7" sha1="d7280c6cc8bf4db7df73ca73df237be2ee82b828" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kitoltes">
+ <description>Kitöltés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kitoltes.dsk" size="368640" crc="d738746c" sha1="fbb5ba1400e7a86133b8c58ade73411d378f2674" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet11">
+ <description>Képes Német 1-1 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet11.dsk" size="368640" crc="04d651a8" sha1="69a668fd1bd84be54aa58ac39bf863c51f6c005c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet12">
+ <description>Képes Német 1-2 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet12.dsk" size="368640" crc="70881a05" sha1="63dc6ccf62b5fbcdf5239fc0176bb03275895539" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet13">
+ <description>Képes Német 1-3 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet13.dsk" size="368640" crc="01099321" sha1="11c9101ad167b1330f24ee4f9e103f4d63fa8a4c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet14">
+ <description>Képes Német 1-4 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet14.dsk" size="368640" crc="b4064713" sha1="cae6a0371fae44034fb7771bcdfc5c98070dd1b8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet15">
+ <description>Képes Német 1-5 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet15.dsk" size="368640" crc="de5d4c90" sha1="f5ff92ddec2de81e6228aade43c4bf27bfac66ff" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet21">
+ <description>Képes Német 2-1 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet21.dsk" size="368640" crc="94ea8482" sha1="1d0168a552fd8a5191592ddf8d17ce85eda72c0b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet22">
+ <description>Képes Német 2-2 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet22.dsk" size="368640" crc="5f4e78a5" sha1="62f6999e7f42bcdb8ed1c82fe5dc9d967cbe6bd9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet23">
+ <description>Képes Német 2-3 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet23.dsk" size="368640" crc="b0fdf6a7" sha1="9d614fa19262249a8ebc9124ad911fa0d32b09d3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet24">
+ <description>Képes Német 2-4 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet24.dsk" size="368640" crc="8a21b4d1" sha1="2fe8d62a05f93e527228538a3479a68e1fafa39e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet25">
+ <description>Képes Német 2-5 - Szófelismerés</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet25.dsk" size="368640" crc="7ddc67c3" sha1="4663f171ce70e2ee5eabdd75806015c395f657ae" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet31">
+ <description>Képes Német 3-1 - Der, Die Das</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet31.dsk" size="368640" crc="fb513d65" sha1="65e3efc96880c69c39a8af367ec720ff90cc6f77" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet32">
+ <description>Képes Német 3-2 - Der, Die Das</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet32.dsk" size="368640" crc="1b6bc8d1" sha1="d0ca6ea21fb24b0833e659adfb328ecb55f87a61" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet33">
+ <description>Képes Német 3-3 - Der, Die Das</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet33.dsk" size="368640" crc="0aa0e921" sha1="63ae1e9877c5441bc40e79d64f3bd32b3b48401b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet34">
+ <description>Képes Német 3-4 - Der, Die Das</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet34.dsk" size="368640" crc="83bb5bc7" sha1="222d777e52e2ca96aaffa1c25e1afa802f4acd2c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet35">
+ <description>Képes Német 3-5 - Der, Die Das</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet35.dsk" size="368640" crc="4951173d" sha1="37b4f78a7f018ade206defe1d6f129f80f111d8e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet41">
+ <description>Képes Német 4-1 - Ja Oder Nein</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet41.dsk" size="368640" crc="e7b34c1c" sha1="559bf3b0799c5002587fb9bc82d8f0997fb51dfd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet42">
+ <description>Képes Német 4-2 - Ja Oder Nein</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet42.dsk" size="368640" crc="0423165a" sha1="46b142a11990f1595d22d0c51b97119fd0fc5a40" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet43">
+ <description>Képes Német 4-3 - Ja Oder Nein</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet43.dsk" size="368640" crc="eaaee9ba" sha1="c07c9a18c024b437262b92c3ed07e1b1fe77010d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet44">
+ <description>Képes Német 4-4 - Ja Oder Nein</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet44.dsk" size="368640" crc="28723bf0" sha1="37b3cc3a7dc1a004f561626840e620efc7f4a1aa" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knemet45">
+ <description>Képes Német 4-5 - Ja Oder Nein</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knemet45.dsk" size="368640" crc="7b139737" sha1="a293d32779e5a6fcb8e457f94e8acf93af9b29a8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knightlo">
+ <description>Knight Lore</description>
+ <year>1985</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knightlore.dsk" size="368640" crc="cf5d6bf5" sha1="2093aac40dba54b8b1a79d95b8f23377df1af634" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knightloa" cloneof="knightlo">
+ <description>Knight Lore (Alt)</description>
+ <year>1985</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knightv2.dsk" size="368640" crc="1e9c98d6" sha1="cef586695001c7ae2b2833c62025a9f984300343" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="knkdemo">
+ <description>K&amp;K Soft Szinuszdemo</description>
+ <year>198?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="knksoft.dsk" size="368640" crc="330ed3b8" sha1="bfc3a7843db0121a5cccf81cb5c1d382946c2412" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kobanya">
+ <description>Kőbánya</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kobanya.dsk" size="368640" crc="d3cf2e11" sha1="616ea697d0ccbb6cf8b9d81db0dd74303f9a5aaf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kocka">
+ <description>Kocka</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kocka.dsk" size="368640" crc="c030cd26" sha1="ee2a45ad2ffbd5afe269e8d2d1529715b6f21247" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kocka98">
+ <description>Kocka98</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kocka98.dsk" size="368640" crc="0471280a" sha1="1d9c9fe166ed34ea0f9f02ba1ee897048371cb82" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kockapok">
+ <description>Kockapóker</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kockapoker.dsk" size="368640" crc="a5752a15" sha1="335c6f0d34dbc1decbc5791395fcf3e83a991f07" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kockapokj" cloneof="kockapok">
+ <description>Kockapóker (Joystick)</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kockapokerjoy.dsk" size="368640" crc="e8b7a446" sha1="d738c6d83d3fb6f3321213f93272b80fb1a22ca1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="komparsz">
+ <description>Komparátor Számítás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="komparsz.dsk" size="368640" crc="992c4410" sha1="bd2ba6f3e96bb58c7264f7304441aac25267dddf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kormoci">
+ <description>Körmöci Arany</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kormociarany.dsk" size="368640" crc="6b8d2743" sha1="592250fb90f2876c7b4596b3017b5ced496f205e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="korok">
+ <description>Körök</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="korok.dsk" size="368640" crc="60124740" sha1="b2bf6e520fe1a331cce842f67c113667f31702fb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="korong">
+ <description>Korongbiliárd</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="korong.dsk" size="368640" crc="54f8d41f" sha1="5d84684bb7211ad2f49914c53213db84a76f66ca" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="korvonal">
+ <description>Körvonal</description>
+ <year>198?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="korvonal.dsk" size="368640" crc="3f1d463e" sha1="88e783d5f13c00f64969cffb781796634d4914e4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="krok">
+ <description>Krok</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="krokv1.dsk" size="368640" crc="2867a806" sha1="8fcce1104a677698332bad6f7b542dcb90f15b8f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kroka" cloneof="krok">
+ <description>Krok (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="krokv2.dsk" size="368640" crc="1dd3097b" sha1="61294ac6655a9cb5807d1a2200c80a78e0327269" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kugli">
+ <description>Kugli</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kugli.dsk" size="368640" crc="e55dc4fb" sha1="0f643b81ae3924f5267218c44ab56dcb32ad75b6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kukucs">
+ <description>Kukucs</description>
+ <year>1987</year>
+ <publisher>King ec Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kukucs.dsk" size="368640" crc="06c5a2af" sha1="29c663aeb43538fcc1076fef3362fdfe10972cca" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kulcs">
+ <description>Kulcs</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kulcs.dsk" size="368640" crc="e4561aee" sha1="971b05f18007d2cb78352b4719aa07d88897805a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kulcsjat" cloneof="kulcs">
+ <description>Kulcs Játék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kulcsjatek.dsk" size="368640" crc="27bda7f6" sha1="863bff36cc4f86e9d64cf4c327cd9b55a14a53e0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kulcshaz">
+ <description>Kulcsház</description>
+ <year>198?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kulcshaz.dsk" size="368640" crc="b982cd65" sha1="1ab9f988e0257430640928e194c81fe22ccdbc97" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kulcsha2">
+ <description>Kulcsház 2</description>
+ <year>198?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kulcshaz2.dsk" size="368640" crc="be503833" sha1="b07b23bdb7774d9414b5be4ebe2babffce1429eb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kwfb">
+ <description>Keywords + F-BASIC 1.0</description>
+ <year>1987</year>
+ <publisher>Péter Bereczky</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="kwfb.dsk" size="368640" crc="7e8e8445" sha1="81f2001bf6daae10a65480ebb72b570616f49b33" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lablesli">
+ <description>Labirintus Leslie</description>
+ <year>1987</year>
+ <publisher>Zsolt Dobrovics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lab_lesl.dsk" size="368640" crc="5a12cff2" sha1="d08bb9d6cde063553db5b032dc955521e071af11" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labizold">
+ <description>Labirintus (Zoltán Gugi)</description>
+ <year>198?</year>
+ <publisher>Zoltán Gugi</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lab_zold.dsk" size="368640" crc="bf0efe93" sha1="bb079eabc0d4ae9f9f0a70db0fd5043d6fca100b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labirint">
+ <description>Labirintus</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="labirint.dsk" size="368640" crc="ffb06c68" sha1="2e190011d8ed826845be9889a7acab90d8e6edb1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labikigy">
+ <description>Labirintus - Kígyós</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="labirintus-kigyo.dsk" size="368640" crc="b3dd7235" sha1="795145247e03b7b24d5aea4015c7e3a3ee5db9d4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labiri3d">
+ <description>Labirintus (3D)</description>
+ <year>198?</year>
+ <publisher>Zoltán Gugi</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="labirintus.dsk" size="368640" crc="e9d7ab1b" sha1="006d1cc41cf34009b32356999ddd350b5c055253" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="laddman">
+ <description>Ladderman</description>
+ <year>1989</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ladderman.dsk" size="368640" crc="7c28b953" sha1="4a533baa384af18de3e2cdbb717ef87e2d6871f9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="laddmana" cloneof="laddman">
+ <description>Ladderman (Alt)</description>
+ <year>1989</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="laddermanv2.dsk" size="368640" crc="ef9dafd3" sha1="94dde5148c605b9cd88f25216a11ef81731f46fc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lagreno">
+ <description>La Grenoiulle</description>
+ <year>1991</year>
+ <publisher>Agilar - Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lagreno.dsk" size="368640" crc="84575c84" sha1="00be72f7fc54ca59c16593404f76c1f798fd8002" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lampacs">
+ <description>Bűvös lámpácskák</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lampacs.dsk" size="368640" crc="0b7663d3" sha1="b149ea52329d140fabeb50707aa661bdac390643" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lampak">
+ <description>Lámpák</description>
+ <year>1986</year>
+ <publisher>István Németh</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lampak.dsk" size="368640" crc="f60c55a3" sha1="c63a514816f9c6815774788889f329b12d95185c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lede">
+ <description>Le Dé</description>
+ <year>198?</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lede.dsk" size="368640" crc="ba2ffe77" sha1="6b37df060e97830f21af4e6dfc7ca56b4f4e1be7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ledea" cloneof="lede">
+ <description>Le Dé (Alt)</description>
+ <year>198?</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ledev2.dsk" size="368640" crc="1ae15727" sha1="bbc3b72363095184852d47891c684285871443f8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="legvedel">
+ <description>Légvédelem</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="legvedelem.dsk" size="368640" crc="3f75b564" sha1="a4b3b743a7360ed6b2e6d474df873f80bd5ae4cb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lennon">
+ <description>Lennon</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lennon.dsk" size="368640" crc="94610c08" sha1="7b936bff392b46cbd758fa0261beacb0051ca4d9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lepke">
+ <description>Mentsd Meg a Lepkéket!</description>
+ <year>198?</year>
+ <publisher>Janos Racz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lepke.dsk" size="368640" crc="c897a5cd" sha1="25f10a58927852fc90c14ab82423157f8d339499" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="letiltas">
+ <description>Letiltás</description>
+ <year>1986</year>
+ <publisher>Gaba Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="letiltas.dsk" size="368640" crc="e62d5b93" sha1="6594a5e74cce06d2f9a61250a2d67b43f156bb6d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="letra">
+ <description>Létra</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="letra.dsk" size="368640" crc="e03a929e" sha1="1579a10a2eaca6364a327c2b53f84c7e6f99a36b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="letraa" cloneof="letra">
+ <description>Létra (Alt)</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="letrav2.dsk" size="368640" crc="906001ba" sha1="a1683e6c4f9ce4b795da2e05a4a30939b7191db2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="level3">
+ <description>Level Three</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="level3.dsk" size="368640" crc="47c788d8" sha1="4d07efa6dfbfb07aecf7869a8d119ded7d0388bb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="levelkes">
+ <description>Levélkészítő</description>
+ <year>1988</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="levelkes.dsk" size="368640" crc="eddc7759" sha1="77a14a91ac6891ad1bb95d6aa7cc54e7397b7adb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lezer">
+ <description>Lézer</description>
+ <year>1988</year>
+ <publisher>SYS</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lezer.dsk" size="368640" crc="4eec87f4" sha1="daa436c796a8c5f6e9c1da26391f8a1a450c682d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="liba">
+ <description>Liba</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="liba.dsk" size="368640" crc="1de057d1" sha1="cc70fab54071483d03d388b299da535584cb353d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lift">
+ <description>Lift</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lift.dsk" size="368640" crc="c5f4d962" sha1="014ffaf6d48ceda56a1efc31937b84dad03c4c33" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="liftes">
+ <description>Liftes Fiú</description>
+ <year>198?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="liftes.dsk" size="368640" crc="ee9ad39e" sha1="6e9c07ad93fd251027f4786818e4f5eaa9d10d00" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lina">
+ <description>Lina</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lina.dsk" size="368640" crc="dddd1fb9" sha1="475ff4f6f57f26e9f2240be06ab4aa617aed64fd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="locomot">
+ <description>Locomotion</description>
+ <year>1985</year>
+ <publisher>Mastertronic</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="locomotion.dsk" size="368640" crc="340939d0" sha1="4dbb587dbc82f37f7f85439107d12fe4f0d3d997" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="logo">
+ <description>Logo - Teknocgrafika</description>
+ <year>1987</year>
+ <publisher>László Nagy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="logo.dsk" size="368640" crc="4cbf5e18" sha1="1b131c84ee19da2ffa9af1a7ca2c67dbd7ebd9e2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="logosz">
+ <description>Logo</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="logosz.dsk" size="368640" crc="afc9f94b" sha1="e4445daa99e22c2cb755df08d91823331fe8fd86" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="logosza" cloneof="logosz">
+ <description>Logo (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="logoszv2.dsk" size="368640" crc="0bd67ecc" sha1="01401aa78ff0f073f42507db25eed70cc93dc819" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lottojat">
+ <description>Lotto - Jatekot Segito Program</description>
+ <year>1986</year>
+ <publisher>Centrumdata VGMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lotto [a].dsk" size="368640" crc="0373b542" sha1="c788f979e03f1c3416a718ebff7451c5fedd60b5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lotto">
+ <description>Lotto</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lotto.dsk" size="368640" crc="1457f31c" sha1="d55af47473fd55ea3817682437fa5dc53f7aa2a3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lotto1">
+ <description>Lotto (Different)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lottosza.dsk" size="368640" crc="3d70c636" sha1="4305792f0fe5b0cda9d8c2306c37a312e532e3f3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lovagito">
+ <description>Lovagi Torna</description>
+ <year>1988</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lovagitorna.dsk" size="368640" crc="92212618" sha1="d05cf02fb2cdfb9981f9453d1eb3965461dbf749" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lovascsa">
+ <description>Lovascsata</description>
+ <year>198?</year>
+ <publisher>Steve Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lovascsata.dsk" size="368640" crc="f2980151" sha1="0d49a62fcd54f5013ea0e749a05729a33e33a8da" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="loversen">
+ <description>Lóverseny</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="loverseny.dsk" size="368640" crc="f6dfba2e" sha1="1ac2ae0e2e08eff8189665d06bf6ed68b627ed6a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="loversena" cloneof="loversen">
+ <description>Lóverseny (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="loverv2.dsk" size="368640" crc="19e53cc6" sha1="78ef78618696f177aa6a8056948edc0f0112e975" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lsrutin">
+ <description>Load-Save usr Rutinok</description>
+ <year>1986</year>
+ <publisher>Géza Garai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lsrutin.dsk" size="368640" crc="51cb71a1" sha1="a18147aec89051b601df79a5f11904828c201894" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lsrutin2" cloneof="lsrutin">
+ <description>Load-Save usr Rutinok v2</description>
+ <year>1986</year>
+ <publisher>Géza Garai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lsrutin2.dsk" size="368640" crc="e66b29a8" sha1="b7281e32fe3ed7da30a1c0da0871c5984c1ee317" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="lsrutin3" cloneof="lsrutin">
+ <description>Load-Save usr Rutinok v3</description>
+ <year>1986</year>
+ <publisher>Géza Garai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="lsrutin3.dsk" size="368640" crc="37adfa87" sha1="02f049283d9b29a6d04c8ce9aa5a23949bfc00e2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="holdra">
+ <description>Holdra szállás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="luna.dsk" size="368640" crc="e063e19b" sha1="97a1fb8372f621724ed3cbed307d70a4a1f735c1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="monitor">
+ <description>Monitor v0.5</description>
+ <year>1990</year>
+ <publisher>Andras Soos</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="m5.dsk" size="368640" crc="61266824" sha1="13f71d09af887fe25e5481e328903599fae6bb4c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="macskafo">
+ <description>Macskafogó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="macskafo.dsk" size="368640" crc="1dd54927" sha1="bd6e8ae826f7202d01d7bf294d650b302348dcf5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="magicbal">
+ <description>Magic Ball</description>
+ <year>1989</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="magicball.dsk" size="368640" crc="154419cd" sha1="9ea0f702d0784d3176a15366e1ac455f3da9fdb9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="magicbala" cloneof="magicbal">
+ <description>Magic Ball (Alt)</description>
+ <year>1989</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="magicballv2.dsk" size="368640" crc="52dbb66d" sha1="b5588fc6dc456e5e0ea1f3c87a875d0c86fcd7a1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="magyaror">
+ <description>Magyarország</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="magyaror.dsk" size="368640" crc="2149a25c" sha1="286bb4da936e61c4cfd2dfe8ca6ac11417717470" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="magyasil">
+ <description>Magyarország (SIL)</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="magyarorszag.dsk" size="368640" crc="3af5efd8" sha1="2ead3b732ef5b127a6be128a4e13f929bb019da1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="malom">
+ <description>Malom (S.P. Studio)</description>
+ <year>1987</year>
+ <publisher>S.P. Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="malom.dsk" size="368640" crc="abf85c56" sha1="f0704af9ac9bdebb56806ea55ff88e4f393fa882" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="malom2">
+ <description>Malom</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="malom2.dsk" size="368640" crc="51751dec" sha1="7bc2c90cf618e37459f4c54297013546c3a7e03d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mandelma">
+ <description>Mandelmagic v1.0</description>
+ <year>198?</year>
+ <publisher>Albatross - Flocky Chocs</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mandelma.dsk" size="368640" crc="5c4549d8" sha1="2690311568a1001af464a8f98010c4c423659630" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mandfrak">
+ <description>Mandelbrot-Fraktál Generátor</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mandfrak.dsk" size="368640" crc="9f34c8ea" sha1="83847a5a52e295106d987bb543fbf9d5457d6d61" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mariolab">
+ <description>Márió a Labirintusban</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="marioalabirintusban.dsk" size="368640" crc="9b6e568e" sha1="8ad4b12fec95c936ff4af69441c8d7a386e6583c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mariolaba" cloneof="mariolab">
+ <description>Márió a Labirintusban (Alt)</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="marioalabirintusbanv2.dsk" size="368640" crc="79461a9f" sha1="6aa2274efe0c1595ce59b540e628486a20394c05" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="marokko">
+ <description>Marokkó</description>
+ <year>198?</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="marokko.dsk" size="368640" crc="19925136" sha1="6934768e0ddf496c0c2d2b1cf8d1c7c0174ab7d1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mars">
+ <description>Mars</description>
+ <year>1988</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mars.dsk" size="368640" crc="9a45ab50" sha1="04c2271b96f69cfa1c831b2fa63cf1ed8064c322" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="marsa" cloneof="mars">
+ <description>Mars (Alt)</description>
+ <year>1988</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="marsv2.dsk" size="368640" crc="58ccf31e" sha1="fce4cb3b8430e13e8fa0f8dc79be4324468b3d47" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="masolo1">
+ <description>Másoló 1</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="masolo1.dsk" size="368640" crc="0cf4491e" sha1="17e89fd5b70051e4257c675c115e591b14fb22bd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mastermi">
+ <description>Mastermind</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mastermind.dsk" size="368640" crc="faf2b2e0" sha1="b5e6a89e64eedaee435743e2fe8fd2dca7202804" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="matrix">
+ <description>Mátrix</description>
+ <year>1987</year>
+ <publisher>József Cseh</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="matrix.dsk" size="368640" crc="71327938" sha1="22c99839901c69c2fdb6f3dc47b990fe8ae7fbd1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mav10">
+ <description>Számelméleti Programok - MAV 10</description>
+ <year>198?</year>
+ <publisher>Dr. Andras Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mav10.dsk" size="368640" crc="f07c50f5" sha1="6797ad2b45721087b9c9cfe09145ac05450ea0d2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mav11">
+ <description>Egyenletek megoldása - MAV 11</description>
+ <year>1983</year>
+ <publisher>Dr. Andras Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mav11.dsk" size="368640" crc="345dd238" sha1="13210c3257488f411f9c2857fa52c9dec707f268" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mav12">
+ <description>Kombinatorikai Programok - MAV 12</description>
+ <year>1983</year>
+ <publisher>Dr. Andras Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mav12.dsk" size="368640" crc="516bb2c4" sha1="2c2c7095dc30927dab41e4c72370c326f7eacc25" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mav13">
+ <description>Függvényábrázolás és transzformáció - MAV 13</description>
+ <year>1983</year>
+ <publisher>Dr. Andras Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mav13.dsk" size="368640" crc="ca223903" sha1="62af098b57d360b552f9661abd21243c344e8d0d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mav23">
+ <description>Gyokkereso - MAV 23</description>
+ <year>1983</year>
+ <publisher>Dr. Andras Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mav23.dsk" size="368640" crc="4fba8f1b" sha1="779a0cd109ad2e918669d9d9e8b7053f19fa51ab" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mav24">
+ <description>Galton Deszka - MAV24</description>
+ <year>1983</year>
+ <publisher>Dr. András Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mav24.dsk" size="368640" crc="912ea58d" sha1="6e965508ff325dcf1ebe7a4537abf09173d2c701" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mav26">
+ <description>Prímszámok - MAV 26</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mav26.dsk" size="368640" crc="a493757e" sha1="69124b0f8f135d404f986f01504273f44b74305d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="maya">
+ <description>Maya</description>
+ <year>1986</year>
+ <publisher>Steve Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="maya.dsk" size="368640" crc="c9c8daa9" sha1="ac5d1cb7ba73099651b7b42e0119ddd47256d13d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mbas">
+ <description>Magyar BASIC v1.2</description>
+ <year>198?</year>
+ <publisher>Albatross</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mbas.dsk" size="368640" crc="bf15bba4" sha1="e837ed6a7503b6b0060dd2d9ae9695bece4798da" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mbashasz">
+ <description>Magyar BASIC v1.2 - Hasznalati Utmutato</description>
+ <year>198?</year>
+ <publisher>Albatross</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mbashasz.dsk" size="368640" crc="0b164a92" sha1="d3f75f72ef688a54c121cb1263c9a99ca52582e2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="medence">
+ <description>Medence</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="medence.dsk" size="368640" crc="6edad536" sha1="366e1076264bd9c9836b92d4a880f76aa09b0899" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="memo">
+ <description>Memo</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="memo.dsk" size="368640" crc="b664fab4" sha1="87db14c5d08253e660e66a5534591e0dd815b755" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="memoa" cloneof="memo">
+ <description>Memo (Alt)</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="memov2.dsk" size="368640" crc="07e2fa4a" sha1="ee7f4992f70d6683a806299222d9c6926ee7e522" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="memoria">
+ <description>Memória</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="memoria.dsk" size="368640" crc="51e1d566" sha1="9d84c731896f5f9ecb8968fd6286624aa9d4dca7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="memory">
+ <description>Memory</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="memory.dsk" size="368640" crc="24b8ca5e" sha1="6883590a413451e3ce86ae07c3aabe5700712c0d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mentohaj">
+ <description>Mentőhajó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mentohajo.dsk" size="368640" crc="08f8f5bf" sha1="4819ab2b754bac117f78629bb09478434b2b8830" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mentsdme">
+ <description>Mentsd Meg Erdélyt</description>
+ <year>198?</year>
+ <publisher>Osmagyar Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mentsdmegerdelyt.dsk" size="368640" crc="5d895bfd" sha1="c72c46c89223310acc3c83849af07c27ced3519b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="merorezg">
+ <description>Merőleges Rezgések</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="merorezg.dsk" size="368640" crc="fa5e0f37" sha1="6b38161e1aa37eb3ad18b90b268af627a4b35dd4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="merryboy">
+ <description>Merryboy</description>
+ <year>1991</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="merryboy.dsk" size="368640" crc="53cc03c1" sha1="eac3d73ec1036f919f4739c4e37dfdd7c3626e57" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="meseadv">
+ <description>Mese-Adventure</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mese-adventure.dsk" size="368640" crc="5be567d1" sha1="bfe5f8e949f2acda102696049428845ffb59dcea" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="meteorit">
+ <description>Meteorit</description>
+ <year>198?</year>
+ <publisher>K&amp;K Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="meteorit.dsk" size="368640" crc="f98bcbcd" sha1="34624aaa7b452f2b77024609cdcbe0ef2a21b8fa" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mikropro">
+ <description>Z80 Mikroprocesszor</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mikropro.dsk" size="368640" crc="83be0019" sha1="8f6d3dc6accd14d5aef223820b8b293ad090ed9e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="millikan">
+ <description>Millikan Kísérlete</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="millikan.dsk" size="368640" crc="d29c5351" sha1="14fcb0aa450a89211d384aeb0bba5573302dca79" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minedout">
+ <description>Minedout</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="minedout.dsk" size="368640" crc="c2fa3908" sha1="233940e6b9c74485a24da52391ad5748bc7ac25c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="miniart">
+ <description>Mini Art</description>
+ <year>1986</year>
+ <publisher>Tibor Kerekes</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mini_art.dsk" size="368640" crc="c2bb80ff" sha1="d3b4ef5a37e1ddb3de9589723a2611324182fb7c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="miniddt">
+ <description>Mini DDT</description>
+ <year>1986</year>
+ <publisher>Gaba Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="miniddt.dsk" size="368640" crc="b332edef" sha1="b44d14ec8f595d60473624dd193ca07d84983964" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minigolf">
+ <description>Minigolf</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="minigolf.dsk" size="368640" crc="5309be9a" sha1="9c1667592539191ce48159fc53ed10f16aa0d65b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="miniraj">
+ <description>Mini Rajzoló</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="minir.dsk" size="368640" crc="8072fef5" sha1="74dbe9f29cf5cf9767539ba496241b2b996a70e6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="minotaur">
+ <description>Minotaurusz</description>
+ <year>198?</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="minotaurusz.dsk" size="368640" crc="d89611a0" sha1="9780702566a97cdda67f75be32a34af91c31e336" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="missgal">
+ <description>Mission Galaktic</description>
+ <year>1987</year>
+ <publisher>Hungarie Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="missiongalaktic.dsk" size="368640" crc="c60c8758" sha1="806f94e3e77666931b60613de3ed00703eb97bab" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="monge">
+ <description>Monge</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="monge.dsk" size="368640" crc="adb2d9d9" sha1="2270a2c0bcabe75a4a42b1f49313690902770b72" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="monszkop">
+ <description>Monoszkóp</description>
+ <year>2007</year>
+ <publisher>Viktor Varga</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="monoszkop.dsk" size="368640" crc="d4c08ce2" sha1="e22928be36d54dd4b55bff0c6096395ec33b0f59" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="motorode">
+ <description>Motorodeó</description>
+ <year>198?</year>
+ <publisher>STV - Imre Ehreth</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="motorodeo.dsk" size="368640" crc="8887a29f" sha1="16c0c9fa6f6594cdd4cf61654af26d102c407f11" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="motorode2" cloneof="motorode">
+ <description>Motorodeó 2</description>
+ <year>198?</year>
+ <publisher>STV - Imre Ehreth</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="motorodeo2.dsk" size="368640" crc="b903c989" sha1="b47b0ac80c0168203c3d94a448f0522f9bc99fb9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mozdony">
+ <description>Mozdony</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mozdony.dsk" size="368640" crc="1f5694d6" sha1="715faa2cc6d20da00f2fe46592b2fbf3af68cb08" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mozdonya" cloneof="mozdony">
+ <description>Mozdony (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mozdonyv2.dsk" size="368640" crc="5daf18fc" sha1="55bf44939a73696b7a24240d560173a7a581fc7d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mozgoo">
+ <description>Mozgó O</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mozgoov1.dsk" size="368640" crc="7dbb2044" sha1="e06bc49096c12ef2f0feec4a80d0006f0d04fcd8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mozgooa" cloneof="mozgoo">
+ <description>Mozgó O (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mozgoov2.dsk" size="368640" crc="c9a238f1" sha1="5f47274f59dc2ef89b906eacfa8fb466099943ac" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mps1000">
+ <description>MPS-1000 Beállítás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mps1000.dsk" size="368640" crc="748704b2" sha1="5339729ceee8de67659d705909462d7c733bbfcc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mralex">
+ <description>Mr. Alex</description>
+ <year>1985</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mralex.dsk" size="368640" crc="723c506d" sha1="45c3aa848502f5a9d1bfd43f5a7ec4fe2b9503c1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mralexp" cloneof="mralex">
+ <description>Mr. Alex (64+)</description>
+ <year>1985</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mralexplus.dsk" size="368640" crc="4c1bb711" sha1="94a8e351e19d14476f9ab46a8eab20b3caf89e3f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mralexa" cloneof="mralex">
+ <description>Mr. Alex (Alt)</description>
+ <year>1985</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mralexv2.dsk" size="368640" crc="fcf2b47f" sha1="7597731360696726069c45481236aa22d9bd0c83" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mralexb" cloneof="mralex">
+ <description>Mr. Alex (Alt 2)</description>
+ <year>1985</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="mralexv3.dsk" size="368640" crc="8fbbef48" sha1="54069c548442e612d1f420e3a866a40d9d3f4573" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="msdeng1">
+ <description>Medium State Degree in English - Preparatory Test No. 1</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="msdeng1.dsk" size="368640" crc="66dab331" sha1="49e0dfbdaa671eea1bd5fcd4f1a7953cd6369539" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="msdeng2">
+ <description>Medium State Degree in English - Preparatory Test No. 2</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="msdeng2.dsk" size="368640" crc="f186ea23" sha1="082c4fe45b2e425cdfd8c9ac1460459159a4fd0e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="msdeng3">
+ <description>Medium State Degree in English - Preparatory Test No. 3</description>
+ <year>1986</year>
+ <publisher>VGy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="msdeng3.dsk" size="368640" crc="35eee3c9" sha1="839090ab78c9a841d3dd7d93f92cea015a89deb4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="musicdig">
+ <description>Music-Digit</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="musikdig.dsk" size="368640" crc="f112c769" sha1="1eb039b921402db7d1eeb6e059ee1f3932a4925e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="muu">
+ <description>Múú</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="muu.dsk" size="368640" crc="ab5b97e9" sha1="8c13477b1712ef388d72973dc0bd771544ecb711" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nagyfugg">
+ <description>Nagy Függvényábrázoló</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nagyfuggvenyabrazolo.dsk" size="368640" crc="8c91af21" sha1="5b606256b228ab64ac9d2b211565743410896090" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="naturaba">
+ <description>Back to the Nature</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="naturaba.dsk" size="368640" crc="1abae8f7" sha1="c56a1c937b796377b003347dc28f4415967ef8b1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nautilus">
+ <description>Nautilus</description>
+ <year>198?</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nautilus.dsk" size="368640" crc="e5b42196" sha1="498776cd0ffd37f257a262fce90dac8ae1e2c6df" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nebulus">
+ <description>Nebulus</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nebulus.dsk" size="368640" crc="ed1b77a8" sha1="13789687a210fba14bb952c2cf6cee5780da361f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nightsha">
+ <description>Night Shade</description>
+ <year>1985</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nightshade.dsk" size="368640" crc="60f764b2" sha1="2b361b92b1081fbd9244035060d14b68f7479b0c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nim">
+ <description>Nim</description>
+ <year>198?</year>
+ <publisher>L.S.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nim.dsk" size="368640" crc="ec28f298" sha1="164a8cc790ac34706a6f6616fc95f30446988e43" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ninja">
+ <description>Ninja</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ninja_v1.dsk" size="368640" crc="37f2c152" sha1="d1c5acb7a8971a9908ac41e06340858f49ff1baa" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ninjaa" cloneof="ninja">
+ <description>Ninja (Alt)</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ninja_v2.dsk" size="368640" crc="b317f2ef" sha1="18e7df426dfe1137e62277bb89ec1b9b7aa9f970" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ninoo">
+ <description>Ninóó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ninoo.dsk" size="368640" crc="e048eb3f" sha1="a886d215fde0280bfbdfbf05ae23bdab90280495" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="no">
+ <description>Nő</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="no.dsk" size="368640" crc="b83df24d" sha1="b51111c5b2ed5cb9095f1d3d55f63bc99d985213" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="novocopy">
+ <description>Novotrade-Copy</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="novocopy.dsk" size="368640" crc="758c6ae0" sha1="f842fbcb1a56a20b8a82cbd251a5568611d64ccf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="novotape" cloneof="novocopy">
+ <description>Novotrade-Copy (Tape)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="novotape.dsk" size="368640" crc="ec034666" sha1="ddd05b1a63263e1cb74cafad3f2a01e8a13d046e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyakter">
+ <description>Nyáktervező</description>
+ <year>198?</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyaktervezo.dsk" size="368640" crc="896eba37" sha1="d67363bf0466898cec31c9cb1b3af87e6d032bf9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyelvtan">
+ <description>Nyelvtanító Program</description>
+ <year>1986</year>
+ <publisher>ZMKMF</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyelvtanito.dsk" size="368640" crc="dcf6e651" sha1="f897e9f23a3f7bfef6e9fe4f6d25c23efc41ac12" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyilvan">
+ <description>Nyilvántartó Program</description>
+ <year>1989</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyilvantarto.dsk" size="368640" crc="dc5a1ad0" sha1="93401b99a4ec5c53190f03dd919acf56c211a9f2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyulvada">
+ <description>Nyúlvadászat</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyulvadaszat.dsk" size="368640" crc="23aeda7e" sha1="65480395440aa2debbe6634deb473601686106bb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyuszi1">
+ <description>Nyuszi Olvasni Tanít 1</description>
+ <year>198?</year>
+ <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyuszi1.dsk" size="368640" crc="5fce2b0b" sha1="fb4d71d6cd15767ac6fa1ba45975ad8b241463d6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyuszi2">
+ <description>Nyuszi Olvasni Tanít 2</description>
+ <year>198?</year>
+ <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyuszi2.dsk" size="368640" crc="9afd7e64" sha1="70adb09010a979b5d1567f179aaf6338d1f4de0f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyuszi3">
+ <description>Nyuszi Olvasni Tanít 3</description>
+ <year>198?</year>
+ <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyuszi3.dsk" size="368640" crc="ce42a55b" sha1="d082492f76765388e010309c06800dcc580a7348" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyuszi4">
+ <description>Nyuszi Olvasni Tanít 4</description>
+ <year>198?</year>
+ <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyuszi4.dsk" size="368640" crc="9a457779" sha1="69e54ae70940473c21e17da89a0396a03dbbde92" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyuszi5">
+ <description>Nyuszi Olvasni Tanít 5</description>
+ <year>198?</year>
+ <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyuszi5.dsk" size="368640" crc="ccd36745" sha1="a26c9e88d4bb7c2c3c2c412a675f697c040bde03" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="nyuszi6">
+ <description>Nyuszi Olvasni Tanít 6</description>
+ <year>198?</year>
+ <publisher>György Papp - László Ludányi - Mónika Fekete</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="nyuszi6.dsk" size="368640" crc="19349e31" sha1="04edcca5d6c97d3f891e1b69b11bcd8a60798c55" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="olajsejk">
+ <description>Olajsejk</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="olajsejk.dsk" size="368640" crc="86231b86" sha1="423589b8ef7d450f3ddbeeaf3858185e200c4071" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="optika">
+ <description>Optika</description>
+ <year>1987</year>
+ <publisher>Zoltán Rózsavölgyi</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="optika.dsk" size="368640" crc="a2608400" sha1="5ba1778d4284ca9e9332358b8872f651cb6625d1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ordogmot">
+ <description>Ördögmotor</description>
+ <year>1990</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ordogmotor.dsk" size="368640" crc="a8426659" sha1="5c17ec95e1efd8ec0f55fde36e65ad28baa07f07" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="orgona">
+ <description>Orgona</description>
+ <year>1986</year>
+ <publisher>László Bata</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="orgona.dsk" size="368640" crc="abba09a4" sha1="e8cfd69cabd1dc03b9dd6e831999507853e20066" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="orjarat">
+ <description>Őrjárat</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="orjarat.dsk" size="368640" crc="89ad125b" sha1="f39a2bea60da78f01110eb9a81d5b27f4c23970c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ostrom">
+ <description>Ostrom</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ostrom.dsk" size="368640" crc="dffe0366" sha1="e6252ab79eb604b6e03ada5be981dd3d8fd9012e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="oszcilo">
+ <description>Digitális Tároló-Oszciloszkóp</description>
+ <year>1986</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="oszcilo.dsk" size="368640" crc="fb457014" sha1="f1ac94a7e197500f454ce6b09fec9626bfebba70" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="oszkar">
+ <description>Oszkár a Lovag</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="oszkaralovag.dsk" size="368640" crc="669cdacc" sha1="33c154b80b18b3b185302d3fee459e46c3af0c6b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="othello">
+ <description>Othello</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="othelev.dsk" size="368640" crc="923fe4b5" sha1="648b2d341aa49df55ec3f4ba17ec75b8d0a39f0c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="othelloa" cloneof="othello">
+ <description>Othello (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="othello.dsk" size="368640" crc="d9e755c3" sha1="45e15660c0a0d4ca4fbfd6d6abedc728243bb09a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="othel3d">
+ <description>Othello 3D</description>
+ <year>1988</year>
+ <publisher>Ludanyi Laszlo</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="othello3d.dsk" size="368640" crc="1d060dc9" sha1="399c7e501978aa9e80e5eac6a009161185625953" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ottolova">
+ <description>Ottó a Lovag</description>
+ <year>198?</year>
+ <publisher>Laszlo Giricz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ottoalovag.dsk" size="368640" crc="a312fd3c" sha1="5d5b275669732aa505d44c945f14f1308ccff563" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="outhang">
+ <description>Out-Hang</description>
+ <year>198?</year>
+ <publisher>Szabolcs Rota</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="out-hang.dsk" size="368640" crc="1580aa8a" sha1="f6079055006e7e2c7b933fa417b37adf7ca15224" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pacific">
+ <description>Pacific</description>
+ <year>1987</year>
+ <publisher>Zsolt Dobrovics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pacific.dsk" size="368640" crc="39a18ab1" sha1="800638e76f8ba61e8b0e3bc312f20decccb79549" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pacifica" cloneof="pacific">
+ <description>Pacific (Alt)</description>
+ <year>1987</year>
+ <publisher>Zsolt Dobrovics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pacifv2.dsk" size="368640" crc="32f99198" sha1="a2fa40ec8a3cf3cc4860db31bd2e8bc714d8814f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="packman">
+ <description>Pack Man</description>
+ <year>198?</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="packman_v1.dsk" size="368640" crc="04569528" sha1="4f7b2c0b0dcd2113cc51bdbafff0ada27c3368fc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="packmana" cloneof="packman">
+ <description>Pack Man (Alt)</description>
+ <year>198?</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="packman_v2.dsk" size="368640" crc="fb9c61f3" sha1="6c94d3d86b913bec6bc151a540e4d2b68a527609" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="panik">
+ <description>Pánik</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="panik.dsk" size="368640" crc="00688f61" sha1="b405e39afdff1b34fd406f12b806ee53367c7d63" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="panikj" cloneof="panik">
+ <description>Pánik (Joystick)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="panikjoy.dsk" size="368640" crc="4a7b3c81" sha1="0c47899e42e26d7977694fb2528bf920a774f0f0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="panikste">
+ <description>Pánik (Steve Software)</description>
+ <year>1988</year>
+ <publisher>Steve Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="panikste.dsk" size="368640" crc="5a6b58bf" sha1="4ada4fcf2377656130fbc17dc68319050966f1ac" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="para3ter">
+ <description>Parabolikus Háromszög Területe</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="para3ter.dsk" size="368640" crc="a87105a0" sha1="959cbe70b1af67e9a69f9e81e76ed02bfd7321a3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="parbaj">
+ <description>Párbaj</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="parbaj.dsk" size="368640" crc="3476c1b0" sha1="817c337a040b0fdeb6f169a46710adc19590938c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="parbaja" cloneof="parbaj">
+ <description>Párbaj (Alt)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="parbajv2.dsk" size="368640" crc="831ff74b" sha1="0f787f48db2a75a76523308a34320c229c27076a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="parhrezg">
+ <description>Párhuzamos Rezgések</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="parhrezg.dsk" size="368640" crc="ac9fb2e4" sha1="51a6ec634f0411d7daf6804d4c2a4a0018ac945a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="paszians">
+ <description>Pasziánsz</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="paszians.dsk" size="368640" crc="f01cdc8c" sha1="5a1ab056bcfaf4df67c423425210d4cec7ed9702" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="peepshow">
+ <description>Peep Show</description>
+ <year>1984</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pipso.dsk" size="368640" crc="fc4fbc85" sha1="e94511ddffb43afb4600d14aae99897c929aab9f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pemzli">
+ <description>Pemzli</description>
+ <year>198?</year>
+ <publisher>King ec Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pemzli.dsk" size="368640" crc="6dcfc2bd" sha1="e204b6c9b383576f13d66a4b839c631144571803" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pentomin">
+ <description>Pentomino</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pentomino.dsk" size="368640" crc="4f8e0c9b" sha1="ecdd4ca8fb1db857eb89856fc1c63b9e3b5478df" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pentolei">
+ <description>Pentomino Leírás</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pentomino_leiras.dsk" size="368640" crc="12359069" sha1="2da41806123014f194ad475ffe2441f52b3c0b62" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="perifer">
+ <description>Kazetta-Floppy Választó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="perifer.dsk" size="368640" crc="7e818e9f" sha1="c70da41b0de8a57d93cf89a85385665b1cee7c09" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pifubrut">
+ <description>Pifu és Brutusz</description>
+ <year>1988</year>
+ <publisher>SonySoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pifubrut.dsk" size="368640" crc="27a1aede" sha1="8f79b597710f9a407a15d0fab56e3eb7bc8765d2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki01">
+ <description>Piki 01</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 01.dsk" size="737280" crc="e424360a" sha1="96a3f046324d0a8c5ae0a9e95c808cfba3229b5a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki02">
+ <description>Piki 02</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 02.dsk" size="737280" crc="a86fd188" sha1="13e30e03e509e833476143b9320c9be238e5e87a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki03">
+ <description>Piki 03</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 03.dsk" size="737280" crc="0b44e12c" sha1="79a21df49276f2583ec0b85503d0bd5a04ef02f9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki04">
+ <description>Piki 04</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 04.dsk" size="737280" crc="3717f5ff" sha1="c41a5402abd0c5425ea4bf32dc6f27fb73246a9e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki05">
+ <description>Piki 05 (Bad)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 05 [b].dsk" size="737280" crc="e1091b09" sha1="4c8bb8ea249db9d7fc282c2397527896a0668cb0" offset="0" status="baddump" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki06">
+ <description>Piki 06</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 06.dsk" size="737280" crc="abe568b9" sha1="d06bd0ad31e8e1572ec92746389079325050bcbb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki07">
+ <description>Piki 07</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 07.dsk" size="737280" crc="fd726510" sha1="17f236415d3968989acd3a5d5c20ed3f79742af4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki08">
+ <description>Piki 08</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 08.dsk" size="737280" crc="8671e5f4" sha1="9201d9b9a312bd4947dc67061ee18ac77d46565d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki09">
+ <description>Piki 09</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 09.dsk" size="737280" crc="f5795366" sha1="5ec7058fab3813612b21da8eea9cb1ed8b9f1320" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki10">
+ <description>Piki 10</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 10.dsk" size="737280" crc="9f816c34" sha1="a236e3dd17711d0beca5c2db848c6305376eee25" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki11">
+ <description>Piki 11</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 11.dsk" size="737280" crc="f6f68bd9" sha1="2675c0d11f2b79d8844962a20edbeeb2a84c43ef" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki16">
+ <description>Piki 16</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 16.dsk" size="737280" crc="aba7e991" sha1="7fdd7cdbffc408f55caf9e82cec7e43eb92ea229" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki17">
+ <description>Piki 17</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 17.dsk" size="737280" crc="294d01a4" sha1="c6fa71ab0805c1cdcff5834979cbd44c3d4c79a2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piki18">
+ <description>Piki 18</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="piki 18.dsk" size="737280" crc="9d79fcbc" sha1="47e75db427a143f98125632a01a76a4f39192fdd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piktor">
+ <description>Piktor</description>
+ <year>1987</year>
+ <publisher>B.B. Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="piktor.dsk" size="368640" crc="9e9033c4" sha1="3ed30659c36ee3e8a9d10ffbeab45ab80584b4d2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="piktora" cloneof="piktor">
+ <description>Piktor (Alt)</description>
+ <year>1987</year>
+ <publisher>B.B. Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="piktordsk.dsk" size="368640" crc="dfda0223" sha1="d028b94f87e0578f475668cbf192224ea3097c00" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pilota">
+ <description>Pilóta</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pilota.dsk" size="368640" crc="4d6b66a1" sha1="a431cbc3caddf198189bd68f035e455241c6289b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pinkpant">
+ <description>Pink Panther</description>
+ <year>1989</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pink_panther_1.dsk" size="368640" crc="82df597f" sha1="14032799f2eee7d0602f44f3988ecf1266a92138" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pinkpan2">
+ <description>Pink Panther II</description>
+ <year>1989</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pink_panther_2.dsk" size="368640" crc="1dd50c99" sha1="198b2d82e4bc693d2a14440fa2395725329908d1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pipemani">
+ <description>Pipemánia</description>
+ <year>1991</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pipemania.dsk" size="368640" crc="fc2f6e18" sha1="f649bd203ad4875c728e62253e922164fbae96e8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="met_pir">
+ <description>Meteor and Pirate</description>
+ <year>1988</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pirate.dsk" size="368640" crc="1bfcc853" sha1="0c24046a98647df0fcb80b03048cc7b0474eda76" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="planpara">
+ <description>Plánparalell Lemez</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="planpara.dsk" size="368640" crc="b27dc32f" sha1="e34709892325d031f5086e25b7442a4aea21c8d8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pokernyi">
+ <description>Póker (Nyitrai)</description>
+ <year>1986</year>
+ <publisher>Nyitrai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="poker.dsk" size="368640" crc="6e823799" sha1="10e3faea0def4dea594045008a047600e001222d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pokerbar">
+ <description>Póker (Barsony)</description>
+ <year>1988</year>
+ <publisher>Barsony</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="poker2.dsk" size="368640" crc="aa940567" sha1="d86d432d18f03ec9ba05f23b9cfe7f4440c7882a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="poker">
+ <description>Póker</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pokerz.dsk" size="368640" crc="8c032d8a" sha1="b4f68973cc52efded1e99ec54c91e401d49daf56" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="poklakom">
+ <description>Póklakoma</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="poklakoma.dsk" size="368640" crc="51d4f2ae" sha1="3d662c54b2c167be717c2ece1957347fe50eabdb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="poklakoma" cloneof="poklakom">
+ <description>Póklakoma (Alt)</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="poklakomav2.dsk" size="368640" crc="2d447319" sha1="58f941af018d2fd75391bfd66afa9625f569436b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pokok">
+ <description>Pókok - Pókvadászat</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pokok.dsk" size="368640" crc="479182b7" sha1="76d23bfb6bac27965aa98ba1586488610565510d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pokol7">
+ <description>A Pokol 7 Kapuja</description>
+ <year>198?</year>
+ <publisher>Molmix</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pokol7.dsk" size="368640" crc="07692d80" sha1="acb68f82f0ebf156fdc54209348246ff91dc5245" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ponthalm">
+ <description>Ponthalmazok</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ponthalmazok.dsk" size="368640" crc="eb394a2e" sha1="b40d0e2e267afc8d8fff292daffc7402fca323d9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="poseidon">
+ <description>Poseidon Kincse</description>
+ <year>1989</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="poseidon.dsk" size="368640" crc="3f1cb19a" sha1="0de20749cec932b956ac5a6e16e9e09b55b6f409" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="pottompe">
+ <description>Pöttöm Peti</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="pottompeti.dsk" size="368640" crc="d8f6bcba" sha1="c8171a39c67471aa82649ff8e60da33835c4ac4b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="potty">
+ <description>Potty</description>
+ <year>198?</year>
+ <publisher>Nándor Sieben</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="potty.dsk" size="368640" crc="13c048cd" sha1="4cfbd9261628983f9e1c2a36a21230f04bd1bd9e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="prgrend">
+ <description>Program Rendező</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="prgrend.dsk" size="368640" crc="3eaf00a4" sha1="31fdf827381ecfd8bec8298d27ef7c93ba813a02" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="prokat">
+ <description>Program Katalógus</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="prokat.dsk" size="368640" crc="bece438c" sha1="9930e55f90c45d0b79d5e55d218c155662d0493a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="questfor">
+ <description>Quest for Tires</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="questfor.dsk" size="368640" crc="a2d3cba1" sha1="31226fa94d14a5c8e41eb2a995bca8db8a108b0f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="raceace">
+ <description>Race Ace</description>
+ <year>1990</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="raceace.dsk" size="368640" crc="6296ac52" sha1="6db1ed2361cf2ead684656843863b7678076dc0f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="raceacea" cloneof="raceace">
+ <description>Race Ace (Alt)</description>
+ <year>1990</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="raceacev2.dsk" size="368640" crc="6431bbea" sha1="381ffe09368e7d7e0b8d69684e322dcc356c8cb5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="radar">
+ <description>Radar</description>
+ <year>1987</year>
+ <publisher>Flighter Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="radar.dsk" size="368640" crc="d9f4c7a1" sha1="74f59b64f0ff0d4e1779e4efce7bb204010a51ad" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="raiders">
+ <description>Raiders of the Lost Ark</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="raidersofthelostark.dsk" size="368640" crc="e8411835" sha1="5f85c5ee143a97881d0813c8e0daeac3b66229c7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rajz">
+ <description>Rajz</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rajz.dsk" size="368640" crc="65890ad4" sha1="777950a65119dc534bd3c797654aaf57c25926f3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rajzolo">
+ <description>Rajzoló</description>
+ <year>1987</year>
+ <publisher>Atlas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rajzolo.dsk" size="368640" crc="093c296e" sha1="490a9956e9fc8672bdae5b1f98e662b62860a6d2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="raketa">
+ <description>Rakéta</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="raketa.dsk" size="368640" crc="da21a2ee" sha1="7df96f85388be8db1800de9aa3e0edca36796143" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rallye">
+ <description>Rallye</description>
+ <year>1987</year>
+ <publisher>Zsolt Dobrovics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rallye.dsk" size="368640" crc="8d153eb7" sha1="02d65f8088fe6070fb2e65d09bc4380b8fd65644" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ramazuri">
+ <description>Ramazuri</description>
+ <year>1988</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ramazuri.dsk" size="368640" crc="f787b41c" sha1="5ee0dd2428284d51b4ca4d79aec64d68385bd19a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ramleir">
+ <description>RAM Címek Leírása</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ramleir.dsk" size="368640" crc="18137bf2" sha1="4c8f0912907311fad4f2ba4edc9ae17d066b641b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rastan">
+ <description>Rastan the Barbarian Fighter</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rastanthebarbarianfighter.dsk" size="368640" crc="8ea7f1b2" sha1="7969d28c088bec0aa7af38041ead238f74de95e9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="raszter">
+ <description>TVC Raszterdemo</description>
+ <year>198?</year>
+ <publisher>Peter Rakos</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="raszter.dsk" size="368640" crc="59e66454" sha1="1d438f7edfa2a9d43ce893345faeb6e1053704bf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rckor">
+ <description>RC Kör</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rckor.dsk" size="368640" crc="a0efc17c" sha1="54e486a044c69d96c6aff1cb3e607990fbe494ba" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="reaktor">
+ <description>Reaktor</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="reaktor.dsk" size="368640" crc="40716071" sha1="117d042e79d0dcf36175c4f298466afe53d557dd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="reflex">
+ <description>Reflex</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="reflex.dsk" size="368640" crc="49bf026c" sha1="5c4a8912c5db0ffa5cc39ceca043c0f6ee4c4f80" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="relativ">
+ <description>Relatív Koordináta</description>
+ <year>198?</year>
+ <publisher>Laci's Soft Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="relativ.dsk" size="368640" crc="ac911f2c" sha1="bed6b2574a1fe0eb63a193ab459c4175f7848c9d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="repules">
+ <description>Repülés szimulátor BASIC-ül</description>
+ <year>1987</year>
+ <publisher>SPLTD</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="repulesszimulator.dsk" size="368640" crc="ccad68f1" sha1="fd99a84b6f1c94e735b9d5c3a3317cc2ff4556cf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="repulesa" cloneof="repules">
+ <description>Repülés szimulátor BASIC-ül (Alt)</description>
+ <year>1987</year>
+ <publisher>SPLTD</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fsimv2.dsk" size="368640" crc="b3f6161e" sha1="acf5773aeb8380aa1b795f73910193ff9debb205" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="repulesb" cloneof="repules">
+ <description>Repülés szimulátor BASIC-ül (Alt 2)</description>
+ <year>1987</year>
+ <publisher>SPLTD</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fsimv3.dsk" size="368640" crc="61c10240" sha1="e3ae067e4f5bc70d7bc7936800285c7a20d7ede5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="repulesc" cloneof="repules">
+ <description>Repülés szimulátor BASIC-ül (Alt 3)</description>
+ <year>1987</year>
+ <publisher>SPLTD</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="fsimv4.dsk" size="368640" crc="4b09f697" sha1="b7e6950df79bef963b07f4e0af5a9f1851ad2ed6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="reversi">
+ <description>Reversi</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="reversi.dsk" size="368640" crc="499f8a2c" sha1="ec7020f0401dac71b282077d1ed141144dfcc325" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rezgom">
+ <description>Rezgőmozgás</description>
+ <year>1985</year>
+ <publisher>HLV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rezgom.dsk" size="368640" crc="5357c400" sha1="d3f5a4d4fca6ca4891058245a9f6942fbd2f2800" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="riderboy">
+ <description>Riderboy</description>
+ <year>1991</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="riderboy.dsk" size="368640" crc="dc02aef5" sha1="24c00236b495524a0a920f88fee5586d744d7b3f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="robhood">
+ <description>Robin Hood - Íjászverseny</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="robinhood.dsk" size="368640" crc="0948123c" sha1="4929079db39abf88f9eb6edc6d5258adff1315e6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rohamm">
+ <description>Rohamm</description>
+ <year>1989</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rohamm.dsk" size="368640" crc="af03f94b" sha1="549c0bbfefa3f265f336dcdd73cb6878036c0266" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rohammt" cloneof="rohamm">
+ <description>Rohamm (Trainer)</description>
+ <year>1989</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rohammtrainer.dsk" size="368640" crc="64e658f9" sha1="3ef70d0475f0508ab35d12d7238717277f2cfa22" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rokavads">
+ <description>Rókavadász</description>
+ <year>1988</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rokavads.dsk" size="368640" crc="1ee3a6ea" sha1="6ce10360270a210b8858a004750fa2df2fce74bb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rombolo">
+ <description>Romboló</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rombolo.dsk" size="368640" crc="9f91da7d" sha1="9c36f9ad8c4b13d78c10496e5cd2cf2ec7840123" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rombolop">
+ <description>Romboló (Police Sowtver)</description>
+ <year>198?</year>
+ <publisher>Police Sowtver</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rombolo2.dsk" size="368640" crc="db4de3a6" sha1="639ecc9992215bf0a73f72e73a9a65a76628dd06" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rombolov">
+ <description>Romboló (Sandor Vekony)</description>
+ <year>1987</year>
+ <publisher>Sandor Vekony</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rombszur.dsk" size="368640" crc="ee3f3afc" sha1="3ed3a42674f2d546e6e8984f78498819df9cbf81" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rondo">
+ <description>Rondo</description>
+ <year>1988</year>
+ <publisher>Ubisoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rondo.dsk" size="368640" crc="428ef3fe" sha1="c931dbcc7e9032c43d3b29974dcf3428ea25da3d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rondoa" cloneof="rondo">
+ <description>Rondo (Alt)</description>
+ <year>1988</year>
+ <publisher>Ubisoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rondov2.dsk" size="368640" crc="42fd9ea3" sha1="2c0adef53905ba138160de9eafe7f1c8a315c55f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rowar" cloneof="rohamm">
+ <description>RoWar</description>
+ <year>1991</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rowar.dsk" size="368640" crc="a649fbde" sha1="e07238d371110e23122b85a93e210c65e199bd49" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rtadatba">
+ <description>Rádiótechnika Adatbázis</description>
+ <year>198?</year>
+ <publisher>Atlas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rt_adatbazis.dsk" size="368640" crc="f0d4bd79" sha1="20ea229caa06be0e454c09183e2f222f094b1f47" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rubikkoc">
+ <description>Rubik Kocka</description>
+ <year>1988</year>
+ <publisher>Varga Softver</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rubikkocka.dsk" size="368640" crc="5bcbf9ef" sha1="96ea534f9887683cbcf6b7812a6fb16bc480b870" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rulett">
+ <description>Roulette De Luxe</description>
+ <year>1986</year>
+ <publisher>Ferenc Dobai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rulett.dsk" size="368640" crc="8287da91" sha1="2b41f2237e5cca195d6af327728a2ccd2da996b0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sajtvajo">
+ <description>Sajtvájó</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sajtvajo.dsk" size="368640" crc="36e6e679" sha1="a5ac83cb2875cbb2f5c783f93ebfcaf07b328904" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sajtvajoa" cloneof="sajtvajo">
+ <description>Sajtvájó (Alt)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sajtvav2.dsk" size="368640" crc="7d875559" sha1="affa40b13035427b2f8e4703abc99a357806d256" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="samantha">
+ <description>Samantha Fox's Strip</description>
+ <year>1988</year>
+ <publisher>Buddha Softhouse</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="samthafox.dsk" size="368640" crc="21291a1f" sha1="03813eb5b2b2c04bce9b7b2e31b57664d9ff7641" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="samuraj">
+ <description>Samuraj</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="samuraj.dsk" size="368640" crc="52ee419c" sha1="45e9fe530261afdd70e89fb832951cdeb4df558e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="samuraja" cloneof="samuraj">
+ <description>Samuraj (Alt)</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="samurv2.dsk" size="368640" crc="c330d5cc" sha1="75ad2dca2bb04815128560e63c8ef2ebc9f64116" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="samus">
+ <description>Samus' Guest</description>
+ <year>1987</year>
+ <publisher>CSC Software - Skoda Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="samusguest.dsk" size="368640" crc="36102679" sha1="598b8db5f23b7a472f9aee2f240f68b88a3eb34a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sarkany">
+ <description>Sárkánybarlang</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sarkanybarlang.dsk" size="368640" crc="1b0e31fd" sha1="38a3d6873e1fe491eb08d1bceba33d7d815eb978" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="satiroza">
+ <description>Satírozás</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="satirozasv1.dsk" size="368640" crc="6eb8bb21" sha1="66fe63e266a17188e527fce4fc4b6410202db7ad" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="satirozaa" cloneof="satiroza">
+ <description>Satírozás (Alt)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="satirozasv2.dsk" size="368640" crc="d32f81ed" sha1="f83fa73e29472ce1879d35dbc18abd9a1cea54ab" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="scroll">
+ <description>Scroll</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="scroll.dsk" size="368640" crc="43d5a628" sha1="a03b07b6d40903e1da843472c229cd4225d1e0e3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sex">
+ <description>A TVC 1. Szexoktató Programja</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sex.dsk" size="368640" crc="5a48736b" sha1="d0ab3b2449f4652f9436bbf0ce2b12fed892eebb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sexshow">
+ <description>A TVC 2. Szexoktató Programja</description>
+ <year>1988</year>
+ <publisher>Buddha Softhouse</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sexshow.dsk" size="368640" crc="8a376d05" sha1="d44165b97d929e5019541d68223cf17d68237efb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="olympski">
+ <description>Olympic Ski</description>
+ <year>1985</year>
+ <publisher>Béla Szalontai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sielo.dsk" size="368640" crc="4fc38c7e" sha1="3507e5e37edfa5448304bddbe2b524fb4eedacac" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="simul86">
+ <description>Simulator 86 - Flight Simulator</description>
+ <year>1986</year>
+ <publisher>S.P. Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="simul86.dsk" size="368640" crc="50bc9767" sha1="7c8af86372f098617fb1288bcf9a70b5a7d79b0d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sinus">
+ <description>Sinus</description>
+ <year>1985</year>
+ <publisher>HLV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sinus.dsk" size="368640" crc="526ef6be" sha1="560f841d3ae2ba25b8dc7a406dec1242314a3a3d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sirartur">
+ <description>Sir Artur</description>
+ <year>1989</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sirartur.dsk" size="368640" crc="eeba76c7" sha1="b1ade230d146979506dcc578fd9f627f164d397c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="siraso">
+ <description>Sírásó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="siraso.dsk" size="368640" crc="24adb822" sha1="fa82f7fc50ceb0d3b900335dd3f1ff3263dce302" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sokoban">
+ <description>Soko-ban</description>
+ <year>1990</year>
+ <publisher>Ubul</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="soko-ban.dsk" size="368640" crc="07b499a6" sha1="4cafe95ba7f717af3909ee05c457beca61a888c4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sokobang">
+ <description>Soko-Ban Game</description>
+ <year>1989</year>
+ <publisher>Andras Soos</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sokobangame.dsk" size="368640" crc="988dcbb2" sha1="0888da813afc88e5da30419beec1571737d70fb5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="soliter">
+ <description>Soliter</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="soliter(unisoft).dsk" size="368640" crc="f7bcb35c" sha1="8d191533e78f42096cac904c597432342448503b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spacesap">
+ <description>Space Sapper</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spacesapper.dsk" size="368640" crc="df679391" sha1="a9acf7f2ab79fd6124eb17fc31e35e96d28abb1b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spacesapa" cloneof="spacesap">
+ <description>Space Sapper (Alt)</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spacev2.dsk" size="368640" crc="5ed54dbf" sha1="3d73771a57f0d6bb2d638661dd444cf484d41110" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spectrum">
+ <description>Spectrum</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spectrum.dsk" size="368640" crc="c68f00db" sha1="e2bf291ceddc052e4dca4684816e1fc40892ef50" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spherica">
+ <description>Spherical</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spherical.dsk" size="368640" crc="e86db571" sha1="6453d33e336802eabf56766cc9b8880249873427" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spherdem">
+ <description>Spherical Demo</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sphericaldemo.dsk" size="368640" crc="e8ecd920" sha1="e8736b4945c4675e78862b30e58c70b7abd4fab1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sphericaa" cloneof="spherica">
+ <description>Spherical (Alt)</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sphericalv2.dsk" size="368640" crc="2d773fd0" sha1="7ca5c0ba59c5fcab96811137d399a86ddd795d30" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sprinter">
+ <description>Sprinter</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sprinter.dsk" size="368640" crc="e9b40029" sha1="69300a0f60132e34b69a5e72c449d584fb0cdfdc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sprite">
+ <description>Sprite Készítő (Cracked by Csabi)</description>
+ <year>198?</year>
+ <publisher>Attila Canjavec</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sprite.dsk" size="368640" crc="7c869449" sha1="743b16e44cdc54d26cad8514d9544949cfe5e4a0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spritele">
+ <description>Sprite Készítő - Leírás</description>
+ <year>198?</year>
+ <publisher>Attila Canjavec</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spritele.dsk" size="368640" crc="62a82ec8" sha1="66cbf1c2a5f83826f6531ac06070c8666ff03f54" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spritepr">
+ <description>Sprite-Programozó</description>
+ <year>198?</year>
+ <publisher>Mono-Sw</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spritepr.dsk" size="368640" crc="e6dc9b83" sha1="892646bcc53e255bc772ae3c234195048621baea" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spyhunt">
+ <description>Spy Hunter</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spyhunt.dsk" size="368640" crc="318d1c9a" sha1="cb70e56983583cb78c34d8b8c5dac0e9145e319b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starship">
+ <description>Starship</description>
+ <year>1989</year>
+ <publisher>Zoltan Arvai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="starship.dsk" size="368640" crc="d4795666" sha1="33c7366f1dc1c512d8bc21b3a38ab64edfdce246" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="start">
+ <description>Start</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="start.dsk" size="368640" crc="2c971ee0" sha1="dc232eb478d6f83f817be6488aac48cac77abf3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="startrek">
+ <description>Star Trek</description>
+ <year>1987</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="startrek.dsk" size="368640" crc="4aa6bddc" sha1="9e80e1639c8db84c22a5451600ce0291ed1ad206" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="starwars">
+ <description>Star Wars</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="starwars.dsk" size="368640" crc="62e14b10" sha1="3f9c4b1de1ebabeca8edfa40db08f4c8380e24b2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stevens">
+ <description>Steven's Gambling</description>
+ <year>1986</year>
+ <publisher>BirdSoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="stevensgambling.dsk" size="368640" crc="7f4544c5" sha1="83a41218369550adcadf5ce7afa3275e9cfe34fe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stonesca">
+ <description>Stone Scamp</description>
+ <year>1988</year>
+ <publisher>Zsolt Szíjártó</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="stonescamp.dsk" size="368640" crc="7d4e6587" sha1="bb4a2c7c7c367adf68376a5558d31900adb05afb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stonescaa" cloneof="stonesca">
+ <description>Stone Scamp (Örökélet)</description>
+ <year>1988</year>
+ <publisher>Zsolt Szíjártó</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="stonescamp(orokelet).dsk" size="368640" crc="86105435" sha1="38bf50bc87d03a399b07ba182e7a9d66f2bd6e62" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="strategm">
+ <description>Strategem 2/C - Gazdasági Döntésjáték</description>
+ <year>1987</year>
+ <publisher>Bela Kertesz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="strategm.dsk" size="368640" crc="19d9cb2e" sha1="1189b9b08236650bb793492176d9ff4aa4c07f7c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stripfrg">
+ <description>Strip-Forgó (Piros)</description>
+ <year>198?</year>
+ <publisher>Ubisoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="stripforgopiros.dsk" size="368640" crc="29a64669" sha1="5614739fb1f8d972389d29aac10d01ee1ca00984" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="stripfrga" cloneof="stripfrg">
+ <description>Strip-Forgó (Zold)</description>
+ <year>198?</year>
+ <publisher>Ubisoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="stripforgozold.dsk" size="368640" crc="3870a3d0" sha1="988c678ac1fc5578b29c1851816b5fc53bc48124" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="su1">
+ <description>SU 1</description>
+ <year>198?</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="su1.dsk" size="368640" crc="a2f209b0" sha1="a15f289a8e5388593fb7ba419dd762ebe11fa1b5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="su2">
+ <description>SU 2</description>
+ <year>198?</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="su2.dsk" size="368640" crc="7e5c6992" sha1="f3a1fe522786c7f14b4c92bc6045baa37c5e7ebe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="su3">
+ <description>SU 3</description>
+ <year>198?</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="su3.dsk" size="368640" crc="aa806da0" sha1="b9a4a4b61bbf362753a0bd0c081e1f10996dfaf9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="su4">
+ <description>SU 4</description>
+ <year>198?</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="su4.dsk" size="368640" crc="0a1145ad" sha1="3df443eb6db94f0b13f4288ea983509546ad3cf3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="su5">
+ <description>SU 5</description>
+ <year>198?</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="su5.dsk" size="368640" crc="34ae209a" sha1="006f2ff8e872a2c74d27d1449cb85e4bac3cbdd4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="su6">
+ <description>SU 6</description>
+ <year>198?</year>
+ <publisher>Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="su6.dsk" size="368640" crc="60019d45" sha1="c917721e8805a3645cd749190ff5127e6d0c8342" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="submarin">
+ <description>Submarine</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="submarin.dsk" size="368640" crc="03de8c89" sha1="fa85a5bede55351074a2760e49310b8dd351f987" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="submarina" cloneof="submarin">
+ <description>Submarine (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="submv2.dsk" size="368640" crc="cc5b10ee" sha1="753155bfc20bfd60be23696732f81f5b9eea59a6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sulyesz">
+ <description>Süllyesztő</description>
+ <year>1986</year>
+ <publisher>Magyar-Holi Studió</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sulyesz.dsk" size="368640" crc="7d7962e8" sha1="50f781401bd1d8144a015921517966f447638539" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="surito">
+ <description>Sürítő</description>
+ <year>198?</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="surito.dsk" size="368640" crc="c010b573" sha1="ad90d8be67af128cac9d3a957951288bc7704cd8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szakmai">
+ <description>Szakmai számítások</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szakmai.dsk" size="368640" crc="1377c12b" sha1="d0f8d8184fc364531620672c613920ec641ec06a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szamolas">
+ <description>Számolás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szamolas.dsk" size="368640" crc="c499bc3d" sha1="ba44c1d670edea5653e61f18dc83829ff3026176" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szamolog">
+ <description>Számológép</description>
+ <year>1986</year>
+ <publisher>István Rábai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szamologep.dsk" size="368640" crc="d8ee486a" sha1="64c38f9b698ec470f7c6704ec18e2b92f88dac19" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szankove">
+ <description>Szánkóverseny</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szankoev.dsk" size="368640" crc="7bd07585" sha1="18f4ae7d4644c9932184a660ec6e41235d9c564a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szankovea" cloneof="szankove">
+ <description>Szánkóverseny (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szanko.dsk" size="368640" crc="efcafb97" sha1="a4e840b3c995674acfac934a7ac55b500366c5fa" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szellova">
+ <description>Széllovas</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szellovas.dsk" size="368640" crc="c0d345b4" sha1="e7af8a802bde9432e9fb48a18a2ad1a78ab44b5f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szextesz">
+ <description>Szex-Teszt</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szex-teszt.dsk" size="368640" crc="7a254898" sha1="a7e14bf825bed3118bf32e18f8e9e0d5bd4e0b1b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szinbox">
+ <description>Színbox</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szinbox.dsk" size="368640" crc="7b611ba3" sha1="7b023c6664678f89987cda3f1c7cd88ccb168eda" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szingorg">
+ <description>Színgörgetés Keretben</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szingorg.dsk" size="368640" crc="d23731ca" sha1="e139b28e8b32990d46000e2dfa342e9e704f81b1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szinresz">
+ <description>Színre színt</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szinreszint.dsk" size="368640" crc="03446701" sha1="a7e3418d086f0251918785e6a265f225e7995136" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szinsav">
+ <description>Színsávok</description>
+ <year>198?</year>
+ <publisher>István Tóth</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szinsav.dsk" size="368640" crc="fcbcd969" sha1="33e6dddbe5ec3923510c332369204dcac56a62ce" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szinteti">
+ <description>Szintetizátor</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szintetizator.dsk" size="368640" crc="ec7ce730" sha1="f876d72178ba63f040db0f27a44ab82421173fcc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sziv10">
+ <description>Szivárvány 10</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sziv10.dsk" size="368640" crc="81b2c92e" sha1="5d2acb1f92f3e6279e0b47cf180ffa84953c2369" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sziv11">
+ <description>Szivárvány 11</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sziv11.dsk" size="368640" crc="f451520b" sha1="8aa31f97c9efcbb5fa1b9312700cbcf8d25a0a9d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sziv12">
+ <description>Szivárvány 12</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sziv12.dsk" size="368640" crc="8f2d36dd" sha1="3c39123bdefd80c8ac0e366802c1daec65bfc78b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sziv13">
+ <description>Szivárvány 13</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sziv13.dsk" size="368640" crc="12164a68" sha1="1239fb8acc7cd34886364072b2e60c245cf31bb8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sziv14">
+ <description>Szivárvány 14</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sziv14.dsk" size="368640" crc="49606daa" sha1="7f512528d506924f47d1d513b8a9756759f24423" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sziv15">
+ <description>Szivárvány 15</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sziv15.dsk" size="368640" crc="8d33fa85" sha1="5fd6e34a0d3dd84904e9fe261e9b6bd869b841a9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szocske">
+ <description>Szöcske</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szocske.dsk" size="368640" crc="85fe3eb0" sha1="3bbc89efc52f41dc91e8167049cbacf839c3e536" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szoliter">
+ <description>Szoliter (TVCM)</description>
+ <year>1992</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szoliter.dsk" size="368640" crc="d9fdc4ae" sha1="788f92878d29ac33564f370f8b95885f6258e16b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szolitny">
+ <description>Szoliter (Nyitrai)</description>
+ <year>1986</year>
+ <publisher>Nyitrai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szolit86.dsk" size="368640" crc="05e0b07b" sha1="e8d1876c7fa87fcfbfda9003194430d67865694d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szolitny03" cloneof="szolitny">
+ <description>Szoliter (Nyitrai, Newer)</description>
+ <year>2003</year>
+ <publisher>Nyitrai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szolitjg.dsk" size="368640" crc="acbc983e" sha1="1af207963f7d640ea405676e919884bf6ca7cef4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szonda">
+ <description>Szonda</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szonda.dsk" size="368640" crc="9138e191" sha1="d4f5714aa0528b49bf826bcef3d209ce3467dc97" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szopoker">
+ <description>Szó-Póker</description>
+ <year>198?</year>
+ <publisher>Jozsef Szoldatics - Jozsefne Szoldatics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szopoker.dsk" size="368640" crc="2a82c981" sha1="0f5d4c6601116be7d08e496dc4990240aeeef732" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szorny">
+ <description>Szörny</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szorny.dsk" size="368640" crc="f6231c02" sha1="ab85714c18d9da9b4b2513c38987e474df483fdd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szornyek">
+ <description>Szörnyek az útvesztőben</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szornyekazutvesztoben.dsk" size="368640" crc="74b3315e" sha1="56f8bf0145c75a980607dda5877fbedfedbb4142" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szorzas">
+ <description>Szorzás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szorzas.dsk" size="368640" crc="02e3ec25" sha1="afc913842019eefa162637487f4650f8e1aa4fc6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szorzasa" cloneof="szorzas">
+ <description>Szorzás (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szorzav2.dsk" size="368640" crc="1f46fda6" sha1="7fe95a085903401a2ce917196d72b315e082b55b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szoved">
+ <description>Kazettás Szövegszerkesztő TV-Computerre</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szoved.dsk" size="368640" crc="0ccfa08f" sha1="8610cddac1e4f9ccf04fcc0914d925ae80021e87" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="szurosz">
+ <description>Szűrő Számítás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="szurosz.dsk" size="368640" crc="0844fa9f" sha1="5f38465d6ece0696b604011d168f7ccca141206d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tabla">
+ <description>Bűvös Tábla</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tabla.dsk" size="368640" crc="5430933e" sha1="ef6484b3f25a0e3635ef606f5d8f1161a9204ce4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="talalkoz">
+ <description>Találkozók</description>
+ <year>198?</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="talalkozok.dsk" size="368640" crc="10a6c559" sha1="dd227266f66a6b70eec966731928321ccdf13735" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tamadas">
+ <description>Támadás</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tamadas.dsk" size="368640" crc="a9219002" sha1="3f491cbf0c8351aef5c9496181b4f235c5d93599" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tankcsat">
+ <description>Tankcsata</description>
+ <year>1988</year>
+ <publisher>László Nagy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tankcsata.dsk" size="368640" crc="578c039c" sha1="bc82079b9c6056ec1acde052658be833d03d84b0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tapsi">
+ <description>Tapsi és a Nagy Vadász</description>
+ <year>1988</year>
+ <publisher>L&amp;M Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tapsiesanagyvadasz.dsk" size="368640" crc="c5f0569c" sha1="e313fce9da29899044f7a37fd1cc2f23409e64b8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tartalom">
+ <description>Tartalom</description>
+ <year>1992</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tartalom.dsk" size="368640" crc="29ac99f4" sha1="073864b9f4a78fa7d79db1fbff8968a133dddfa8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="teke">
+ <description>Teke</description>
+ <year>198?</year>
+ <publisher>L&amp;M Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="teke.dsk" size="368640" crc="94353cf8" sha1="07447a05b5ce6f8f971f0520f3db74684b4645c1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="telex1">
+ <description>Telex - 1500 szó magyarul 1</description>
+ <year>1988</year>
+ <publisher>Novotrade - Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="telex1.dsk" size="368640" crc="78562d4c" sha1="8d15a9a0efd0c14cb98f44383b8becc104eb99b1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="telex1a" cloneof="telex1">
+ <description>Telex - 1500 szó magyarul 1 (Alt)</description>
+ <year>1988</year>
+ <publisher>Novotrade - Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="telex1 [a].dsk" size="368640" crc="08bada71" sha1="c97b5b66dccb439505164201a76fba0d1be0b8af" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="telex2">
+ <description>Telex - 1500 szó magyarul 2</description>
+ <year>1988</year>
+ <publisher>Novotrade - Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="telex2.dsk" size="368640" crc="c16a70a2" sha1="cfb8ea7460d68a636c713cbcde0c0ad07d9c0da9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="telex2a" cloneof="telex2">
+ <description>Telex - 1500 szó magyarul 2 (Alt)</description>
+ <year>1988</year>
+ <publisher>Novotrade - Octasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="telex2 [a].dsk" size="368640" crc="6e4d0a6f" sha1="e8841bb40773bbe0ef6cae4b62c6be33dfcbbc5b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tenbrick">
+ <description>Ten Brick</description>
+ <year>198?</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tenbrick.dsk" size="368640" crc="559c7067" sha1="5df09df2304a6a4993a531525416201113e9c2d6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tenbricka" cloneof="tenbrick">
+ <description>Ten Brick (Alt)</description>
+ <year>198?</year>
+ <publisher>Cápasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tenbriv2.dsk" size="368640" crc="818c16cd" sha1="eee11e5551232cd09f638047f82a47bf3c671bd9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tetris">
+ <description>Tetris</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tetris.dsk" size="368640" crc="a4cf58fc" sha1="14a853c6aa8601d3088432a695ccd846c5ff6d3d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tievadas">
+ <description>TIE Vadász</description>
+ <year>1988</year>
+ <publisher>László Nagy</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tievad.dsk" size="368640" crc="b1695e54" sha1="84b30e32ee529a6dfcdca7a3e3ed55d02abeeec6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tiktakto">
+ <description>Tik-Tak-To</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tiktakto.dsk" size="368640" crc="e6f8ff24" sha1="134e2856a18b401460ca1648fc2efa21df9d157c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tisztala">
+ <description>Tiszta Lappal</description>
+ <year>1987</year>
+ <publisher>King ec Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tisztalappal.dsk" size="368640" crc="d324e290" sha1="2fd8d2407704f19f26eb0a275605b33c60cec708" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="toccs">
+ <description>Toccsanó Játék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="toccs.dsk" size="368640" crc="d27f3a97" sha1="0dcf961bc6b94183c5b9090f01b0f305de2859bf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="toli">
+ <description>Toli v1.0</description>
+ <year>1993</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="toli.dsk" size="368640" crc="bdd54b1d" sha1="21f2e91e0e8a648885b17cc16fc2a2d6a620f306" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tomjerry">
+ <description>Tom és Jerry</description>
+ <year>198?</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tomesjerry.dsk" size="368640" crc="71578fb0" sha1="547087457c116c8e292b04c2534f6da660b868d9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tomjerrya" cloneof="tomjerry">
+ <description>Tom és Jerry (Alt)</description>
+ <year>198?</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tomjv2.dsk" size="368640" crc="6420b05a" sha1="1aaa6fc267ae17ec908740e62a9cd35fb62a63ce" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tomjerryb" cloneof="tomjerry">
+ <description>Tom és Jerry (Alt 2)</description>
+ <year>198?</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tomjv3.dsk" size="368640" crc="f6a22e74" sha1="6031f0e01e0519ea418f8d04f87cc94c40895088" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tomjerrycr" cloneof="tomjerry">
+ <description>Tom és Jerry (Cracked)</description>
+ <year>198?</year>
+ <publisher>Gigasoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tomesjerrykirako.dsk" size="368640" crc="55cda685" sha1="749fb902fd1db24781e416825916e98037f567b3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="asmtop">
+ <description>Mnemonic IV Assembler-Monitor - Top</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="top.dsk" size="368640" crc="8c5457fe" sha1="376f2b18dfd8feaa8b6787beada9e042ff563f8c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torokind">
+ <description>Török Induló</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="torokindulo.dsk" size="368640" crc="dd6552ee" sha1="cb610113cdbc3ed21a8a3356beccc4e6b41aa7ea" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torokinda" cloneof="torokind">
+ <description>Török Induló (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="indulo.dsk" size="368640" crc="fd585fe8" sha1="ff22b93830ee127e5e0f26a86a9857a6c7c7681c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torpe">
+ <description>Törpe</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="torpe.dsk" size="368640" crc="4b6f7947" sha1="cec7b174b6f02e068617698c05412efce6b5a120" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torpedca">
+ <description>Torpedó (Attila Canjavec)</description>
+ <year>1988</year>
+ <publisher>Attila Canjavec</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="torpedca.dsk" size="368640" crc="5c7281c0" sha1="5522a450f659dc5ededeef4fce5f065ffb7a2a3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torpedo">
+ <description>Torpedó</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="torpedo.dsk" size="368640" crc="8937fb4e" sha1="95ba7f26ad8bf826fa85b30558eaddbf6307a10c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torpedou">
+ <description>Torpedó (Unisoft)</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="torpedounisoft.dsk" size="368640" crc="08fda78b" sha1="a7c3fda5feebc137318762d68182c90c6358c783" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torpedoua" cloneof="torpedou">
+ <description>Torpedó (Unisoft, Alt)</description>
+ <year>1986</year>
+ <publisher>Unisoft GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="torpedov2-unisoft.dsk" size="368640" crc="1bf5b8c9" sha1="4f134bd9f6dbecb1585b9dddf272d46d3f8c956a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="torpeism">
+ <description>Törpe Ismertető</description>
+ <year>198?</year>
+ <publisher>Béla Takács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="torpeism.dsk" size="368640" crc="98cb819d" sha1="cbab778a7153e6c861a0e8f7419f69c8ff87f6b1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="toto">
+ <description>Toto - Jatekot Segito Program</description>
+ <year>1986</year>
+ <publisher>Centrumdata VGMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="toto.dsk" size="368640" crc="0ad06fe1" sha1="0cedfc3267b8f925de4e9768788c3d0115c0a928" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tower">
+ <description>Tower</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tower.dsk" size="368640" crc="f2149783" sha1="a2202d2606632d690799d1f6a97e47342a26c455" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="towera" cloneof="tower">
+ <description>Tower (Alt)</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="towerv2.dsk" size="368640" crc="18359cd6" sha1="ed72607b17c01b3f594d0362b1ef1e3b8f5483e7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="trafosz">
+ <description>Transzformátor Méretezés</description>
+ <year>198?</year>
+ <publisher>H&amp;M</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="trafosz.dsk" size="368640" crc="e191be73" sha1="1d93e8ec9a2260ed4afb82871aa48b0e561dd6e1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="trailer">
+ <description>Trailer</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="trailer.dsk" size="368640" crc="a234a673" sha1="b7237199286056feb1e4b14441662841714eea18" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="transver">
+ <description>Transversion</description>
+ <year>198?</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="transversion.dsk" size="368640" crc="a3ebbb91" sha1="b08b53664a4510cd5967cef25ae0275a29c3f31e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="transvert" cloneof="transver">
+ <description>Transversion (Trainer)</description>
+ <year>198?</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="transvt.dsk" size="368640" crc="f0b46063" sha1="3300d9cb3f2526a3e8c3967774a0fe0da679f322" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="treasure">
+ <description>Treasure-Hunting</description>
+ <year>1988</year>
+ <publisher>Béla Szalontai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="treasurehunting.dsk" size="368640" crc="448cc296" sha1="5015c880b0de0c6782f8e83ef91aca746a553ed2" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="startreka" cloneof="startrek">
+ <description>Star Trek (Alt, Newer?)</description>
+ <year>1987</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="trekk.dsk" size="368640" crc="5cd60714" sha1="6ecf5852ae3994ce07243bdb08dd932421d5d569" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tunnel">
+ <description>Tunnel</description>
+ <year>198?</year>
+ <publisher>Ubisoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tunnel.dsk" size="368640" crc="f28f9a67" sha1="d715d799f159e910930ac6af007d77048bb5c72a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turboesp">
+ <description>Turbo Esprit</description>
+ <year>198?</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="turboespirit.dsk" size="368640" crc="91f91928" sha1="9770435e56dd6e3f27ac65d7e8b35c90eeea7077" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turbojac">
+ <description>Turbo Jack</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="turbojack.dsk" size="368640" crc="09233b23" sha1="72229e0c9a68a323344f7f1be495836f3501ee65" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turborud">
+ <description>Turbó Rudi</description>
+ <year>1987</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="turborudi.dsk" size="368640" crc="9f82bd37" sha1="794ec13d8e1d932c349a8f7bd4e4e39806ef90b9" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turboruda" cloneof="turborud">
+ <description>Turbó Rudi (Alt)</description>
+ <year>1987</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="turborudiv2.dsk" size="368640" crc="cab7764e" sha1="b6b95d69cec766dcc06b50d4ed660b425d7f0f1d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvball">
+ <description>TV Ball</description>
+ <year>1988</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvball.dsk" size="368640" crc="001ec8ed" sha1="e980c49a36a6a7a0b595089f2f2de3746389ab93" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvballa" cloneof="tvball">
+ <description>TV Ball (Alt)</description>
+ <year>1988</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvballv2.dsk" size="368640" crc="5e7ee724" sha1="2287090afc93699392d8c6806027a7504e62cd01" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvc-ass">
+ <description>TVC-Assembler v1.0</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvc-ass.dsk" size="368640" crc="3b1df259" sha1="901fe8a140182f293c31a70aec0658fb1a6fd14c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvclist2">
+ <description>TVC Program Lista 2</description>
+ <year>198?</year>
+ <publisher>Molmix</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvc-list.dsk" size="368640" crc="bab36ccb" sha1="be1c7bcc813afd88e75d448716dfdb30ab1dd729" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvc123">
+ <description>TVC123 - Táblázatkezelő</description>
+ <year>1989</year>
+ <publisher>Sandor Vekony</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvc123.dsk" size="368640" crc="1fefacde" sha1="f80aac12c4186be76727e1c66207f5c9deba7610" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvcass14a" cloneof="tvcass14">
+ <description>TVC-Assembler v1.4 (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvca14v2.dsk" size="368640" crc="9a1b3c97" sha1="4d311460cf834a997cd847f3fc9d5f5eb3216066" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvcass11">
+ <description>TVC-Assembler v1.1</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvcass11.dsk" size="368640" crc="a8a180e0" sha1="1b355bae76d12ad03514ec2ed6f3a8c88deb7016" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvcass14">
+ <description>TVC-Assembler v1.4</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvcass14.dsk" size="368640" crc="37a1935c" sha1="9056bdc5cb604b8c84466472191673fe2f96326f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvccopy">
+ <description>TV-Computer Copy</description>
+ <year>1986</year>
+ <publisher>Géza Garai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvccopy.dsk" size="368640" crc="67cdd689" sha1="3dd2f80aeeefcf15aac338504b09d5044dff6864" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvcedi">
+ <description>TVC-EDI</description>
+ <year>1987</year>
+ <publisher>IHS GMK</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvcedi.dsk" size="368640" crc="e4a8f717" sha1="c0501c8a9170451cf29270045cca4cb9151ab369" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvceprom">
+ <description>TVC-EPROM Programming System</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvceprom.dsk" size="368640" crc="017ceadc" sha1="aac34f47612eb61cf572bdbaad63a2417d9cdec6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvclista">
+ <description>TVC Programlista</description>
+ <year>198?</year>
+ <publisher>Erno Kiraly</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvclista.dsk" size="368640" crc="e588904b" sha1="3dc67f6e192360520deb75d080b65853872e8818" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvpoker">
+ <description>TV-Póker (Blacksoft)</description>
+ <year>1987</year>
+ <publisher>Blacksoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvpoker.dsk" size="368640" crc="4de78e7d" sha1="55aa5fb7294908049cfda3659a52364239001c8b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvpokern">
+ <description>TV-Póker (Novotrade)</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvpokern.dsk" size="368640" crc="3b8700ae" sha1="7e2538d345febda9e42346453d8c55e76976a8f8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvpokerna" cloneof="tvpokern">
+ <description>TV-Póker (Novotrade, Alt)</description>
+ <year>198?</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvpokernv2.dsk" size="368640" crc="6cfc9463" sha1="bca56290ab4b6e5a5687355646dcacee31440072" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvstack">
+ <description>TV Stack (Cracked by Nameless)</description>
+ <year>1987</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvstack.dsk" size="368640" crc="d2006117" sha1="82494a6b19a72910c84375e644d3823a59cce461" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="tvtenisz">
+ <description>TV-Tenisz</description>
+ <year>1987</year>
+ <publisher>Zsolt Dobrovics</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="tvtenisz.dsk" size="368640" crc="7dad8871" sha1="cd119a8a42c6540f25e09c3edf8908e7317c5497" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ubulball">
+ <description>Ubul's Ball</description>
+ <year>1988</year>
+ <publisher>Ubisoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ubulball.dsk" size="368640" crc="7e623a14" sha1="d126268421de09d732c46465e3ac5e4a94e5d255" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ubulesap">
+ <description>Ubul és a Pince</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ubulesapince.dsk" size="368640" crc="2c6e0f33" sha1="b8af10b369afb3945ba74c995124afbef27bd3e4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ufo">
+ <description>UFO</description>
+ <year>1985</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ufo.dsk" size="368640" crc="ca12d576" sha1="ae395bd32727b4365e7a19b4f48d08f334c2fbd7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ufoka">
+ <description>Ufóka</description>
+ <year>198?</year>
+ <publisher>József Kovács</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ufoka.dsk" size="368640" crc="b55da4dc" sha1="0b333771e1c91ccbadd7720c0320b46a796b9b9f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ujawari">
+ <description>Új Awari</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ujawari.dsk" size="368640" crc="7bb7d686" sha1="b5785a4e153c4207392211d33c924ffe40bfbcfd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="unicopy">
+ <description>UniCopy</description>
+ <year>1987</year>
+ <publisher>Zsolt Szigyártó</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="unicopy.dsk" size="368640" crc="54dade63" sha1="e331f2309fe74c9b36b599d50c8c5af602d8c723" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="unicum">
+ <description>Unicum</description>
+ <year>1988</year>
+ <publisher>Red-Green-Blue Software - Compi System</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="unicum.dsk" size="368640" crc="64f23f36" sha1="3f844b6bc710559faed0fa2c0256c316d6b92927" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="unicuma" cloneof="unicum">
+ <description>Unicum (Alt)</description>
+ <year>1988</year>
+ <publisher>Red-Green-Blue Software - Compi System</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="unicumv2.dsk" size="368640" crc="cca3fa09" sha1="e14c1591709f21929d676c74aaa42cfa4da0c24d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="unicumb" cloneof="unicum">
+ <description>Unicum (Alt 2)</description>
+ <year>1988</year>
+ <publisher>Red-Green-Blue Software - Compi System</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="unicumv3.dsk" size="368640" crc="c9e7495f" sha1="5db1719c51a1b6fa4f9284b85d89ed20d211d5a5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="unifel">
+ <description>Univerzális Feleltető Program</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="unifel.dsk" size="368640" crc="f8044dff" sha1="d4afb644e5201377a720438b7e0257b25bc73ef5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="unigraph">
+ <description>Unigraph v1.0</description>
+ <year>198?</year>
+ <publisher>Béla Csatlós</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="unigraph10.dsk" size="368640" crc="58e37171" sha1="76d87bdce94e546d9cd9a23aaa4016a58b212f9f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="urhaszim">
+ <description>Űrhajó Szimulátor</description>
+ <year>198?</year>
+ <publisher>Vincze Szoftver</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="urhaszim.dsk" size="368640" crc="4add71d9" sha1="c62962afde4015b640cacd99a26f115561072f6b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="urjatek">
+ <description>Űrjáték</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="urjatek.dsk" size="368640" crc="985ab1e4" sha1="d0370572c78a15bb895d5e7ecb9fcd33b89b9808" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ursiklo">
+ <description>Űrsikló</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="ursiklo.dsk" size="368640" crc="69addc69" sha1="0f926f9e8bfb0be83857880d1eda44bf35ea0d05" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="utsebido">
+ <description>Út-sebesség-idő Grafikon</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="utsebido.dsk" size="368640" crc="1070ac1b" sha1="cb848a1f90fa3c738aae8c24588871ad1d9e4253" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vadasz">
+ <description>Vadász</description>
+ <year>1987</year>
+ <publisher>Csaba Kiss</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vadasz.dsk" size="368640" crc="321ce23f" sha1="a21122aac402f82aaa757aa6493124f7712ba337" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vadnyuga">
+ <description>Vadnyugat</description>
+ <year>1987</year>
+ <publisher>Szabolcs Pőcze</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vadnyugat.dsk" size="368640" crc="e9297c4c" sha1="4243e0210df7361c72abf61fd6ca11b1d6ff0125" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="varak">
+ <description>Várak</description>
+ <year>198?</year>
+ <publisher>Zoltan Halasz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="varakv1.dsk" size="368640" crc="f0923f84" sha1="e81a3cfb0737a34c7b8519280ac2717dfc3f1121" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="varaka" cloneof="varak">
+ <description>Várak (Alt)</description>
+ <year>198?</year>
+ <publisher>Zoltan Halasz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="varakv2.dsk" size="368640" crc="10b3ad2c" sha1="ac0832ccc85d7f62bc771736cb60145a47ddc368" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="varazsec">
+ <description>Varázsecset</description>
+ <year>1988</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="varazsecset.dsk" size="368640" crc="2deb2a16" sha1="64df2ad5180f4339d63eee2c3f40e653152ef491" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="varazseca" cloneof="varazsec">
+ <description>Varázsecset (Alt)</description>
+ <year>1988</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="varazsecsetv2.dsk" size="368640" crc="544bf2a5" sha1="44735a8b4c8b02a0abfdb2349e73911c20c24c9f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="varazsecb" cloneof="varazsec">
+ <description>Varázsecset (Alt 2)</description>
+ <year>1988</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="varazsecsetv3.dsk" size="368640" crc="fe102ffb" sha1="41e48300c43dbdd2eff90daa0cf9acc0ff77fec4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="varazsgo">
+ <description>Varázsgömb</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="varazsgomb.dsk" size="368640" crc="2c2259c5" sha1="e932ccfa7cca80dd7b37601b42f0207457017684" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="varos">
+ <description>Város</description>
+ <year>1986</year>
+ <publisher>Ferenc Dobai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="varos.dsk" size="368640" crc="a96bb898" sha1="ec7786e36e4db9d235c109fa3e7912884ac36654" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vasarely">
+ <description>Vasarely</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vasarely.dsk" size="368640" crc="4634111d" sha1="011be5aa91f03629e8dfac12bdf48e21f4ee320c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vaterlo">
+ <description>Vaterlo</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vaterlo.dsk" size="368640" crc="5d5b8f09" sha1="ff75a501e65ac6b22eeec9467a387e32fdd04296" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vektorgf">
+ <description>Perspektívikus Real-Time Vektor</description>
+ <year>198?</year>
+ <publisher>Peter Rakos</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vektorgf.dsk" size="368640" crc="39ca7a01" sha1="fea8951fd29e9999d8c9889d9f0abe72975cb6f0" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vezetes">
+ <description>Vezetés</description>
+ <year>1987</year>
+ <publisher>King ec Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vezetes.dsk" size="368640" crc="331fda0a" sha1="607aabb21294b081c896fcc04d40ffedd5029993" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vidas64">
+ <description>VIDAS - TVC Assembler</description>
+ <year>1986</year>
+ <publisher>Tamas Bakos - Tibor Bereznai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vidas64.dsk" size="368640" crc="6ade85c1" sha1="848e4f0b5ccd8a7636cc0ead085a95c83faf2699" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="videoton">
+ <description>Videoton</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="videoton.dsk" size="368640" crc="ecc4f646" sha1="3c9f11eda5e86b83b9ac74e6406b980620512fbe" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viditype">
+ <description>VidiType</description>
+ <year>1986</year>
+ <publisher>Géza Garai</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="viditype.dsk" size="368640" crc="584883d8" sha1="12f3113cd87a6d441bac10b6372b7222fc42a5b4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vidzene">
+ <description>Videoton Zene</description>
+ <year>198?</year>
+ <publisher>JozsiSoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vidizene.dsk" size="368640" crc="30d8797b" sha1="9cfc8639f723b0800e31994dd0d9915a22d9faaa" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vigyori">
+ <description>Vigyori</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vigyori.dsk" size="368640" crc="c0b7de42" sha1="627a229443ff2d4d16bf419a7d2768b8e4400189" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viliaban">
+ <description>Vili a Bányász</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="viliabanyasz.dsk" size="368640" crc="8aa88b24" sha1="94330623455f48430f4aedfff7a0f95e097b645e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viliabanj" cloneof="viliaban">
+ <description>Vili A Banyasz (Joystick)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="viliabanyaszjoy.dsk" size="368640" crc="06a7ca1a" sha1="0534488b9264cf46ef24edec9d03945ebe0bc4b8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vipera">
+ <description>Vipera</description>
+ <year>1987</year>
+ <publisher>Atlas</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vipera.dsk" size="368640" crc="9b410dd2" sha1="2109a2f84d239f092099a2aa620a04d3d250480a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viszhang">
+ <description>Visszhang</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="viszhang.dsk" size="368640" crc="c72758a3" sha1="f27312dd23fba5ba4abf99276927e9b15911c74d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="volleyba">
+ <description>Volleyball</description>
+ <year>1990</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="volleyball_v1.dsk" size="368640" crc="02f2a992" sha1="a79d869c8381e998f7b178b2118d662d6938c025" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="volleybaa" cloneof="volleyba">
+ <description>Volleyball (Alt)</description>
+ <year>1990</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="volleyball_v2.dsk" size="368640" crc="9c2ff2a5" sha1="b32e4a85931b46dc8610cf7601d6e31bb844741c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vtbridzs">
+ <description>VT Bridzs</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vtbridzsv1.dsk" size="368640" crc="0a234ab2" sha1="2c0e075098098418a14ac1d686692b3e2e389828" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vtbridzsa" cloneof="vtbridzs">
+ <description>VT Bridzs (Alt)</description>
+ <year>198?</year>
+ <publisher>Videoton</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vtbridzsv2.dsk" size="368640" crc="2fe325c5" sha1="458441b9d46193fce6f546423630cafb23cd80b6" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vtbridzsb" cloneof="vtbridzs">
+ <description>VT Bridzs (Alt 2)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vtbridv3.dsk" size="368640" crc="09bd925c" sha1="e043c76ec82209aac5a9ba0feb46ac5b04d917bd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="walltris">
+ <description>Walltris</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="walltris.dsk" size="368640" crc="76ce49dc" sha1="52b8a7028e21fdde51cf28c87ad180047a58ea42" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="war2200d">
+ <description>War in 2200 Demo</description>
+ <year>198?</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="war2200demo.dsk" size="368640" crc="0eb7ede9" sha1="7b2a0e013c7fd7adf62814816385c765f54515bf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="war2100">
+ <description>War in 2100</description>
+ <year>198?</year>
+ <publisher>TVCM</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="warin2100.dsk" size="368640" crc="ef086158" sha1="cc55ef0ddb4a663903afaaae24a63ac04315894f" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wimbledo">
+ <description>Wimbledon</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <info name="usage" value="Load file wimbledo.cas"/>
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="wimbledon.dsk" size="368640" crc="d1311da4" sha1="a3c681bd8a871c1d2127c2397628951aca7d6671" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wimbledoa" cloneof="wimbledo">
+ <description>Wimbledon (Alt)</description>
+ <year>198?</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="wimblev2.dsk" size="368640" crc="5ef42a61" sha1="21c753ba0de135caf9b7854ee7c2235d27fd017d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="wst">
+ <description>World Soccer Trainer</description>
+ <year>1994</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="wst.dsk" size="368640" crc="6bb8a4f3" sha1="4c2cfb572206573758fa158c98883a330d81c610" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="xeno">
+ <description>Xeno</description>
+ <year>1986</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="xeno.dsk" size="368640" crc="5b7bcd6e" sha1="aee4eb09790ddfb36ea2ed5e670e3ef019e88c42" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="xstore">
+ <description>Hexadecimális töltőprogram</description>
+ <year>1987</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="xstore.dsk" size="368640" crc="676e5961" sha1="64b26b0f2c75172a931f3d67daf64f0eb9ebecbb" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="yogi">
+ <description>Yogi</description>
+ <year>198?</year>
+ <publisher>Agilar</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="yogi.dsk" size="368640" crc="4656e157" sha1="6db97baf0e9c820deb6b7192db1db62d9eec2a9b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zenebona">
+ <description>Zenebona</description>
+ <year>1986</year>
+ <publisher>'a' Studio</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zenebona.dsk" size="368640" crc="a3a0ebe3" sha1="beba8fdb597c00cfced2a8071ceedbb9ec60a370" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zenezenea" cloneof="zenezene">
+ <description>Zene-Zene-Zene (Alt Colors)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zeneev.dsk" size="368640" crc="d64c7183" sha1="1e45852513a672336eaf07dceb91140026efee32" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zenegyar">
+ <description>Zenegyár v1.3</description>
+ <year>1989</year>
+ <publisher>Software in LUX</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zenegyar.dsk" size="368640" crc="3b3279bf" sha1="43ca1c4c0f3dbee80d5369238a8a2dd06d76ceda" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zenezene">
+ <description>Zene-Zene-Zene</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zenek.dsk" size="368640" crc="ed5161c2" sha1="5c33ac0a675567f890ea8424051a018d8e27029c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zenek">
+ <description>Zenék</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zenekz.dsk" size="368640" crc="7375518c" sha1="7e3c1df2645e90877655601e2b9296a52e90c8c4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zeneszer">
+ <description>Zeneszerző</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zeneszer.dsk" size="368640" crc="8b0c48ab" sha1="f87fe786e1a177222fdc28f659f459711991446d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zsidu3">
+ <description>Zsid U3</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zsidu3.dsk" size="368640" crc="f3beacc0" sha1="b61f92722ddf7039a26561db3572daf3dbf75f3e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="zsir">
+ <description>Zsír</description>
+ <year>198?</year>
+ <publisher>Berysoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="zsir.dsk" size="368640" crc="5c587e01" sha1="f07b150651981efce447d0a5aeb4a2d32edec208" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+
+
+<!--
+ <software name="blankdsk">
+ <description>Blank Disk (TV-DOS v1.2)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="realtiv.dsk" size="368640" crc="ef5198e5" sha1="63c25cbee70f667c0403ba85829391c07c201a2c" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+
+ <software name="astrobla" cloneof="astrobl">
+ <description>Astro Blaster (Alt)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="astro.dsk" size="737280" crc="9b43b63d" sha1="ce632f216055d8ecffd99e23f4c91481c5e0bd12" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bobb" cloneof="bob">
+ <description>Bob (Alt 2)</description>
+ <year>198?</year>
+ <publisher>Mamut Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bobv1.dsk" size="368640" crc="a3eb8cd9" sha1="640cfe393b40f88c44ab781c91f87b725b50f5a7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bobc" cloneof="bob">
+ <description>Bob (Alt 3)</description>
+ <year>198?</year>
+ <publisher>Mamut Soft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="bobv2_.dsk" size="368640" crc="cadf10cd" sha1="32f6215e9ab16a6f272820311f88ac7cbdcae052" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="bombazoa" cloneof="bombazo">
+ <description>Az Utolso Bombazo (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="bombazo.dsk" size="737280" crc="297f8e3a" sha1="16ea50b5e7fb1f68d0c6b1c910ad08b7cf894023" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="break">
+ <description>Break</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="break.dsk" size="368640" crc="ec0765bc" sha1="4cd47552c883751528a8b0674ee23c56c07a2f05" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="centipeda" cloneof="centiped">
+ <description>Centipede (Alt)</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="cent.dsk" size="737280" crc="1dd2c577" sha1="06595792be54bbbad9b220134ddf10435bac8f2a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="crackeda" cloneof="cracked">
+ <description>Crack Ed (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="crak.dsk" size="368640" crc="eb6a363f" sha1="743b726d8430b1c55f2003f5ad24133377eff9ec" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cyrus2a" cloneof="cyrus2">
+ <description>Cyrus 2 (Alt)</description>
+ <year>1985</year>
+ <publisher>Intelligent Chess Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="cyrus2 [a].dsk" size="737280" crc="5f1de574" sha1="069641cdd004acfe0071ffe43f7679b63e50ccec" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dobgepa" cloneof="dobgep">
+ <description>Dobgép (Alt)</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="dob.dsk" size="737280" crc="5b5d0bc5" sha1="2c9d3d349ef97c21c64c3a5fbe7e99f29e8035f1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="hamburg">
+ <description>Hamburger</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="hamburger.dsk" size="368640" crc="fe540e2c" sha1="4520e085c21e0b4c3dfe6aa92b269b4b9e73c982" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="invazioa" cloneof="invazio">
+ <description>Invázió (Alt)</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="inv.dsk" size="737280" crc="16169e62" sha1="9ee2c1890ac273ee49da023c41cd1d8ff7a8608d" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="iq">
+ <description>Hasznalati Utasitas</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="iq.dsk" size="737280" crc="46ce5ec6" sha1="887d95912347a39052a3ac98f5f5e655732b7ccd" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="jancsia" cloneof="jancsi">
+ <description>Jancsi a Várban (Alt)</description>
+ <year>1986</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="jancs.dsk" size="737280" crc="fd406d9b" sha1="4136b8925bfb87485f4a882eb50744f0b10f9d70" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kardhalaa" cloneof="kardhala">
+ <description>Kardhalak és Kincsek (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="kardhal.dsk" size="737280" crc="31743be0" sha1="f44e32caf176055e254b9540591eda496c4ff0d1" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="katalogu">
+ <description>Katalogus Program</description>
+ <year>1986</year>
+ <publisher>Kronosz</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="katalogus.dsk" size="368640" crc="a3d08af1" sha1="68336f5e904aada1f0bf93dcd30ee284dff65206" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="keljfelja" cloneof="keljfelj">
+ <description>Keljfeljancsi (Alt)</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="keljfel.dsk" size="737280" crc="6e09e8c5" sha1="f5a043f2eddd88d7207bdd862887d3c3a9af66c3" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="kismozdoa" cloneof="kismozdo">
+ <description>Kismozdony (Alt)</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="kismozony.dsk" size="737280" crc="0af2cc13" sha1="de13c7326810609fc81046333c689919f8ea3c2b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="labirinta" cloneof="labirint">
+ <description>Labirintus (Alt)</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="labiv2.dsk" size="368640" crc="7b90a57c" sha1="2f0ba8595584141e2ea7dacd0b1f758ff27b5743" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="linaa" cloneof="lina">
+ <description>Lina (Alt)</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="lina [a].dsk" size="737280" crc="dbe61e9a" sha1="50fda0f33be072c40d2050efc6e4f3531971f9d5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="masolo">
+ <description>Másoló</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="masolo.dsk" size="368640" crc="33b27e3e" sha1="7e542be169d5a6de3cd5dcdf4f50f65fc48ce055" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="newintro">
+ <description>Newintro</description>
+ <year>198?</year>
+ <publisher>C.S. Software</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="newintro.dsk" size="368640" crc="bde3cf32" sha1="994fe451f537f42686367984e3ef449ecbf18263" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ordogmota" cloneof="ordogmot">
+ <description>Ördögmotor (Alt)</description>
+ <year>1990</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="ordogmotor [a].dsk" size="737280" crc="8bfa6cbf" sha1="e6758720567aa72cd2afc8be5b413c2015ab1fcf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="oszkara" cloneof="oszkar">
+ <description>Oszkár a Lovag (Alt)</description>
+ <year>198?</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="oszkar.dsk" size="737280" crc="62d1c2b2" sha1="76ea86b6661a35c2de1e202154599c2b613df32b" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="panika" cloneof="panik">
+ <description>Pánik (Alt)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="panik [a].dsk" size="737280" crc="ac5ac41b" sha1="ec78040a45ab5419478f0a9ad159bb74dcdf9b10" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="parbajb" cloneof="parbaj">
+ <description>Párbaj (Alt 2)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="parbaj [a].dsk" size="737280" crc="296e157b" sha1="c3b71a97597257253057c4c41e9cc97c7741e93e" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="peepshowa" cloneof="peepshow">
+ <description>Peep Show (Alt)</description>
+ <year>1984</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="peepshow.dsk" size="737280" crc="c3628300" sha1="01b45844089b16341ab1bc8964208f6304f97222" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="poseidona" cloneof="poseidon">
+ <description>Poseidon Kincse (Alt)</description>
+ <year>1989</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="poseidonkincse.dsk" size="368640" crc="2acff3a1" sha1="cc3af65157cd00645c8f2f45dbec17dcdd13ca71" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="raceaceb" cloneof="raceace">
+ <description>Race Ace (Alt 2)</description>
+ <year>1990</year>
+ <publisher>Zsolt Szigeti</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="race_ace.dsk" size="368640" crc="af7378e5" sha1="553a0bc4909afd55b59eca95d4a5b1a998590dd5" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rohammcr" cloneof="rohamm">
+ <description>Rohamm (Cracked)</description>
+ <year>1989</year>
+ <publisher>GATO Bt.</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="rohammcracked.dsk" size="368640" crc="5c1b9675" sha1="338864ac3231d73af5a24def9c676c08d49e1b19" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sajtvajob" cloneof="sajtvajo">
+ <description>Sajtvájó (Alt 2)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="sajtvajo [a].dsk" size="737280" crc="1e73fb64" sha1="83f0953be53663c8cc3881a06a124a5186ac0dcf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="satirozab" cloneof="satiroza">
+ <description>Satírozás (Alt 2)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="satirozas.dsk" size="737280" crc="23fa33d8" sha1="d3048a2e17254270c2a8ccd28a65a6e936e81539" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="sinuscr">
+ <description>Sinuscr</description>
+ <year>198?</year>
+ <publisher>Peter Rakos</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="sinusscr.dsk" size="368640" crc="bb893ca8" sha1="17dc0c5eb70b4718654718cae1be2acd38a1dff7" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="spacesapb" cloneof="spacesap">
+ <description>Space Sapper (Alt 2)</description>
+ <year>1987</year>
+ <publisher>Novotrade</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="spacesapperv2.dsk" size="368640" crc="2c0c2b0e" sha1="e9294e4a1b82cc6bc60ced8a27081442ed3e4c62" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="teszt">
+ <description>Teszt</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="teszt.dsk" size="737280" crc="31fbc7bb" sha1="cf9521931f5aa45459a64ab8258c4dddd5f9d788" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="turbojaca" cloneof="turbojac">
+ <description>Turbo Jack (Alt)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="turbojack [a].dsk" size="737280" crc="2ea588e9" sha1="acbc0f2d1907406f2a44489124c3a3fe30e851bf" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ufoa">
+ <description>UFO (Alt)</description>
+ <year>1985</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="ufo [a].dsk" size="737280" crc="941110b4" sha1="453504556562f0ccd00089dcf2c86d67004df053" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="upmleme1">
+ <description>UPM Lemez 1</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="upmlemez1.dsk" size="737280" crc="d3698df2" sha1="1b944fff0b41007fc6c482ba28407fb851e3ec16" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="upmleme2">
+ <description>UPM Lemez 2</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="upmlemez2.dsk" size="737280" crc="1f51ce73" sha1="3de8a6e44bbd34e0abacd0fcdfb76b6965cc5b5a" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="upmleme3">
+ <description>UPM Lemez 3</description>
+ <year>198?</year>
+ <publisher>&lt;unknown&gt;</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="upmlemez3.dsk" size="737280" crc="c8966ad8" sha1="a38ac0cd6eec559cbf4f306f64dd8e4c7cab9c57" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="vidzenea" cloneof="vidzene">
+ <description>Videoton Zene (Alt)</description>
+ <year>198?</year>
+ <publisher>JozsiSoft</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="368640">
+ <rom name="vidizev2.dsk" size="368640" crc="7ef1328a" sha1="99b708e16a8c49b63661a4b44afa30fecb0079dc" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="viliabana" cloneof="viliaban">
+ <description>Vili a Bányász (Alt)</description>
+ <year>1991</year>
+ <publisher>STV</publisher>
+
+ <part name="flop1" interface="floppy_5_25">
+ <dataarea name="flop" size="737280">
+ <rom name="vili.dsk" size="737280" crc="90b96888" sha1="0a38c2d1704f5cdfdc5f2cb7c60f7035caaa28b4" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+-->
+</softwarelist>
diff --git a/hash/vsmile_cart.xml b/hash/vsmile_cart.xml
index a44fa1381bd..1327c4e598c 100644
--- a/hash/vsmile_cart.xml
+++ b/hash/vsmile_cart.xml
@@ -58,6 +58,7 @@ Language:
80-084007(SP) | Action Mania
-
80-084020(US) | Dora the Explorer : Dora's Fix It Adventure
+80-084021(US) | Dora the Explorer : Dora's Fix It Adventure (pocket version)
80-084022(NL) | Dora: Dora's Reparatie Avontuur
80-084023(UK) | Dora the Explorer : Dora's Fix It Adventure
80-084024(GE) | Dora: Doras Reparatur-Abenteuer
@@ -140,6 +141,7 @@ Language:
80-084307(SP) | Campeonato de Futbol
-
80-084320(US) | Disney Fairies: TinkerBell
+80-084321(US) | Disney Fairies: TinkerBell (pocket version)
80-084322(NL) | TinkerBell
80-084323(UK) | TinkerBell
80-084324(GE) | TinkerBell
@@ -179,6 +181,7 @@ Language:
80-084407(SP) | Cars: Acelera el Motor en Radiador Springs
-
80-084420(US) | Toy Story 3
+80-084421(US) | Toy Story 3 (pocket version)
(IT) | Toy Story 3 (EAN 8033836704196) GP470419?
80-084422(NL) | Toy Story 3
80-084423(UK) | Toy Story 3
@@ -216,11 +219,12 @@ Language:
80-084520(US) | <Unknown>
-
80-084540(US) | Super Why to the Rescue! The Beach Day Mystery
-80-084541(US) | Super Why to the Rescue! The Beach Day Mystery <- really odd serial# but other 'pocket' games have this also as there is no Italian version
+80-084541(US) | Super Why to the Rescue! The Beach Day Mystery (pocket version)
-
80-084560(US) | <Unknown>
-
80-084580(US) | Cars 2
+80-084581(US) | Cars 2 (pocket version)
80-084583(UK) | Cars 2
80-084584(GE) | Cars 2
80-084585(FR) | Cars 2
@@ -638,6 +642,7 @@ V.Smile Baby
80-099020(US) | Pooh's Hundred Acre Wood Adventure
80-099022(NL) | Poeh's Honderd Bunderbos Avontuur
80-099023(UK) | Pooh's Hundred Acre Wood Adventure
+80-099025(FR) | Winnie et ses amis dans la Faret des Reves Bieus
-
80-099040(US) | Baby Einstein - World of Discoveries
80-099040(US) | Baby Einstein - World of Discoveries (no # on front label)
@@ -709,6 +714,17 @@ V.Smile Smartbooks
</part>
</software>
+ <software name="alphaprk" supported="no">
+ <description>Alphabet Park Adventure (USA)</description>
+ <year>200?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="vsmile_cart">
+ <dataarea name="rom" size="8388608">
+ <rom name="52-92000.bin" size="8388608" crc="69ef24ff" sha1="82b89bdc5e9050e4152866fc774d3996f9836d65" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="ariel" supported="no">
<description>Arielle Die Meerjungfrau - Arielles aufregendes Abenteuer (Ger)</description>
<year>200?</year>
@@ -756,6 +772,17 @@ V.Smile Smartbooks
</software>
<software name="cinderla" supported="no">
+ <description>Cinderella - Cinderella's Magic Wishes (USA)</description>
+ <year>200?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="vsmile_cart">
+ <dataarea name="rom" size="8388608">
+ <rom name="52-92240.bin" size="8388608" crc="2723728c" sha1="32fd6a5b9718ccc7e10e64046d7ac320cfa47362" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cinderlag" cloneof="cinderla" supported="no">
<description>Cinderella - Lernen im Märchenland (Ger, Rev. 1)</description>
<year>200?</year>
<publisher>VTech</publisher>
@@ -766,7 +793,7 @@ V.Smile Smartbooks
</part>
</software>
- <software name="cinderla1" cloneof="cinderla" supported="no">
+ <software name="cinderlag1" cloneof="cinderla" supported="no">
<description>Cinderella - Lernen im Märchenland (Ger, Rev. 0)</description>
<year>200?</year>
<publisher>VTech</publisher>
diff --git a/src/emu/bus/isa/sc499.c b/src/emu/bus/isa/sc499.c
index 6e91c79510c..1ca3859d41c 100644
--- a/src/emu/bus/isa/sc499.c
+++ b/src/emu/bus/isa/sc499.c
@@ -16,6 +16,7 @@
*/
#include "sc499.h"
+#include "formats/ioprocs.h"
#define VERBOSE 0
@@ -1307,16 +1308,16 @@ void sc499_ctape_image_device::write_block(int block_num, UINT8 *ptr)
bool sc499_ctape_image_device::call_load()
{
- if (software_entry() == NULL)
- {
- m_ctape_data.resize(length());
- fread(m_ctape_data, length());
- }
- else
- {
- m_ctape_data.resize(get_software_region_length("ctape"));
- memcpy(m_ctape_data, get_software_region("ctape"), get_software_region_length("ctape"));
- }
+ UINT32 size;
+ io_generic io;
+ io.file = (device_image_interface *)this;
+ io.procs = &image_ioprocs;
+ io.filler = 0xff;
+
+ size = io_generic_size(&io);
+ m_ctape_data.resize(size);
+
+ io_generic_read(&io, m_ctape_data, 0, size);
return IMAGE_INIT_PASS;
}
diff --git a/src/emu/bus/isa/sc499.h b/src/emu/bus/isa/sc499.h
index 825706f43a4..eeda9ad1a4a 100644
--- a/src/emu/bus/isa/sc499.h
+++ b/src/emu/bus/isa/sc499.h
@@ -31,8 +31,7 @@ public:
// image-level overrides
virtual bool call_load();
-// virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { return load_software(swlist, swname, start_entry); }
- virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { printf("%s\n", swname); return load_software(swlist, swname, start_entry); }
+ virtual bool call_softlist_load(software_list_device &swlist, const char *swname, const rom_entry *start_entry) { return load_software(swlist, swname, start_entry); }
virtual void call_unload();
virtual iodevice_t image_type() const { return IO_MAGTAPE; }
diff --git a/src/emu/bus/psx/memcard.h b/src/emu/bus/psx/memcard.h
index 7763658770a..49e8236fbc7 100644
--- a/src/emu/bus/psx/memcard.h
+++ b/src/emu/bus/psx/memcard.h
@@ -63,7 +63,7 @@ public:
virtual void device_reset();
virtual void device_config_complete();
- void clock_w(bool state) { if(m_clock && !m_sel && !state && !m_pad) do_card(); m_clock = state; }
+ void clock_w(bool state) { if(!m_clock && !m_sel && state && !m_pad) do_card(); m_clock = state; }
void sel_w(bool state);
bool rx_r() { return m_rx; }
bool ack_r() { return m_ack; }
diff --git a/src/emu/bus/psx/multitap.c b/src/emu/bus/psx/multitap.c
index 8efd8c1d257..01028aea727 100644
--- a/src/emu/bus/psx/multitap.c
+++ b/src/emu/bus/psx/multitap.c
@@ -79,9 +79,9 @@ void psx_multitap_device::set_tx_line(bool tx, int port)
dev = m_portd;
break;
}
- dev->clock_w(1);
- dev->tx_w(tx);
dev->clock_w(0);
+ dev->tx_w(tx);
+ dev->clock_w(1);
}
bool psx_multitap_device::get_rx_line(int port)
diff --git a/src/emu/cpu/alto2/a2disp.h b/src/emu/cpu/alto2/a2disp.h
index 95da3343d5c..3eb27227bee 100644
--- a/src/emu/cpu/alto2/a2disp.h
+++ b/src/emu/cpu/alto2/a2disp.h
@@ -76,8 +76,8 @@
#define ALTO2_DISPLAY_HEIGHT 808 //!< number of visible scanlines per frame; 808 really, but there are some empty lines?
#define ALTO2_DISPLAY_WIDTH 606 //!< visible width of the display; 38 x 16 bit words - 2 pixels
#define ALTO2_DISPLAY_VISIBLE_WORDS ((ALTO2_DISPLAY_WIDTH+15)/16) //!< visible words per scanline
-#define ALTO2_DISPLAY_BITCLOCK 20160000ll //!< display bit clock in in Hertz (20.16MHz)
-#define ALTO2_DISPLAY_BITTIME(n) (U64(1000000000000)*(n)/ALTO2_DISPLAY_BITCLOCK) //!< display bit time in in pico seconds (~= 49.6031ns)
+#define ALTO2_DISPLAY_BITCLOCK 20160000ll //!< display bit clock in Hertz (20.16MHz)
+#define ALTO2_DISPLAY_BITTIME(n) (U64(1000000000000)*(n)/ALTO2_DISPLAY_BITCLOCK) //!< display bit time in pico seconds (~= 49.6031ns)
#define ALTO2_DISPLAY_SCANLINE_TIME ALTO2_DISPLAY_BITTIME(ALTO2_DISPLAY_TOTAL_WIDTH)//!< time for a scanline in pico seconds (768 * 49.6031ns ~= 38095.1808ns)
#define ALTO2_DISPLAY_VISIBLE_TIME ALTO2_DISPLAY_BITTIME(ALTO2_DISPLAY_WIDTH) //!< time of the visible part of a scanline in pico seconds (606 * 49.6031ns ~= 30059.4786ns)
#define ALTO2_DISPLAY_WORD_TIME ALTO2_DISPLAY_BITTIME(16) //!< time for a word in pico seconds (16 pixels * 49.6031ns ~= 793.6496ns)
diff --git a/src/emu/cpu/alto2/a2ether.c b/src/emu/cpu/alto2/a2ether.c
index 025f14d27f2..94bd5e26603 100644
--- a/src/emu/cpu/alto2/a2ether.c
+++ b/src/emu/cpu/alto2/a2ether.c
@@ -416,7 +416,7 @@ void alto2_cpu_device::eth_wakeup()
* polynomials listed in Tabel I by applying the appropriate logic levels
* to the select pins S0, S1 and S2.
*
- * Teh 'F401 consists of a 16-bit register, a Read Only Memory (ROM) and
+ * The 'F401 consists of a 16-bit register, a Read Only Memory (ROM) and
* associated control circuitry as shown in the block diagram. The
* polynomial control code presented at inputs S0, S1 and S2 is decoded
* by the ROM, selecting the desired polynomial by establishing shift
diff --git a/src/emu/cpu/arc/arc.c b/src/emu/cpu/arc/arc.c
new file mode 100644
index 00000000000..4bc688ce92d
--- /dev/null
+++ b/src/emu/cpu/arc/arc.c
@@ -0,0 +1,122 @@
+/*********************************\
+
+ ARCtangent (A4) core
+ ARC == Argonaut RISC Core
+
+ (this is a skeleton core)
+
+\*********************************/
+
+#include "emu.h"
+#include "debugger.h"
+#include "arc.h"
+
+
+const device_type ARC = &device_creator<arc_device>;
+
+
+arc_device::arc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : cpu_device(mconfig, ARC, "ARCtangent A4", tag, owner, clock, "arc", __FILE__)
+ , m_program_config("program", ENDIANNESS_BIG, 32, 24, 0) // some docs describe these as 'middle endian'?!
+{
+}
+
+
+offs_t arc_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ extern CPU_DISASSEMBLE( arc );
+ return CPU_DISASSEMBLE_NAME(arc)(this, buffer, pc, oprom, opram, options);
+}
+
+
+/*****************************************************************************/
+
+/*****************************************************************************/
+
+void arc_device::unimplemented_opcode(UINT16 op)
+{
+ fatalerror("arc: unknown opcode %04x at %04x\n", op, m_pc << 2);
+}
+
+/*****************************************************************************/
+
+UINT32 arc_device::READ32(UINT32 address)
+{
+ return m_program->read_dword(address << 2);
+}
+
+void arc_device::WRITE32(UINT32 address, UINT32 data)
+{
+ m_program->write_dword(address << 2, data);
+}
+
+/*****************************************************************************/
+
+void arc_device::device_start()
+{
+ m_pc = 0;
+
+ m_debugger_temp = 0;
+
+ m_program = &space(AS_PROGRAM);
+
+ state_add( 0, "PC", m_debugger_temp).callimport().callexport().formatstr("%08X");
+ state_add(STATE_GENPC, "GENPC", m_debugger_temp).callexport().noshow();
+
+ m_icountptr = &m_icount;
+}
+
+void arc_device::state_export(const device_state_entry &entry)
+{
+ switch (entry.index())
+ {
+ case 0:
+ m_debugger_temp = m_pc << 2;
+ break;
+
+ case STATE_GENPC:
+ m_debugger_temp = m_pc << 2;
+ break;
+ }
+}
+
+void arc_device::state_import(const device_state_entry &entry)
+{
+ switch (entry.index())
+ {
+ case 0:
+ m_pc = (m_debugger_temp & 0xfffffffc) >> 2;
+ break;
+ }
+}
+
+void arc_device::device_reset()
+{
+ m_pc = 0x00000000;
+}
+
+/*****************************************************************************/
+
+void arc_device::execute_set_input(int irqline, int state)
+{
+
+}
+
+
+void arc_device::execute_run()
+{
+ //UINT32 lres;
+ //lres = 0;
+
+ while (m_icount > 0)
+ {
+ debugger_instruction_hook(this, m_pc<<2);
+
+ //UINT32 op = READ32(m_pc);
+
+ m_pc++;
+
+ m_icount--;
+ }
+
+}
diff --git a/src/emu/cpu/arc/arc.h b/src/emu/cpu/arc/arc.h
new file mode 100644
index 00000000000..93df62fa942
--- /dev/null
+++ b/src/emu/cpu/arc/arc.h
@@ -0,0 +1,73 @@
+/*********************************\
+
+ ARCtangent (A4) core
+ ARC == Argonaut RISC Core
+
+\*********************************/
+
+#pragma once
+
+#ifndef __ARC_H__
+#define __ARC_H__
+
+class arc_device : public cpu_device
+{
+public:
+ // construction/destruction
+ arc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // device_execute_interface overrides
+ virtual UINT32 execute_min_cycles() const { return 5; }
+ virtual UINT32 execute_max_cycles() const { return 5; }
+ virtual UINT32 execute_input_lines() const { return 0; }
+ virtual void execute_run();
+ virtual void execute_set_input(int inputnum, int state);
+
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; }
+
+ // device_state_interface overrides
+ virtual void state_import(const device_state_entry &entry);
+ virtual void state_export(const device_state_entry &entry);
+
+ // device_disasm_interface overrides
+ virtual UINT32 disasm_min_opcode_bytes() const { return 4; }
+ virtual UINT32 disasm_max_opcode_bytes() const { return 4; }
+ virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
+
+private:
+ address_space_config m_program_config;
+
+ // 0 - 28 = r00 - r28 (General Purpose Registers)
+ // 29 = r29 (ILINK1)
+ // 30 = r30 (ILINE2)
+ // 31 = r31 (BLINK)
+ // 32- 59 = r32 - r59 (Reserved Registers)
+ // 60 = LPCOUNT
+ // 61 = Short Immediate Data Indicator Settings Flag
+ // 62 = Long Immediate Data Indicator
+ // 63 = Short Immediate Data Indicator NOT Settings Flag
+ UINT32 m_pc;
+ //UINT32 m_r[64];
+
+
+ address_space *m_program;
+ int m_icount;
+
+ UINT32 m_debugger_temp;
+
+ void unimplemented_opcode(UINT16 op);
+ inline UINT32 READ32(UINT32 address);
+ inline void WRITE32(UINT32 address, UINT32 data);
+};
+
+
+extern const device_type ARC;
+
+
+#endif /* __ARC_H__ */
diff --git a/src/emu/cpu/arc/arcdasm.c b/src/emu/cpu/arc/arcdasm.c
new file mode 100644
index 00000000000..b1fa5d442b1
--- /dev/null
+++ b/src/emu/cpu/arc/arcdasm.c
@@ -0,0 +1,222 @@
+/*********************************\
+
+ ARCtangent A4 disassembler
+
+\*********************************/
+
+#include "emu.h"
+#include <stdarg.h>
+
+static char *output;
+
+static void ATTR_PRINTF(1,2) print(const char *fmt, ...)
+{
+ va_list vl;
+
+ va_start(vl, fmt);
+ vsprintf(output, fmt, vl);
+ va_end(vl);
+}
+
+/*****************************************************************************/
+
+
+
+/*****************************************************************************/
+
+static const char *basic[0x20] =
+{
+ /* 00 */ "LD r+r",
+ /* 01 */ "LD r+o",
+ /* 02 */ "ST r+o",
+ /* 03 */ "extended",
+ /* 04 */ "B",
+ /* 05 */ "BL",
+ /* 06 */ "LPcc",
+ /* 07 */ "Jcc JLcc",
+ /* 08 */ "ADD",
+ /* 09 */ "ADC",
+ /* 0a */ "SUB",
+ /* 0b */ "SBC",
+ /* 0c */ "AND",
+ /* 0d */ "OR",
+ /* 0e */ "BIC",
+ /* 0f */ "XOR",
+ /* 10 */ "ASL",
+ /* 11 */ "LSR",
+ /* 12 */ "ASR",
+ /* 13 */ "ROR",
+ /* 14 */ "MUL64",
+ /* 15 */ "MULU64",
+ /* 16 */ "undefined",
+ /* 17 */ "undefined",
+ /* 18 */ "undefined",
+ /* 19 */ "undefined",
+ /* 1a */ "undefined",
+ /* 1b */ "undefined",
+ /* 1c */ "undefined",
+ /* 1d */ "undefined",
+ /* 1e */ "MAX",
+ /* 1f */ "MIN"
+};
+
+static const char *conditions[0x20] =
+{
+ /* 00 */ "AL", // (aka RA - Always)
+ /* 01 */ "EQ", // (aka Z - Zero
+ /* 02 */ "NE", // (aka NZ - Non-Zero)
+ /* 03 */ "PL", // (aka P - Positive)
+ /* 04 */ "MI", // (aka N - Negative)
+ /* 05 */ "CS", // (aka C, LO - Carry set / Lower than) (unsigned)
+ /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned)
+ /* 07 */ "VS", // (aka V - Overflow set)
+ /* 08 */ "VC", // (aka NV - Overflow clear)
+ /* 09 */ "GT", // ( - Greater than) (signed)
+ /* 0a */ "GE", // ( - Greater than or Equal) (signed)
+ /* 0b */ "LT", // ( - Less than) (signed)
+ /* 0c */ "LE", // ( - Less than or Equal) (signed)
+ /* 0d */ "HI", // ( - Higher than) (unsigned)
+ /* 0e */ "LS", // ( - Lower or Same) (unsigned)
+ /* 0f */ "PNZ",// ( - Positive non-0 value)
+ /* 10 */ "0x10 Reserved", // possible CPU implementation specifics
+ /* 11 */ "0x11 Reserved",
+ /* 12 */ "0x12 Reserved",
+ /* 13 */ "0x13 Reserved",
+ /* 14 */ "0x14 Reserved",
+ /* 15 */ "0x15 Reserved",
+ /* 16 */ "0x16 Reserved",
+ /* 17 */ "0x17 Reserved",
+ /* 18 */ "0x18 Reserved",
+ /* 19 */ "0x19 Reserved",
+ /* 1a */ "0x1a Reserved",
+ /* 1b */ "0x1b Reserved",
+ /* 1c */ "0x1c Reserved",
+ /* 1d */ "0x1d Reserved",
+ /* 1e */ "0x1e Reserved",
+ /* 1f */ "0x1f Reserved"
+};
+
+static const char *delaytype[0x4] =
+{
+ "ND", // NO DELAY - execute next instruction only when NOT jumping
+ "D", // always execute next instruction
+ "JD", // only execute next instruction when jumping
+ "Res!", // reserved / invalid
+};
+
+static const char *regnames[0x40] =
+{
+ /* 0x00 */ "r00",
+ /* 0x01 */ "r01",
+ /* 0x02 */ "r02",
+ /* 0x03 */ "r03",
+ /* 0x04 */ "r04",
+ /* 0x05 */ "r05",
+ /* 0x06 */ "r06",
+ /* 0x07 */ "r07",
+ /* 0x08 */ "r08",
+ /* 0x09 */ "r09",
+ /* 0x0a */ "r10",
+ /* 0x0b */ "r11",
+ /* 0x0c */ "r12",
+ /* 0x0d */ "r13",
+ /* 0x0e */ "r14",
+ /* 0x0f */ "r15",
+
+ /* 0x10 */ "r16",
+ /* 0x11 */ "r17",
+ /* 0x12 */ "r18",
+ /* 0x13 */ "r19",
+ /* 0x14 */ "r20",
+ /* 0x15 */ "r21",
+ /* 0x16 */ "r22",
+ /* 0x17 */ "r23",
+ /* 0x18 */ "r24",
+ /* 0x19 */ "r25",
+ /* 0x1a */ "r26",
+ /* 0x1b */ "r27",
+ /* 0x1c */ "r28",
+ /* 0x1d */ "ILINK1",
+ /* 0x1e */ "ILINK2",
+ /* 0x1f */ "BLINK",
+
+ /* 0x20 */ "r32res", // reserved for manufacturer specific extensions
+ /* 0x21 */ "r33res",
+ /* 0x22 */ "r34res",
+ /* 0x23 */ "r35res",
+ /* 0x24 */ "r36res",
+ /* 0x25 */ "r37res",
+ /* 0x26 */ "r38res",
+ /* 0x27 */ "r39res",
+ /* 0x28 */ "r40res",
+ /* 0x29 */ "r41res",
+ /* 0x2a */ "r42res",
+ /* 0x2b */ "r43res",
+ /* 0x2c */ "r44res",
+ /* 0x2d */ "r45res",
+ /* 0x2e */ "r46res",
+ /* 0x2f */ "r47res",
+
+ /* 0x30 */ "r48res",
+ /* 0x31 */ "r49res",
+ /* 0x32 */ "r50res",
+ /* 0x33 */ "r51res",
+ /* 0x34 */ "r52res",
+ /* 0x35 */ "r53res",
+ /* 0x36 */ "r54res",
+ /* 0x37 */ "r55res",
+ /* 0x38 */ "r56res",
+ /* 0x39 */ "r57res",
+ /* 0x3a */ "r58res",
+ /* 0x3b */ "r59res",
+ /* 0x3c */ "LPCOUNT",
+ /* 0x3d */ "sImm F",
+ /* 0x3e */ "lImm",
+ /* 0x3f */ "sImm NF",
+};
+
+#define ARC_CONDITION ((op & 0x0000001f) >> 0 ) // aka Q
+
+// used in jumps
+#define ARC_BRANCH_DELAY ((op & 0x00000060) >> 5 ) // aka N
+#define ARC_BRANCH_ADDR ((op & 0x07ffff80) >> 7 ) // aka L
+
+#define ARC_OPERATION ((op & 0xf8000000) >> 27)
+
+#define ARC_REGOP_DEST ((op & 0x07e00000) >> 21 ) // aka A
+#define ARC_REGOP_OP1 ((op & 0x001f8000) >> 15 ) // aka B
+#define ARC_REGOP_OP2 ((op & 0x00007e00) >> 9 ) // aka C
+#define ARC_REGOP_SHIMM ((op & 0x000001ff) >> 0 ) // aka D
+
+
+CPU_DISASSEMBLE(arc)
+{
+ UINT32 op = oprom[0] | (oprom[1] << 8) | (oprom[2] << 16) | (oprom[3] << 24);
+ op = BIG_ENDIANIZE_INT32(op);
+
+ output = buffer;
+
+ UINT8 opcode = ARC_OPERATION;
+
+ switch (opcode)
+ {
+ case 0x04: // B
+ case 0x05: // BL
+ print("%s(%s)(%s) %08x", basic[opcode], conditions[ARC_CONDITION], delaytype[ARC_BRANCH_DELAY], (ARC_BRANCH_ADDR<<2)+pc+4);
+ break;
+
+ case 0x08: // ADD
+ // todo, short / long immediate formats
+ print("%s %s , %s , %s (%08x)", basic[opcode], regnames[ARC_REGOP_DEST], regnames[ARC_REGOP_OP1], regnames[ARC_REGOP_OP2], op &~ 0xfffffe00);
+ break;
+
+
+ default:
+ print("%s (%08x)", basic[opcode], op &~ 0xf8000000);
+ break;
+ }
+
+
+
+ return 4 | DASMFLAG_SUPPORTED;
+}
diff --git a/src/emu/cpu/arcompact/arcompact.c b/src/emu/cpu/arcompact/arcompact.c
new file mode 100644
index 00000000000..703ab5bf94f
--- /dev/null
+++ b/src/emu/cpu/arcompact/arcompact.c
@@ -0,0 +1,143 @@
+/*********************************\
+
+ ARCompact Core
+
+ The following procesors use the ARCompact instruction set
+
+ - ARCtangent-A5
+ - ARC 600
+ - ARC 700
+
+ (this is a skeleton core)
+
+ ARCompact is a 32-bit CPU that freely mixes 32-bit and 16-bit instructions
+ various user customizations could be made as with the ARC A4 based processors
+ these include custom instructions and registers.
+
+\*********************************/
+
+#include "emu.h"
+#include "debugger.h"
+#include "arcompact.h"
+
+
+const device_type ARCA5 = &device_creator<arcompact_device>;
+
+
+arcompact_device::arcompact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : cpu_device(mconfig, ARCA5, "ARCtangent-A5", tag, owner, clock, "arca5", __FILE__)
+ , m_program_config("program", ENDIANNESS_LITTLE, 32, 32, 0) // some docs describe these as 'middle endian'?!
+{
+}
+
+
+offs_t arcompact_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ extern CPU_DISASSEMBLE( arcompact );
+ return CPU_DISASSEMBLE_NAME(arcompact)(this, buffer, pc, oprom, opram, options);
+}
+
+
+/*****************************************************************************/
+
+/*****************************************************************************/
+
+void arcompact_device::unimplemented_opcode(UINT16 op)
+{
+ fatalerror("ARCOMPACT: unknown opcode %04x at %04x\n", op, m_pc << 2);
+}
+
+/*****************************************************************************/
+
+UINT32 arcompact_device::READ32(UINT32 address)
+{
+ return m_program->read_dword(address << 2);
+}
+
+void arcompact_device::WRITE32(UINT32 address, UINT32 data)
+{
+ m_program->write_dword(address << 2, data);
+}
+
+UINT16 arcompact_device::READ16(UINT32 address)
+{
+ return m_program->read_word(address << 1);
+}
+
+void arcompact_device::WRITE16(UINT32 address, UINT16 data)
+{
+ m_program->write_word(address << 1, data);
+}
+
+
+/*****************************************************************************/
+
+void arcompact_device::device_start()
+{
+ m_pc = 0;
+
+ m_debugger_temp = 0;
+
+ m_program = &space(AS_PROGRAM);
+
+ state_add( 0, "PC", m_debugger_temp).callimport().callexport().formatstr("%08X");
+ state_add(STATE_GENPC, "GENPC", m_debugger_temp).callexport().noshow();
+
+ m_icountptr = &m_icount;
+}
+
+void arcompact_device::state_export(const device_state_entry &entry)
+{
+ switch (entry.index())
+ {
+ case 0:
+ m_debugger_temp = m_pc << 1;
+ break;
+
+ case STATE_GENPC:
+ m_debugger_temp = m_pc << 1;
+ break;
+ }
+}
+
+void arcompact_device::state_import(const device_state_entry &entry)
+{
+ switch (entry.index())
+ {
+ case 0:
+ m_pc = (m_debugger_temp & 0xfffffffe) >> 1;
+ break;
+ }
+}
+
+void arcompact_device::device_reset()
+{
+ m_pc = 0x00000000;
+}
+
+/*****************************************************************************/
+
+void arcompact_device::execute_set_input(int irqline, int state)
+{
+
+}
+
+
+void arcompact_device::execute_run()
+{
+ //UINT32 lres;
+ //lres = 0;
+
+ while (m_icount > 0)
+ {
+ debugger_instruction_hook(this, m_pc<<2);
+
+ //UINT32 op = READ32(m_pc);
+
+
+ m_pc++;
+
+ m_icount--;
+ }
+
+}
diff --git a/src/emu/cpu/arcompact/arcompact.h b/src/emu/cpu/arcompact/arcompact.h
new file mode 100644
index 00000000000..bedef23f5d5
--- /dev/null
+++ b/src/emu/cpu/arcompact/arcompact.h
@@ -0,0 +1,65 @@
+/*********************************\
+
+ ARCompact Core
+
+\*********************************/
+
+#pragma once
+
+#ifndef __ARCOMPACT_H__
+#define __ARCOMPACT_H__
+
+class arcompact_device : public cpu_device
+{
+public:
+ // construction/destruction
+ arcompact_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // device_execute_interface overrides
+ virtual UINT32 execute_min_cycles() const { return 5; }
+ virtual UINT32 execute_max_cycles() const { return 5; }
+ virtual UINT32 execute_input_lines() const { return 0; }
+ virtual void execute_run();
+ virtual void execute_set_input(int inputnum, int state);
+
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; }
+
+ // device_state_interface overrides
+ virtual void state_import(const device_state_entry &entry);
+ virtual void state_export(const device_state_entry &entry);
+
+ // device_disasm_interface overrides
+ virtual UINT32 disasm_min_opcode_bytes() const { return 2; }
+ virtual UINT32 disasm_max_opcode_bytes() const { return 4; }
+ virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
+
+private:
+ address_space_config m_program_config;
+
+ UINT32 m_pc;
+
+ address_space *m_program;
+ int m_icount;
+
+ UINT32 m_debugger_temp;
+
+ void unimplemented_opcode(UINT16 op);
+ inline UINT32 READ32(UINT32 address);
+ inline void WRITE32(UINT32 address, UINT32 data);
+ inline UINT16 READ16(UINT32 address);
+ inline void WRITE16(UINT32 address, UINT16 data);
+
+
+};
+
+
+extern const device_type ARCA5;
+
+
+#endif /* __ARCOMPACT_H__ */
diff --git a/src/emu/cpu/arcompact/arcompactdasm.c b/src/emu/cpu/arcompact/arcompactdasm.c
new file mode 100644
index 00000000000..40fd2391c6e
--- /dev/null
+++ b/src/emu/cpu/arcompact/arcompactdasm.c
@@ -0,0 +1,378 @@
+/*********************************\
+
+ ARCompact disassembler
+
+\*********************************/
+
+#include "emu.h"
+#include <stdarg.h>
+
+static char *output;
+
+static void ATTR_PRINTF(1,2) print(const char *fmt, ...)
+{
+ va_list vl;
+
+ va_start(vl, fmt);
+ vsprintf(output, fmt, vl);
+ va_end(vl);
+}
+
+/*****************************************************************************/
+
+
+
+/*****************************************************************************/
+
+
+static const char *basic[0x20] =
+{
+ /* opcode below are 32-bit mode */
+ /* 00 */ "Bcc",
+ /* 01 */ "BLcc/BRcc",
+ /* 02 */ "LD r+o",
+ /* 03 */ "ST r+o",
+ /* 04 */ "op a,b,c (basecase)", // basecase ops
+ /* 05 */ "op a,b,c (05 ARC ext)", // ARC processor specific extensions
+ /* 06 */ "op a,b,c (06 ARC ext)",
+ /* 07 */ "op a,b,c (07 User ext)", // User speciifc extensions
+ /* 08 */ "op a,b,c (08 User ext)",
+ /* 09 */ "op a,b,c (09 Market ext)", // Market specific extensions
+ /* 0a */ "op a,b,c (0a Market ext)",
+ /* 0b */ "op a,b,c (0b Market ext)",
+ /* opcodes below are 16-bit mode */
+ /* 0c */ "Load/Add reg-reg",
+ /* 0d */ "Add/Sub/Shft imm",
+ /* 0e */ "Mov/Cmp/Add",
+ /* 0f */ "op_S b,b,c", // single ops
+ /* 10 */ "LD_S",
+ /* 11 */ "LDB_S",
+ /* 12 */ "LDW_S",
+ /* 13 */ "LSW_S.X",
+ /* 14 */ "ST_S",
+ /* 15 */ "STB_S",
+ /* 16 */ "STW_S",
+ /* 17 */ "Shift/Sub/Bit",
+ /* 18 */ "Stack Instr",
+ /* 19 */ "GP Instr",
+ /* 1a */ "PCL Instr",
+ /* 1b */ "MOV_S",
+ /* 1c */ "ADD_S/CMP_S",
+ /* 1d */ "BRcc_S",
+ /* 1e */ "Bcc_S",
+ /* 1f */ "BL_S"
+};
+
+// condition codes (basic ones are the same as arc
+static const char *conditions[0x20] =
+{
+ /* 00 */ "AL", // (aka RA - Always)
+ /* 01 */ "EQ", // (aka Z - Zero
+ /* 02 */ "NE", // (aka NZ - Non-Zero)
+ /* 03 */ "PL", // (aka P - Positive)
+ /* 04 */ "MI", // (aka N - Negative)
+ /* 05 */ "CS", // (aka C, LO - Carry set / Lower than) (unsigned)
+ /* 06 */ "CC", // (aka CC, NC, HS - Carry Clear / Higher or Same) (unsigned)
+ /* 07 */ "VS", // (aka V - Overflow set)
+ /* 08 */ "VC", // (aka NV - Overflow clear)
+ /* 09 */ "GT", // ( - Greater than) (signed)
+ /* 0a */ "GE", // ( - Greater than or Equal) (signed)
+ /* 0b */ "LT", // ( - Less than) (signed)
+ /* 0c */ "LE", // ( - Less than or Equal) (signed)
+ /* 0d */ "HI", // ( - Higher than) (unsigned)
+ /* 0e */ "LS", // ( - Lower or Same) (unsigned)
+ /* 0f */ "PNZ",// ( - Positive non-0 value)
+ /* 10 */ "0x10 Reserved", // possible CPU implementation specifics
+ /* 11 */ "0x11 Reserved",
+ /* 12 */ "0x12 Reserved",
+ /* 13 */ "0x13 Reserved",
+ /* 14 */ "0x14 Reserved",
+ /* 15 */ "0x15 Reserved",
+ /* 16 */ "0x16 Reserved",
+ /* 17 */ "0x17 Reserved",
+ /* 18 */ "0x18 Reserved",
+ /* 19 */ "0x19 Reserved",
+ /* 1a */ "0x1a Reserved",
+ /* 1b */ "0x1b Reserved",
+ /* 1c */ "0x1c Reserved",
+ /* 1d */ "0x1d Reserved",
+ /* 1e */ "0x1e Reserved",
+ /* 1f */ "0x1f Reserved"
+};
+
+static const char *table01_01_0x[0x10] =
+{
+ /* 00 */ "BREQ",
+ /* 01 */ "BRNE",
+ /* 02 */ "BRLT",
+ /* 03 */ "BRGE",
+ /* 04 */ "BRLO",
+ /* 05 */ "BRHS",
+ /* 06 */ "<reserved>",
+ /* 07 */ "<reserved>",
+ /* 08 */ "<reserved>",
+ /* 09 */ "<reserved>",
+ /* 0a */ "<reserved>",
+ /* 0b */ "<reserved>",
+ /* 0c */ "<reserved>",
+ /* 0d */ "<reserved>",
+ /* 0e */ "<BBIT0>",
+ /* 0f */ "<BBIT1>"
+};
+
+static const char *table18[0x8] =
+{
+ /* 00 */ "LD_S (SP)",
+ /* 01 */ "LDB_S (SP)",
+ /* 02 */ "ST_S (SP)",
+ /* 03 */ "STB_S (SP)",
+ /* 04 */ "ADD_S (SP)",
+ /* 05 */ "ADD_S/SUB_S (SP)",
+ /* 06 */ "POP_S (SP)",
+ /* 07 */ "PUSH_S (SP)",
+
+};
+
+static const char *table0f[0x20] =
+{
+ /* 00 */ "SOPs", // Sub Operation (another table..) ( table0f_00 )
+ /* 01 */ "0x01 <illegal>",
+ /* 02 */ "SUB_S",
+ /* 03 */ "0x03 <illegal>",
+ /* 04 */ "AND_S",
+ /* 05 */ "OR_S",
+ /* 06 */ "BIC_S",
+ /* 07 */ "XOR_S",
+ /* 08 */ "0x08 <illegal>",
+ /* 09 */ "0x09 <illegal>",
+ /* 0a */ "0x0a <illegal>",
+ /* 0b */ "TST_S",
+ /* 0c */ "MUL64_S",
+ /* 0d */ "SEXB_S",
+ /* 0e */ "SEXW_S",
+ /* 0f */ "EXTB_S",
+ /* 10 */ "EXTW_S",
+ /* 11 */ "ABS_S",
+ /* 12 */ "NOT_S",
+ /* 13 */ "NEG_S",
+ /* 14 */ "ADD1_S",
+ /* 15 */ "ADD2_S>",
+ /* 16 */ "ADD3_S",
+ /* 17 */ "0x17 <illegal>",
+ /* 18 */ "ASL_S (multiple)",
+ /* 19 */ "LSR_S (multiple)",
+ /* 1a */ "ASR_S (multiple)",
+ /* 1b */ "ASL_S (single)",
+ /* 1c */ "LSR_S (single)",
+ /* 1d */ "ASR_S (single)",
+ /* 1e */ "TRAP (not a5?)",
+ /* 1f */ "BRK_S" // 0x7fff only?
+};
+
+static const char *table0f_00[0x8] =
+{
+ /* 00 */ "J_S",
+ /* 01 */ "J_S.D",
+ /* 02 */ "JL_S",
+ /* 03 */ "JL_S.D",
+ /* 04 */ "0x04 <illegal>",
+ /* 05 */ "0x05 <illegal>",
+ /* 06 */ "SUB_S.NE",
+ /* 07 */ "ZOPs", // Sub Operations (yet another table..) ( table0f_00_07 )
+};
+
+static const char *table0f_00_07[0x8] =
+{
+ /* 00 */ "NOP_S",
+ /* 01 */ "UNIMP_S", // unimplemented (not a5?)
+ /* 02 */ "0x02 <illegal>",
+ /* 03 */ "0x03 <illegal>",
+ /* 04 */ "JEQ_S [BLINK]",
+ /* 05 */ "JNE_S [BLINK]",
+ /* 06 */ "J_S [BLINK]",
+ /* 07 */ "J_S.D [BLINK]",
+};
+
+#define ARCOMPACT_OPERATION ((op & 0xf800) >> 11)
+
+CPU_DISASSEMBLE(arcompact)
+{
+ int size = 2;
+
+ UINT32 op = oprom[2] | (oprom[3] << 8);
+ output = buffer;
+
+ UINT8 instruction = ARCOMPACT_OPERATION;
+
+ if (instruction < 0x0c)
+ {
+ size = 4;
+ op <<= 16;
+ op |= oprom[0] | (oprom[1] << 8);
+
+ switch (instruction)
+ {
+ case 0x00:
+ if (op & 0x00010000)
+ { // Branch Unconditionally Far
+ // 00000 ssssssssss 1 SSSSSSSSSS N R TTTT
+ INT32 address = (op & 0x07fe0000) >> 17;
+ address |= ((op & 0x0000ffc0) >> 6) << 10;
+ address |= ((op & 0x0000000f) >> 0) << 20;
+ if (address & 0x800000) address = -(address&0x7fffff);
+
+ print("B %08x (%08x)", pc + (address *2) + 2, op & ~0xffffffcf );
+ }
+ else
+ { // Branch Conditionally
+ // 00000 ssssssssss 0 SSSSSSSSSS N QQQQQ
+ INT32 address = (op & 0x07fe0000) >> 17;
+ address |= ((op & 0x0000ffc0) >> 6) << 10;
+ if (address & 0x800000) address = -(address&0x7fffff);
+
+ UINT8 condition = op & 0x0000001f;
+
+ print("B(%s) %08x (%08x)", conditions[condition], pc + (address *2) + 2, op & ~0xffffffdf );
+
+ }
+
+ break;
+
+ case 0x01:
+ if (op & 0x00010000)
+ {
+ if (op & 0x00000010)
+ { // Branch on Compare / Bit Test - Register-Immediate
+ // 00001 bbb sssssss 1 S BBB UUUUUU N 1 iiii
+ UINT8 subinstr = op & 0x0000000f;
+ INT32 address = (op & 0x00fe0000) >> 17;
+ address |= ((op & 0x00008000) >> 15) << 7;
+ if (address & 0x80) address = -(address&0x7f);
+
+
+ print("%s (reg-imm) %08x (%08x)", table01_01_0x[subinstr], pc + (address *2) + 4, op & ~0xf8fe800f);
+
+
+ }
+ else
+ {
+ // Branch on Compare / Bit Test - Register-Register
+ // 00001 bbb sssssss 1 S BBB CCCCCC N 0 iiii
+ UINT8 subinstr = op & 0x0000000f;
+ INT32 address = (op & 0x00fe0000) >> 17;
+ address |= ((op & 0x00008000) >> 15) << 7;
+ if (address & 0x80) address = -(address&0x7f);
+
+ print("%s (reg-reg) %08x (%08x)", table01_01_0x[subinstr], pc + (address *2) + 4, op & ~0xf8fe800f);
+
+ }
+
+ }
+ else
+ {
+ if (op & 0x00020000)
+ { // Branch and Link Unconditionally Far
+ // 00001 sssssssss 10 SSSSSSSSSS N R TTTT
+ INT32 address = (op & 0x07fc0000) >> 17;
+ address |= ((op & 0x0000ffc0) >> 6) << 10;
+ address |= ((op & 0x0000000f) >> 0) << 20;
+ if (address & 0x800000) address = -(address&0x7fffff);
+
+ print("BL %08x (%08x)", pc + (address *2) + 2, op & ~0xffffffcf );
+ }
+ else
+ { // Branch and Link Conditionally
+ // 00001 sssssssss 00 SSSSSSSSSS N QQQQQ
+ INT32 address = (op & 0x07fc0000) >> 17;
+ address |= ((op & 0x0000ffc0) >> 6) << 10;
+ if (address & 0x800000) address = -(address&0x7fffff);
+
+ UINT8 condition = op & 0x0000001f;
+
+ print("BL(%s) %08x (%08x)", conditions[condition], pc + (address *2) + 2, op & ~0xffffffdf );
+
+ }
+
+ }
+ break;
+
+ default:
+ print("%s (%08x)", basic[instruction], op & ~0xf8000000 );
+ break;
+
+ }
+
+
+ }
+ else
+ {
+ size = 2;
+
+ switch (instruction)
+ {
+ case 0x0f:
+ {
+ // General Register Instructions (16-bit)
+ // 01111 bbb ccc iiiii
+ UINT8 subinstr = (op & 0x01f) >> 0;
+ //print("%s (%04x)", table0f[subinstr], op & ~0xf81f);
+
+#if 1
+ switch (subinstr)
+ {
+
+ default:
+ print("%s (%04x)", table0f[subinstr], op & ~0xf81f);
+ break;
+
+ case 0x00:
+ {
+ // General Operations w/ Register
+ // 01111 bbb iii 00000
+ UINT8 subinstr2 = (op & 0x00e0) >> 5;
+
+ switch (subinstr2)
+ {
+ default:
+ print("%s (%04x)", table0f_00[subinstr2], op & ~0xf8ff);
+ break;
+
+ case 0x7:
+ {
+ // General Operations w/o Register
+ // 01111 iii 111 00000
+ UINT8 subinstr3 = (op & 0x0700) >> 8;
+
+ print("%s (%04x)", table0f_00_07[subinstr3], op & ~0xffff);
+
+ break;
+ }
+ }
+ }
+ }
+#endif
+
+ break;
+
+ }
+
+
+ case 0x18:
+ {
+ // Stack Pointer Based Instructions (16-bit)
+ // 11000 bbb iii uuuuu
+ UINT8 subinstr = (op & 0x00e0) >> 5;
+ print("%s (%04x)", table18[subinstr], op & ~0xf8e0);
+ break;
+
+ }
+
+ default:
+ print("%s (%04x)", basic[instruction], op & ~0xf800);
+ break;
+ }
+ }
+
+
+ return size | DASMFLAG_SUPPORTED;
+}
diff --git a/src/emu/cpu/cpu.mak b/src/emu/cpu/cpu.mak
index 597ec26fbc7..59ed5d14479 100644
--- a/src/emu/cpu/cpu.mak
+++ b/src/emu/cpu/cpu.mak
@@ -79,6 +79,33 @@ endif
$(CPUOBJ)/8x300/8x300.o: $(CPUSRC)/8x300/8x300.c \
$(CPUSRC)/8x300/8x300.h
+#-------------------------------------------------
+# ARCangent A4
+#@src/emu/cpu/arc/arc.h,CPUS += ARC
+#-------------------------------------------------
+
+ifneq ($(filter ARC,$(CPUS)),)
+OBJDIRS += $(CPUOBJ)/arc
+CPUOBJS += $(CPUOBJ)/arc/arc.o
+DASMOBJS += $(CPUOBJ)/arc/arcdasm.o
+endif
+
+$(CPUOBJ)/arc/arc.o: $(CPUSRC)/arc/arc.c \
+ $(CPUSRC)/arc/arc.h
+
+#-------------------------------------------------
+# ARcompact (ARCtangent-A5, ARC 600, ARC 700)
+#@src/emu/cpu/arc/arc.h,CPUS += ARCOMPACT
+#-------------------------------------------------
+
+ifneq ($(filter ARCOMPACT,$(CPUS)),)
+OBJDIRS += $(CPUOBJ)/arcompact
+CPUOBJS += $(CPUOBJ)/arcompact/arcompact.o
+DASMOBJS += $(CPUOBJ)/arcompact/arcompactdasm.o
+endif
+
+$(CPUOBJ)/arcompact/arcompact.o: $(CPUSRC)/arcompact/arcompact.c \
+ $(CPUSRC)/arcompact/arcompact.h
#-------------------------------------------------
# Acorn ARM series
diff --git a/src/emu/cpu/i86/i86.c b/src/emu/cpu/i86/i86.c
index f12a25c19cd..bbc56e943b1 100644
--- a/src/emu/cpu/i86/i86.c
+++ b/src/emu/cpu/i86/i86.c
@@ -178,7 +178,10 @@ void i8086_cpu_device::execute_run()
}
}
- debugger_instruction_hook( this, pc() );
+ if (!m_seg_prefix)
+ {
+ debugger_instruction_hook( this, pc() );
+ }
UINT8 op = fetch_op();
diff --git a/src/emu/cpu/pps4/pps4.c b/src/emu/cpu/pps4/pps4.c
index 130b70d5b39..ddcd2501189 100644
--- a/src/emu/cpu/pps4/pps4.c
+++ b/src/emu/cpu/pps4/pps4.c
@@ -1,5 +1,6 @@
// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
+// copyright-holders:Juergen Buchmueller <pullmoll@t-online.de>
+
/*****************************************************************************
*
* pps4.c
@@ -26,305 +27,1480 @@
*
* Note: External clock should be divided by 18 (not implemented).
*
+ * Pinouts:
+ * 10660 11660
+ *
+ * +--------\ /--------+ +--------\ /--------+
+ * 1 [| DIB-3 ++ DIA-3 |] 42 1 [| DIO-4 DIO-3 |] 42
+ * 2 [-| DIA-2 DIB-4 |-] 41 2 [-| DIA-4 DIO-2 |-] 41
+ * 3 [| DIB-2 DIA-4 |] 40 3 [| DIA-3 DIO-1 |] 40
+ * 4 [-| DIA-1 NC |-] 39 4 [-| DIA-2 Vdd |-] 39
+ * 5 [| DIB-1 A/B-1 |] 38 5 [| DIA-1 A/B-1 |] 38
+ * 6 [-| Vdd A/B-2 |-] 37 6 [-| I/O-5 A/B-2 |-] 37
+ * 7 [| I/D-5 A/B-3 |] 36 7 [| I/O-6 A/B-3 |] 36
+ * 8 [-| I/D-6 A/B-4 |-] 35 8 [-| I/O-7 A/B-4 |-] 35
+ * 9 [| I/D-7 A/B-5 |] 34 9 [| I/O-8 A/B-5 |] 34
+ * 10 [-| I/D-8 A/B-6 |-] 33 10 [-| I/O-1 A/B-6 |-] 33
+ * 11 [| I/D-1 A/B-7 |] 32 11 [| I/O-4 A/B-7 |] 32
+ * 12 [-| I/D-4 A/B-8 |-] 31 12 [-| I/O-2 A/B-8 |-] 31
+ * 13 [| I/D-2 A/B-9 |] 30 13 [| I/O-3 A/B-9 |] 30
+ * 14 [-| I/D-3 A/B-10 |-] 29 14 [-| W/IO A/B-10 |-] 29
+ * 15 [| W/IO A/B-11 |] 28 15 [| CLK ~B A/B-11 |] 28
+ * 16 [-| CLK ~B A/B-12 |-] 27 16 [-| CLK A A/B-12 |-] 27
+ * 17 [| CLK A NC |] 26 17 [| VCLK DO-4 |] 26
+ * 18 [-| PO DO-3 |-] 25 18 [-| Xtal1 DO-3 |-] 25
+ * 19 [| SPO DO-4 |] 24 19 [| Xtal2 DO-2 |] 24
+ * 20 [-| DO-2 NC |-] 23 20 [-| Vss DO-1 |-] 23
+ * 21 [| DO-1 Vss |] 22 21 [| SPO TC1-14 |] 22
+ * +--------------------+ +--------------------+
+ *
*****************************************************************************/
#include "emu.h"
#include "debugger.h"
#include "pps4.h"
-#define VERBOSE 0
-#define LOG(x) do { if (VERBOSE) logerror x; } while (0)
+#define VERBOSE 0 //!< set to 1 to log certain instruction conditions
+#if VERBOSE
+#define LOG(x) logerror x
+#else
+#define LOG(x)
+#endif
const device_type PPS4 = &device_creator<pps4_device>;
-
pps4_device::pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ )
- , m_program_config("program", ENDIANNESS_LITTLE, 8, 12)
- , m_data_config("data", ENDIANNESS_LITTLE, 8, 12) // 4bit RAM
- , m_io_config("io", ENDIANNESS_LITTLE, 8, 8) // 4bit IO
+ : cpu_device(mconfig, PPS4, "PPS4", tag, owner, clock, "pps4", __FILE__ )
+ , m_program_config("program", ENDIANNESS_LITTLE, 8, 12)
+ , m_data_config("data", ENDIANNESS_LITTLE, 8, 12) // 4bit RAM
+ , m_io_config("io", ENDIANNESS_LITTLE, 8, 8) // 4bit IO
+{
+}
+
+/**
+ * @brief pps4_device::M Return the memory at address B
+ * @return ROM/RAM(B)
+ */
+UINT8 pps4_device::M()
{
+ UINT8 ret = m_data->read_byte(m_B & ~m_SAG);
+ m_SAG = 0;
+ return ret;
}
-offs_t pps4_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+/**
+ * @brief pps4_device::W Write to the memory address at B
+ * @return ROM/RAM(B)
+ */
+void pps4_device::W(UINT8 data)
{
- extern CPU_DISASSEMBLE( pps4 );
- return CPU_DISASSEMBLE_NAME(pps4)(this, buffer, pc, oprom, opram, options);
+ m_data->write_byte(m_B & ~m_SAG, data);
+ m_SAG = 0;
}
+offs_t pps4_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ extern CPU_DISASSEMBLE( pps4 );
+ return CPU_DISASSEMBLE_NAME(pps4)(this, buffer, pc, oprom, opram, options);
+}
+/**
+ * @brief pps4_device::ROP Read the next opcode (instruction)
+ * The previous opcode mask (upper four bits) is set from the
+ * previous instruction. The new opcode is fetched and the
+ * program counter is incremented. The icount is decremented.
+ * @return m_I the next opcode
+ */
inline UINT8 pps4_device::ROP()
{
- UINT8 retVal = m_direct->read_decrypted_byte(m_P.w.l);
- m_P.w.l = (m_P.w.l + 1) & 0x0fff;
- return retVal;
+ m_Ip = m_I & 0xf0; // set previous opcode mask
+ m_I = m_direct->read_decrypted_byte(m_P & 0xFFF);
+ m_P = (m_P + 1) & 0xFFF;
+ m_icount -= 1;
+ return m_I;
}
+/**
+ * @brief pps4_device::ARG Read the next argument (instruction 2)
+ * The byte at program counter is read from the unencrypted
+ * direct space. The program count is incremented and the
+ * icount is decremented.
+ * @return m_I2 the next argument
+ */
inline UINT8 pps4_device::ARG()
{
- UINT8 retVal = m_direct->read_raw_byte(m_P.w.l);
- m_P.w.l = (m_P.w.l + 1) & 0x0fff;
- return retVal;
-}
-
-inline void pps4_device::DO_SKIP()
-{
- m_P.w.l = (m_P.w.l + 1) & 0x0fff;
-}
-
-void pps4_device::execute_one(int opcode)
-{
- m_icount -= 1;
- switch (opcode)
- {
- // Arithmetic instructions
- case 0x0b: // AD
- break;
- case 0x0a: // ADC
- break;
- case 0x09: // ADSK
- break;
- case 0x08: // ADCSK
- break;
- case 0x60: case 0x61: case 0x62: case 0x63:
- case 0x64: case 0x66: case 0x67: case 0x68:
- case 0x69: case 0x6a: case 0x6b: case 0x6c:
- case 0x6d: case 0x6e:
- // ADI
- break;
- case 0x65: //DC
- m_A = (m_A + 10) & 0x0f;
- break;
- // Logical instructions
- case 0x0d: // AND
- break;
- case 0x0f: // OR
- break;
- case 0x0c: // EOR
- break;
- case 0x0e: // COMP
- m_A ^= 0x0f;
- break;
- // Data transfer instructions
- case 0x20: // SC
- m_C = 1;
- break;
- case 0x24: //RC
- m_C = 0;
- break;
- case 0x22: // SF1
- m_FF1 = 1;
- break;
- case 0x26: // RF1
- m_FF1 = 0;
- break;
- case 0x21: // SF2
- m_FF2 = 1;
- break;
- case 0x25: // RF2
- m_FF2 = 0;
- break;
- case 0x30: case 0x31: case 0x32: case 0x33:
- case 0x34: case 0x35: case 0x36: case 0x37:
- // LD
- break;
- case 0x38: case 0x39: case 0x3a: case 0x3b:
- case 0x3c: case 0x3d: case 0x3e: case 0x3f:
- // EX
- break;
- case 0x28: case 0x29: case 0x2a: case 0x2b:
- case 0x2c: case 0x2d: case 0x2e: case 0x2f:
- // EXD
- break;
- case 0x70: case 0x71: case 0x72: case 0x73:
- case 0x74: case 0x75: case 0x76: case 0x77:
- case 0x78: case 0x79: case 0x7a: case 0x7b:
- case 0x7c: case 0x7d: case 0x7e: case 0x7f:
- // LDI
- m_A = opcode & 0x0f;
- break;
- case 0x12: // LAX
- m_A = m_X;
- break;
- case 0x1b: // LXA
- m_X = m_A;
- break;
- case 0x11: // LABL
- m_A = m_B.w.l & 0x00f;
- break;
- case 0x10: // LBMX
- m_B.w.l &= 0xf0f;
- m_B.w.l |= (m_X << 4);
- break;
- case 0x04: // LBUA
- break;
- case 0x19: // XABL
- {
- UINT8 tmp = m_B.w.l & 0x00f;
- m_B.w.l &= 0xff0;
- m_B.w.l |= m_A;
- m_A = tmp;
- }
- break;
- case 0x18: // XBMX
- {
- UINT8 tmp = (m_B.w.l & 0x0f0) >> 4;
- m_B.w.l &= 0xf0f;
- m_B.w.l |= (m_X << 4);
- m_X = tmp;
- }
- break;
- case 0x1a: // XAX
- {
- UINT8 tmp = m_A;
- m_A = m_X;
- m_X = tmp;
- }
- break;
- case 0x06: // XS
- {
- PAIR tmp = m_SA;
- m_SA = m_SB;
- m_SB = tmp;
- }
- break;
- case 0x6f: // CYS
- break;
- case 0xc0: case 0xc1: case 0xc2: case 0xc3:
- case 0xc4: case 0xc5: case 0xc6: case 0xc7:
- case 0xc8: case 0xc9: case 0xca: case 0xcb:
- case 0xcc: case 0xcd: case 0xce: case 0xcf:
- // LB
- {
- //UINT8 tmp = ARG();
- m_icount -= 1;
- }
- break;
- case 0x00: // LBL
- {
- UINT8 tmp = ARG();
- m_icount -= 1;
- m_B.w.l = tmp;
- }
- break;
- case 0x17: // INCB
- if ((m_B.w.l & 0x0f) == 0x0f) {
- m_B.w.l &= 0xff0;
- DO_SKIP();
- } else {
- m_B.w.l += 1;
- }
- break;
- case 0x1f: // DECB
- if ((m_B.w.l & 0x0f) == 0x00) {
- m_B.w.l |= 0x00f;
- DO_SKIP();
- } else {
- m_B.w.l -= 1;
- }
- break;
- // Control transfer instructions
- case 0x80: case 0x81: case 0x82: case 0x83:
- case 0x84: case 0x85: case 0x86: case 0x87:
- case 0x88: case 0x89: case 0x8a: case 0x8b:
- case 0x8c: case 0x8d: case 0x8e: case 0x8f:
- case 0x90: case 0x91: case 0x92: case 0x93:
- case 0x94: case 0x95: case 0x96: case 0x97:
- case 0x98: case 0x99: case 0x9a: case 0x9b:
- case 0x9c: case 0x9d: case 0x9e: case 0x9f:
- case 0xa0: case 0xa1: case 0xa2: case 0xa3:
- case 0xa4: case 0xa5: case 0xa6: case 0xa7:
- case 0xa8: case 0xa9: case 0xaa: case 0xab:
- case 0xac: case 0xad: case 0xae: case 0xaf:
- case 0xb0: case 0xb1: case 0xb2: case 0xb3:
- case 0xb4: case 0xb5: case 0xb6: case 0xb7:
- case 0xb8: case 0xb9: case 0xba: case 0xbb:
- case 0xbc: case 0xbd: case 0xbe: case 0xbf:
- // T
- m_P.w.l = (m_P.w.l & 0xfc0) | (opcode & 0x3f);
- break;
- case 0xd0: case 0xd1: case 0xd2: case 0xd3:
- case 0xd4: case 0xd5: case 0xd6: case 0xd7:
- case 0xd8: case 0xd9: case 0xda: case 0xdb:
- case 0xdc: case 0xdd: case 0xde: case 0xdf:
- case 0xe0: case 0xe1: case 0xe2: case 0xe3:
- case 0xe4: case 0xe5: case 0xe6: case 0xe7:
- case 0xe8: case 0xe9: case 0xea: case 0xeb:
- case 0xec: case 0xed: case 0xee: case 0xef:
- case 0xf0: case 0xf1: case 0xf2: case 0xf3:
- case 0xf4: case 0xf5: case 0xf6: case 0xf7:
- case 0xf8: case 0xf9: case 0xfa: case 0xfb:
- case 0xfc: case 0xfd: case 0xfe: case 0xff:
- // TM
- break;
- case 0x50: case 0x51: case 0x52: case 0x53:
- case 0x54: case 0x55: case 0x56: case 0x57:
- case 0x58: case 0x59: case 0x5a: case 0x5b:
- case 0x5c: case 0x5d: case 0x5e: case 0x5f:
- // TL
- {
- //UINT8 tmp = ARG();
- m_icount -= 1;
- }
- break;
- case 0x01: case 0x02: case 0x03:
- // TML
- {
- //UINT8 tmp = ARG();
- m_icount -= 1;
- }
- break;
- case 0x15: // SKC
- break;
- case 0x1e: // SKZ
- break;
- case 0x40: case 0x41: case 0x42: case 0x43:
- case 0x44: case 0x45: case 0x46: case 0x47:
- case 0x48: case 0x49: case 0x4a: case 0x4b:
- case 0x4c: case 0x4d: case 0x4e: case 0x4f:
- // SKBI
- break;
- case 0x16: // SKF1
- break;
- case 0x14: // SKF2
- break;
- case 0x05: // RTN
- break;
- case 0x07: // RTNSK
- break;
- // Input/Output instructions
- case 0x1c: // IOL
- {
- //UINT8 tmp = ARG();
- m_icount -= 1;
- }
- break;
- case 0x27: // DIA
- break;
- case 0x23: // DIB
- break;
- case 0x1d: // DOA
- break;
- // Special instructions
- case 0x13: // SAG
- break;
- }
+ m_I2 = m_direct->read_raw_byte(m_P & 0xFFF);
+ m_P = (m_P + 1) & 0xFFF;
+ m_icount -= 1;
+ return m_I2;
+}
+
+/**
+ * @brief Note3
+ *
+ * Instructions ADI, LD, EX, EXD, LDI, LB and LBL have a numeric
+ * value coded as part of the instruction in the immediate field.
+ * This numeric value must be in complementary form on the bus.
+ * All of these immediate fields which are inverted are shown
+ * in brackets.
+ * For example: ADI 1, as written by the programmer who wishes
+ * to add one to the value in the accumulator, is converted to
+ * 0x6E = 01001 [1110]; the bracketed binary value is the value
+ * as seen on the data bus.
+ * If the programmer is using the Rockwell Assembler he does not
+ * have to manually determine the proper inverted value as the
+ * assembler does this for him.
+ *
+ * [And we do in MAME as well :-]
+ */
+
+/**
+ * @brief pps4_device::iAD Add
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1011 1 cyc AD
+ *
+ * Symbolic equation
+ * -----------------------------
+ * C, A <- A + M
+ *
+ * The result of the binary addition of contents of accumulator
+ * and 4-bit contents of RAM currently addressed by B register,
+ * replaces the contents of the accumulator. The resulting
+ * carry-out is loaded into C flip-flop.
+ */
+void pps4_device::iAD()
+{
+ m_A = m_A + M();
+ m_C = (m_A >> 4) & 1;
+ m_A = m_A & 15;
+}
+
+/**
+ * @brief pps4_device::iADC Add with carry-in
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1010 1 cyc ADC
+ *
+ * Symbolic equation
+ * -----------------------------
+ * C, A <- A + M + C
+ *
+ * Same as AD except the C flip-flop serves as a carry-in
+ * to the adder.
+ */
+void pps4_device::iADC()
+{
+ m_A = m_A + M() + m_C;
+ m_C = m_A >> 4;
+ m_A = m_A & 15;
+}
+
+/**
+ * @brief pps4_device::iADSK Add and skip if carry-out
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1001 1 cyc ADSK
+ *
+ * Symbolic equation
+ * -----------------------------
+ * C, A <- A + M
+ * Skip if C = 1
+ *
+ * Same as AD except the next ROM word will be
+ * skipped (ignored) if a carry-out is generated.
+ */
+void pps4_device::iADSK()
+{
+ m_A = m_A + M();
+ m_C = m_A >> 4;
+ m_Skip = m_C;
+ m_A = m_A & 15;
+}
+
+/**
+ * @brief pps4_device::iADCSK Add with carry-in and skip if carry-out
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1000 1 cyc ADCSK
+ *
+ * Symbolic equation
+ * -----------------------------
+ * C, A <- A + M + C
+ * Skip if C = 1
+ *
+ * Same as ADC except the next ROM word will be
+ * skipped (ignored) if a carry-out is generated.
+ */
+void pps4_device::iADCSK()
+{
+ m_A = m_A + M() + m_C;
+ m_C = m_A >> 4;
+ m_Skip = m_C;
+ m_A = m_A & 15;
+}
+
+/**
+ * @brief pps4_device::iADI Add immediate
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0110 xxxx 1 cyc ADI x
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- A + [I(4:1)]
+ *
+ * The result of the binary addition of contents of
+ * accumulator and 4-bit immediate field of instruction
+ * word replaces the contents of accumulator.
+ * The next ROM word will be skipped (ignored) if a
+ * carry-out is generated.
+ * __ The instruction does not use or change the C flip-flop. __
+ * The immediate field I(4:1) of this instruction may not
+ * be equal to binary 0 (CYS) or 0101 (DC)
+ *
+ * See %Note3
+ */
+void pps4_device::iADI()
+{
+ const UINT8 imm = ~m_I & 15;
+ m_A = m_A + imm;
+ m_Skip = (m_A >> 4) & 1;
+ m_A = m_A & 15;
+}
+
+/**
+ * @brief pps4_device::iDC Decimal correction
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0110 0101 1 cyc DC
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- A + 1010
+ *
+ * Decimal correction of accumulator.
+ * Binary 1010 is added to the contents of the accumulator.
+ * Result is stored in accumulator. Instruction does not
+ * use or change carry flip-flop or skip.
+ */
+void pps4_device::iDC()
+{
+ m_A = m_A + 10;
+}
+
+/**
+ * @brief pps4_device::iAND Logical AND
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1101 1 cyc AND
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- A & M
+ *
+ * The result of logical AND of accumulator and
+ * 4-bit contents of RAM currently addressed by
+ * B register replaces contents of accumulator.
+ */
+void pps4_device::iAND()
+{
+ m_A = m_A & M();
+}
+
+/**
+ * @brief pps4_device::iOR Logical OR
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1111 1 cyc OR
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- A | M
+ *
+ * The result of logical OR of accumulator and
+ * 4-bit contents of RAM currently addressed by
+ * B register replaces contents of accumulator.
+ */
+void pps4_device::iOR()
+{
+ m_A = m_A | M();
+}
+
+/**
+ * @brief pps4_device::iEOR Logical exclusive-OR
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1100 1 cyc EOR
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- A ^ M
+ *
+ * The result of logical exclusive-OR of
+ * accumulator and 4-bit contents of RAM
+ * currently addressed by B register
+ * replaces contents of accumulator.
+ */
+void pps4_device::iEOR()
+{
+ m_A = m_A ^ M();
+}
+
+/**
+ * @brief pps4_device::iCOMP Complement
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 1110 1 cyc COMP
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- ~A
+ *
+ * Each bit of the accumulator is logically
+ * complemented and placed in accumulator.
+ */
+void pps4_device::iCOMP()
+{
+ m_A = m_A ^ 15;
+}
+
+/**
+ * @brief pps4_device::iSC Set carry flip-flop
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0000 1 cyc SC
+ *
+ * Symbolic equation
+ * -----------------------------
+ * C <- 1
+ *
+ * The C flip-flop is set to 1.
+ */
+void pps4_device::iSC()
+{
+ m_C = 1;
+}
+
+/**
+ * @brief pps4_device::iRC Reset carry flip-flop
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0100 1 cyc RC
+ *
+ * Symbolic equation
+ * -----------------------------
+ * C <- 0
+ *
+ * The C flip-flop is set to 0.
+ */
+void pps4_device::iRC()
+{
+ m_C = 0;
}
+/**
+ * @brief pps4_device::iSF1 Set flip-flop FF1
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0010 1 cyc SF1
+ *
+ * Symbolic equation
+ * -----------------------------
+ * FF1 <- 1
+ *
+ * The Flip-flop FF1 is set to 1.
+ */
+void pps4_device::iSF1()
+{
+ m_FF1 = 1;
+}
+
+/**
+ * @brief pps4_device::iRF1 Reset flip-flop FF1
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0110 1 cyc RF1
+ *
+ * Symbolic equation
+ * -----------------------------
+ * FF1 <- 0
+ *
+ * The Flip-flop FF1 is set to 0.
+ */
+void pps4_device::iRF1()
+{
+ m_FF1 = 0;
+}
+
+/**
+ * @brief pps4_device::iSF2 Set flip-flop FF2
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0001 1 cyc SF2
+ *
+ * Symbolic equation
+ * -----------------------------
+ * FF2 <- 1
+ *
+ * The Flip-flop FF2 is set to 1.
+ */
+void pps4_device::iSF2()
+{
+ m_FF2 = 1;
+}
+
+/**
+ * @brief pps4_device::iRF2 Reset flip-flop FF2
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0101 1 cyc RF2
+ *
+ * Symbolic equation
+ * -----------------------------
+ * FF2 <- 0
+ *
+ * The flip-flop FF2 is set to 0.
+ */
+void pps4_device::iRF2()
+{
+ m_FF2 = 0;
+}
+
+/**
+ * @brief pps4_device::iLD Load accumulator from memory
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0011 0xxx 1 cyc LD x
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- M
+ * B(7:5) <- B(7:5) ^ [I(3:1)]
+ *
+ * The 4-bit contents of RAM currently addressed
+ * by B register are placed in the accumulator.
+ * The RAM address in the B register is then
+ * modified by the result of an exclusive-OR of
+ * the 3-b it immediate field I(3:1) and B(7:5)
+ *
+ * See %Note3
+ */
+void pps4_device::iLD()
+{
+ const UINT16 i3c = ~m_I & 7;
+ m_A = M();
+ m_B = m_B ^ (i3c << 4);
+}
+
+/**
+ * @brief pps4_device::iEX Exchange accumulator and memory
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0011 1xxx 1 cyc EX x
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <-> M
+ * B(7:5) <- B(7:5) ^ [I(3:1)]
+ *
+ * The same as LD except the contents of accumulator
+ * are also placed in currently addressed RAM location.
+ *
+ * See %Note3
+ */
+void pps4_device::iEX()
+{
+ const UINT16 i3c = ~m_I & 7;
+ const UINT8 mem = M();
+ W(m_A);
+ m_A = mem;
+ m_B = m_B ^ (i3c << 4);
+}
+
+/**
+ * @brief pps4_device::iEXD Exchange accumulator and memory and decrement BL
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 1xxx 1 cyc EXD x
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <-> M
+ * B(7:5) <- B(7:5) ^ [I(3:1)]
+ * BL <- BL - 1
+ * Skip on BL = 1111b
+ *
+ * The same as EX except RAM address in B register
+ * is further modified by decrementing BL by 1.
+ * If the new contents of BL is 1111, the next
+ * ROM word will be ignored.
+ *
+ * See %Note3
+ */
+void pps4_device::iEXD()
+{
+ const UINT8 i3c = ~m_I & 7;
+ const UINT8 mem = M();
+ UINT8 bl = m_B & 15;
+ W(m_A);
+ m_A = mem;
+ m_B = m_B ^ (i3c << 4);
+ // if decrement BL wraps to 1111b
+ if (0 == bl) {
+ bl = 15;
+ m_Skip = 1;
+ } else {
+ bl = bl - 1;
+ }
+ m_B = (m_B & ~15) | bl;
+}
+
+/**
+ * @brief pps4_device::iLDI Load accumualtor immediate
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0111 xxxx 1 cyc LDI x
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- [I(4:1)]
+ *
+ * The 4-bit contents, immediate field I(4:1),
+ * of the instruction are placed in the accumulator.
+ *
+ * Note: Only the first occurence of an LDI in a consecutive
+ * string of LDIs will be executed. The program will ignore
+ * remaining LDIs and execute next valid instruction.
+ *
+ * See %Note3
+ */
+void pps4_device::iLDI()
+{
+ // previous LDI instruction?
+ if (0x70 == m_Ip) {
+ LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
+ return;
+ }
+ m_A = ~m_I & 15;
+}
+
+/**
+ * @brief pps4_device::iLAX
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 0010 1 cyc LAX
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- X
+ *
+ * The 4-bit contents of the X register are
+ * placed in the accumulator.
+ */
+void pps4_device::iLAX()
+{
+ m_A = m_X;
+}
+
+/**
+ * @brief pps4_device::iLXA
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1011 1 cyc LXA
+ *
+ * Symbolic equation
+ * -----------------------------
+ * X <- A
+ *
+ * The contents of the accumulator are
+ * tansferred to the X register.
+ */
+void pps4_device::iLXA()
+{
+ m_X = m_A;
+}
+
+/**
+ * @brief pps4_device::iLABL
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 0001 1 cyc LABL
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- BL
+ *
+ * The contents of BL register are
+ * tansferred to the accumulator.
+ */
+void pps4_device::iLABL()
+{
+ m_A = m_B & 15;
+}
+
+/**
+ * @brief pps4_device::iLBMX
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 0000 1 cyc LBMX
+ *
+ * Symbolic equation
+ * -----------------------------
+ * BM <- X
+ *
+ * The contents of X register are
+ * tansferred to BM register.
+ */
+void pps4_device::iLBMX()
+{
+ m_B = (m_B & ~(15 << 4)) | (m_X << 4);
+}
+
+/**
+ * @brief pps4_device::iLBUA
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 0100 1 cyc LBUA
+ *
+ * Symbolic equation
+ * -----------------------------
+ * BU <- A
+ * A <- M
+ *
+ * The contents of accumulator are tansferred to
+ * BU register. Also, the contents of the currently
+ * addressed RAM are transferred to accumulator.
+ */
+void pps4_device::iLBUA()
+{
+ m_B = (m_B & ~(15 << 8)) | (m_A << 8);
+ m_A = M();
+}
+
+/**
+ * @brief pps4_device::iXABL
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1001 1 cyc XABL
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <-> BL
+ *
+ * The contents of accumulator and BL register
+ * are exchanged.
+ */
+void pps4_device::iXABL()
+{
+ // swap A and BL
+ UINT8 bl = m_B & 15;
+ m_B = (m_B & ~15) | m_A;
+ m_A = bl;
+}
+
+/**
+ * @brief pps4_device::iXMBX
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1000 1 cyc XMBX
+ *
+ * Symbolic equation
+ * -----------------------------
+ * X <-> BM
+ *
+ * The contents of accumulator and BL register
+ * are exchanged.
+ */
+void pps4_device::iXBMX()
+{
+ // swap X and BM
+ const UINT8 bm = (m_B >> 4) & 15;
+ m_B = (m_B & ~(15 << 4)) | (m_X << 4);
+ m_X = bm;
+}
+
+/**
+ * @brief pps4_device::iXAX
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1010 1 cyc XAX
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <-> X
+ *
+ * The contents of accumulator and X register
+ * are exchanged.
+ */
+void pps4_device::iXAX()
+{
+ // swap A and X
+ m_A ^= m_X;
+ m_X ^= m_A;
+ m_A ^= m_X;
+}
+
+/**
+ * @brief pps4_device::iXS
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 0110 1 cyc XS
+ *
+ * Symbolic equation
+ * -----------------------------
+ * SA <-> SB
+ *
+ * The 12-bit contents of SA and SB register
+ * are exchanged.
+ */
+void pps4_device::iXS()
+{
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
+}
+
+/**
+ * @brief pps4_device::iCYS
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0110 1111 1 cyc CYS
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- SA(4:1)
+ * SA(4:1) <- SA(8:5)
+ * SA(8:5) <- SA(12:9)
+ * SA(12:9) <- A
+ *
+ * A 4-bit right shift of the SA register takes place
+ * with the four bits which are shifted off the end
+ * of SA being transferred into the accumulator.
+ * The contents of the accumulator are placed in the
+ * left end of the SA register
+ *
+ */
+void pps4_device::iCYS()
+{
+ const UINT16 sa = (m_SA >> 4) | (m_A << 8);
+ m_A = m_SA & 15;
+ m_SA = sa;
+}
+
+/**
+ * @brief pps4_device::iLB
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 1100 xxxx 2 cyc LB x
+ *
+ * Symbolic equation
+ * -----------------------------
+ * SB <- SA, SA <- P
+ * P(12:5) <- 0000 1100
+ * P(4:1) <- I(4:1)
+ *
+ * BU <- 0000
+ * B(8:1) <- [I2(8:1)]
+ * P <- SA, SA <-> SB
+ *
+ * Sixteen consecutive locations on ROM page 3 (I2) contain
+ * data which can be loaded into the eight least significant
+ * bits of the B register by use of any LB instruction.
+ * The four most significant bits of B register will be loaded
+ * with zeros. The contents of the SB register will be destroyed.
+ * This instruction takes two cycles to execute but occupies
+ * only one ROM word. (Automatic return)
+ *
+ * Only the first occurence of an LB or LBL instruction in a
+ * consecutive string of LB or LBL will be executed. The
+ * program will ignore the remaining LB or LBL and execute
+ * the next valid instruction. Within subroutines the LB
+ * instruction must be used with caution because the contents
+ * of SB have been modified.
+ *
+ * See %Note3 and %Note4
+ */
+void pps4_device::iLB()
+{
+ // previous LB or LBL instruction?
+ if (0xc0 == m_Ip|| 0x00 == m_Ip) {
+ LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
+ return;
+ }
+ m_SB = m_SA;
+ m_SA = (m_P + 1) & 0xFFF;
+ m_P = (3 << 6) | (m_I & 15);
+ m_B = ~ARG() & 255;
+ m_P = m_SA;
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
+}
+
+/**
+ * @brief pps4_device::iLBL
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 0000 2 cyc LBL
+ *
+ * Symbolic equation
+ * -----------------------------
+ * BU <- 0000
+ * B(8:1) <- [I2(8:1)]
+ *
+ * This instruction occupies two ROM words, the second of
+ * which will be loaded into the eight least significant
+ * bits of the B register. The four most significant bits
+ * of B (BU) will be loaded with zeroes.
+ *
+ * Only the first occurence of an LB or LBL instruction in a
+ * consecutive string of LB or LBL will be executed. The
+ * program will ignore the remaining LB or LBL and execute
+ * the next valid instruction.
+ *
+ * See %Note3
+ */
+void pps4_device::iLBL()
+{
+ const UINT8 i8 = ~ARG() & 255;
+ // previous LB or LBL instruction?
+ if (0xc0 == m_Ip || 0x00 == m_Ip) {
+ LOG(("%s: skip prev:%02x op:%02x\n", __FUNCTION__, m_Ip, m_I));
+ return;
+ }
+ m_B = i8;
+}
+
+/**
+ * @brief pps4_device::INCB
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 0111 1 cyc INCB
+ *
+ * Symbolic equation
+ * -----------------------------
+ * BL <- BL + 1
+ * Skip on BL = 0000
+ *
+ * BL register (least significant four bits of B register)
+ * is incremented by 1. If the new contents of BL is 0000b,
+ * then the next ROM word will be ignored.
+ */
+void pps4_device::iINCB()
+{
+ UINT8 bl = m_B & 15;
+ bl = (bl + 1) & 15;
+ if (0 == bl) {
+ LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
+ m_Skip = 1;
+ }
+ m_B = (m_B & ~15) | bl;
+}
+
+/**
+ * @brief pps4_device::iDECB
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1111 1 cyc DECB
+ *
+ * Symbolic equation
+ * -----------------------------
+ * BL <- BL - 1
+ * Skip on BL = 1111
+ *
+ * BL register is decremented by 1. If the new
+ * contents of BL is 1111b, then the next ROM
+ * word will be ignored.
+ */
+void pps4_device::iDECB()
+{
+ UINT8 bl = m_B & 15;
+ bl = (bl - 1) & 15;
+ if (15 == bl) {
+ LOG(("%s: skip BL=%x\n", __FUNCTION__, bl));
+ m_Skip = 1;
+ }
+ m_B = (m_B & ~15) | bl;
+}
+
+/**
+ * @brief pps4_device::iT Transfer
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 10xx xxxx 1 cyc T *xx
+ *
+ * Symbolic equation
+ * -----------------------------
+ * P(6:1) <- I(6:1)
+ *
+ * An unconditional transfer to a ROM word on the current
+ * page takes place. The least significant 6-bits of P
+ * register P(6:1) are replaced by six bit immediate
+ * field I(6:1)
+ */
+void pps4_device::iT()
+{
+ const UINT16 p = (m_P & ~63) | (m_I & 63);
+ LOG(("%s: P=%03x I=%02x -> P=%03x\n", __FUNCTION__, m_P, m_I, p));
+ m_P = p;
+}
+
+/**
+ * @brief pps4_device::iTM Transfer and mark indirect
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 11xx xxxx 2 cyc TM x
+ * yyyy yyyy from page 3
+ *
+ * Symbolic equation
+ * -----------------------------
+ * SB <- SA, SA <- P
+ * P(12:7) <- 000011
+ * P(6:1) <- I1(6:1)
+ *
+ * P(12:9) <- 0001
+ * P(8:1) <- I2(8:1)
+ *
+ * 48 consecutive locations on ROM page 3 contains pointer data
+ * which indentify subroutine entry addresses. These subroutine
+ * entry addresses are limited to pages 4 through 7. This TM
+ * instruction will save the address of the next ROM word in
+ * the SA register after loading the original contents of SA
+ * into SB. A transfer then occurs to one of the subroutine
+ * entry addresses. This instruction occupies one ROM word
+ * but takes two cycles for execution.
+ */
+void pps4_device::iTM()
+{
+ m_SB = m_SA;
+ m_SA = m_P;
+ m_P = (3 << 6) | (m_I & 63);
+ m_I2 = ARG();
+ m_P = (1 << 8) | m_I2;
+}
+
+/**
+ * @brief pps4_device::iTL Transfer long
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0101 xxxx 2 cyc TL xyy
+ * yyyy yyyy
+ *
+ * Symbolic equation
+ * -----------------------------
+ * P(12:9) <- I1(4:1)
+ * P(8:1) <- I2(8:1)
+ *
+ * The instruction executes a transfer to any ROM word on any
+ * page. It occupies two ROM words an requires two cycles for
+ * execution. The first byte loads P(12:9) with field I1(4:1)
+ * and then the second byte I2(8:1) is placed in P(8:1).
+ */
+void pps4_device::iTL()
+{
+ m_I2 = ARG();
+ m_P = ((m_I & 15) << 8) | m_I2;
+}
+
+/**
+ * @brief pps4_device::iTML Transfer and mark long
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0101 xxxx 2 cyc TML xyy
+ * yyyy yyyy
+ *
+ * Symbolic equation
+ * -----------------------------
+ * SB <- SA, SA <- P
+ * P(12:9) <- I1(4:1)
+ * P(8:1) <- I2(8:1)
+ *
+ * Note I1(2:1) != 00
+ *
+ * This instruction executes a transfer and mark to any
+ * location on ROM pages 4 through 15. It occupies two
+ * ROM words and requires two cycle times for execution.
+ */
+void pps4_device::iTML()
+{
+ m_I2 = ARG();
+ m_SB = m_SA;
+ m_SA = m_P;
+ m_P = ((m_I & 15) << 8) | m_I2;
+}
+
+/**
+ * @brief pps4_device::iSKC Skip on carry flip-flop
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 0101 1 cyc SKC
+ *
+ * Symbolic equation
+ * -----------------------------
+ * Skip if C = 1
+ *
+ * The next ROM word will be ignored if C flip-flop is 1.
+ */
+void pps4_device::iSKC()
+{
+ m_Skip = m_C;
+}
+
+/**
+ * @brief pps4_device::iSKC Skip on carry flip-flop
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1110 1 cyc SKZ
+ *
+ * Symbolic equation
+ * -----------------------------
+ * Skip if A = 0
+ *
+ * The next ROM word will be ignored if C flip-flop is 1.
+ */
+void pps4_device::iSKZ()
+{
+ m_Skip = (0 == m_A) ? 1 : 0;
+}
+
+/**
+ * @brief pps4_device::iSKBI Skip if BL equal to immediate
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0100 xxxx 1 cyc SKBI x
+ *
+ * Symbolic equation
+ * -----------------------------
+ * Skip if BL = I(4:1)
+ *
+ * The next ROM word will be ignored if the least significant
+ * four bits of B register (BL) is equal to the 4-bit immediate
+ * field I(4:1) of instruction.
+ */
+void pps4_device::iSKBI()
+{
+ const UINT8 i4 = m_I & 15;
+ const UINT8 bl = m_B & 15;
+ m_Skip = bl == i4 ? 1 : 0;
+}
+
+/**
+ * @brief pps4_device::iSKF1 Skip if FF1 equals 1
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 0110 1 cyc SKF1
+ *
+ * Symbolic equation
+ * -----------------------------
+ * Skip if FF1 = 1
+ */
+void pps4_device::iSKF1()
+{
+ m_Skip = m_FF1;
+}
+
+/**
+ * @brief pps4_device::iSKF2 Skip if FF2 equals 1
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 0100 1 cyc SKF2
+ *
+ * Symbolic equation
+ * -----------------------------
+ * Skip if FF2 = 1
+ */
+void pps4_device::iSKF2()
+{
+ m_Skip = m_FF2;
+}
+
+/**
+ * @brief pps4_device::iRTN Return
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 0101 1 cyc RTN
+ *
+ * Symbolic equation
+ * -----------------------------
+ * P <- SA, SA <-> SB
+ *
+ * This instruction executes a return from subroutine
+ * by loading contents of SA register into P register
+ * and interchanges the SB and SA registers.
+ */
+void pps4_device::iRTN()
+{
+ m_P = m_SA & 0xFFF;
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
+}
+
+/**
+ * @brief pps4_device::iRTN Return
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0000 0111 1 cyc RTNSK
+ *
+ * Symbolic equation
+ * -----------------------------
+ * P <- SA, SA <-> SB
+ * P <- P + 1
+ *
+ * Same as RTN except the first ROM word encountered
+ * after the return from subroutine is skipped.
+ */
+void pps4_device::iRTNSK()
+{
+ m_P = m_SA & 0xFFF;
+ // swap SA and SB
+ m_SA ^= m_SB;
+ m_SB ^= m_SA;
+ m_SA ^= m_SB;
+ m_Skip = 1; // next opcode is ignored
+}
+
+/**
+ * @brief pps4_device::IOL
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1100 2 cyc IOL yy
+ * yyyy yyyy
+ *
+ * Symbolic equation
+ * -----------------------------
+ * ~A -> Data Bus
+ * A <- ~Data Bus
+ * I2 -> I/O device
+ *
+ * This instruction occupies two ROM words and requires two
+ * cycles for execution. The first ROM word is received by
+ * the CPU and sets up the I/O enable signal. The second
+ * ROM word is then received by the I/O devices and decoded
+ * for address and command. The contents of the accumulator
+ * inverted are placed on the data lines for acceptance by
+ * the I/O. At the same time, input data received by the I/O
+ * device is transferred to the accumulator inverted.
+ */
+void pps4_device::iIOL()
+{
+ const UINT8 ac = ~m_A & 15;
+ m_I2 = ARG();
+ m_io->write_byte(m_I2, ac);
+ LOG(("%s: port:%02x <- %x\n", __FUNCTION__, m_I2, ac));
+ m_A = ~m_io->read_byte(m_I2) & 15;
+ LOG(("%s: port:%02x -> %x\n", __FUNCTION__, m_I2, m_A));
+}
+
+/**
+ * @brief pps4_device::iDIA Discrete input group A
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0111 1 cyc DIA
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- DIA
+ *
+ * Data at the inputs to discrete group A is
+ * transferred to the accumulator.
+ */
+void pps4_device::iDIA()
+{
+ m_A = m_io->read_byte(PPS4_PORT_A) & 15;
+}
+
+/**
+ * @brief pps4_device::iDIB Discrete input group B
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 0011 1 cyc DIB
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A <- DIB
+ *
+ * Data at the inputs to discrete group B is
+ * transferred to the accumulator.
+ */
+void pps4_device::iDIB()
+{
+ m_A = m_io->read_byte(PPS4_PORT_B) & 15;
+}
+
+/**
+ * @brief pps4_device::iDOA Discrete output
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0001 1101 1 cyc DOA
+ *
+ * Symbolic equation
+ * -----------------------------
+ * DOA <- A
+ *
+ * The contents of the accumulator are transferred
+ * to the discrete output register.
+ */
+void pps4_device::iDOA()
+{
+ m_io->write_byte(PPS4_PORT_A, m_A);
+}
+
+/**
+ * @brief pps4_device::iSAG Special address generation
+ * OPCODE cycles mnemonic
+ * -----------------------------
+ * 0010 1101 1 cyc SAG
+ *
+ * Symbolic equation
+ * -----------------------------
+ * A/B Bus (12:5) <- 0000 0000
+ * A/B Bus (4:1) <- BL(4:1)
+ * Contents of B remains unchanged
+ *
+ * The instruction causes the eight most significant bits
+ * of the RAM address output to be zeroed during the next
+ * cycle only. Note that this instruction does not alter
+ * the contents of the B register.
+ */
+void pps4_device::iSAG()
+{
+ // mask bits 12:5 on next memory access
+ m_SAG = 0xff0;
+}
/***************************************************************************
COMMON EXECUTION
***************************************************************************/
+void pps4_device::execute_one()
+{
+ m_I = ROP();
+ if (m_Skip) {
+ m_Skip = 0;
+ LOG(("%s: skip op:%02x\n", __FUNCTION__, m_I));
+ return;
+ }
+ switch (m_I) {
+ case 0x00:
+ iLBL();
+ break;
+ case 0x01:
+ iTML();
+ break;
+ case 0x02:
+ iTML();
+ break;
+ case 0x03:
+ iTML();
+ break;
+ case 0x04:
+ iLBUA();
+ break;
+ case 0x05:
+ iRTN();
+ break;
+ case 0x06:
+ iXS();
+ break;
+ case 0x07:
+ iRTNSK();
+ break;
+ case 0x08:
+ iADCSK();
+ break;
+ case 0x09:
+ iADSK();
+ break;
+ case 0x0a:
+ iADC();
+ break;
+ case 0x0b:
+ iAD();
+ break;
+ case 0x0c:
+ iEOR();
+ break;
+ case 0x0d:
+ iAND();
+ break;
+ case 0x0e:
+ iCOMP();
+ break;
+ case 0x0f:
+ iOR();
+ break;
+
+ case 0x10:
+ iLBMX();
+ break;
+ case 0x11:
+ iLABL();
+ break;
+ case 0x12:
+ iLAX();
+ break;
+ case 0x13:
+ iSAG();
+ break;
+ case 0x14:
+ iSKF2();
+ break;
+ case 0x15:
+ iSKC();
+ break;
+ case 0x16:
+ iSKF1();
+ break;
+ case 0x17:
+ iINCB();
+ break;
+ case 0x18:
+ iXBMX();
+ break;
+ case 0x19:
+ iXABL();
+ break;
+ case 0x1a:
+ iXAX();
+ break;
+ case 0x1b:
+ iLXA();
+ break;
+ case 0x1c:
+ iIOL();
+ break;
+ case 0x1d:
+ iDOA();
+ break;
+ case 0x1e:
+ iSKZ();
+ break;
+ case 0x1f:
+ iDECB();
+ break;
+
+ case 0x20:
+ iSC();
+ break;
+ case 0x21:
+ iSF2();
+ break;
+ case 0x22:
+ iSF1();
+ break;
+ case 0x23:
+ iDIB();
+ break;
+ case 0x24:
+ iRC();
+ break;
+ case 0x25:
+ iRF2();
+ break;
+ case 0x26:
+ iRF1();
+ break;
+ case 0x27:
+ iDIA();
+ break;
+
+ case 0x28: case 0x29: case 0x2a: case 0x2b:
+ case 0x2c: case 0x2d: case 0x2e: case 0x2f:
+ iEXD();
+ break;
+
+ case 0x30: case 0x31: case 0x32: case 0x33:
+ case 0x34: case 0x35: case 0x36: case 0x37:
+ iLD();
+ break;
+
+ case 0x38: case 0x39: case 0x3a: case 0x3b:
+ case 0x3c: case 0x3d: case 0x3e: case 0x3f:
+ iEX();
+ break;
+
+ case 0x40: case 0x41: case 0x42: case 0x43:
+ case 0x44: case 0x45: case 0x46: case 0x47:
+ case 0x48: case 0x49: case 0x4a: case 0x4b:
+ case 0x4c: case 0x4d: case 0x4e: case 0x4f:
+ iSKBI();
+ break;
+
+ case 0x50: case 0x51: case 0x52: case 0x53:
+ case 0x54: case 0x55: case 0x56: case 0x57:
+ case 0x58: case 0x59: case 0x5a: case 0x5b:
+ case 0x5c: case 0x5d: case 0x5e: case 0x5f:
+ iTL();
+ break;
+
+ case 0x65:
+ iDC();
+ break;
+
+ case 0x60: case 0x61: case 0x62: case 0x63:
+ case 0x64: case 0x66: case 0x67:
+ case 0x68: case 0x69: case 0x6a: case 0x6b:
+ case 0x6c: case 0x6d: case 0x6e:
+ iADI();
+ break;
+
+ case 0x6f:
+ iCYS();
+ break;
+
+ case 0x70: case 0x71: case 0x72: case 0x73:
+ case 0x74: case 0x75: case 0x76: case 0x77:
+ case 0x78: case 0x79: case 0x7a: case 0x7b:
+ case 0x7c: case 0x7d: case 0x7e: case 0x7f:
+ iLDI();
+ break;
+
+ case 0x80: case 0x81: case 0x82: case 0x83:
+ case 0x84: case 0x85: case 0x86: case 0x87:
+ case 0x88: case 0x89: case 0x8a: case 0x8b:
+ case 0x8c: case 0x8d: case 0x8e: case 0x8f:
+ case 0x90: case 0x91: case 0x92: case 0x93:
+ case 0x94: case 0x95: case 0x96: case 0x97:
+ case 0x98: case 0x99: case 0x9a: case 0x9b:
+ case 0x9c: case 0x9d: case 0x9e: case 0x9f:
+ case 0xa0: case 0xa1: case 0xa2: case 0xa3:
+ case 0xa4: case 0xa5: case 0xa6: case 0xa7:
+ case 0xa8: case 0xa9: case 0xaa: case 0xab:
+ case 0xac: case 0xad: case 0xae: case 0xaf:
+ case 0xb0: case 0xb1: case 0xb2: case 0xb3:
+ case 0xb4: case 0xb5: case 0xb6: case 0xb7:
+ case 0xb8: case 0xb9: case 0xba: case 0xbb:
+ case 0xbc: case 0xbd: case 0xbe: case 0xbf:
+ iT();
+ break;
+
+
+ case 0xc0: case 0xc1: case 0xc2: case 0xc3:
+ case 0xc4: case 0xc5: case 0xc6: case 0xc7:
+ case 0xc8: case 0xc9: case 0xca: case 0xcb:
+ case 0xcc: case 0xcd: case 0xce: case 0xcf:
+ iLB();
+ break;
+
+ default:
+ iTM();
+ }
+}
+
void pps4_device::execute_run()
{
- do
- {
- debugger_instruction_hook(this, m_P.d);
- execute_one(ROP());
+ do
+ {
+ debugger_instruction_hook(this, m_P);
+ execute_one();
- } while (m_icount > 0);
+ } while (m_icount > 0);
}
/***************************************************************************
@@ -333,44 +1509,54 @@ void pps4_device::execute_run()
void pps4_device::device_start()
{
- m_program = &space(AS_PROGRAM);
- m_direct = &m_program->direct();
- m_data = &space(AS_DATA);
- m_io = &space(AS_IO);
-
- save_item(NAME(m_A));
- save_item(NAME(m_X));
- save_item(NAME(m_P));
- save_item(NAME(m_SA));
- save_item(NAME(m_SB));
- save_item(NAME(m_B));
- save_item(NAME(m_C));
- save_item(NAME(m_FF1));
- save_item(NAME(m_FF2));
-
- state_add( PPS4_PC, "PC", m_P.d ).mask(0xfff).formatstr("%03X");
- state_add( PPS4_A, "A", m_A ).formatstr("%02X"); // TODO: size?
- state_add( PPS4_X, "X", m_X ).formatstr("%02X"); // TODO: size?
- state_add( PPS4_SA, "SA", m_SA.d ).formatstr("%04X"); // TODO: size?
- state_add( PPS4_SB, "SB", m_SB.d ).formatstr("%04X"); // TODO: size?
- state_add( PPS4_B, "B", m_B.d ).formatstr("%04X"); // TODO: size?
- state_add( STATE_GENPC, "GENPC", m_P.d ).noshow();
- state_add( STATE_GENFLAGS, "GENFLAGS", m_C ).formatstr("%3s").noshow();
-
- m_icountptr = &m_icount;
+ m_program = &space(AS_PROGRAM);
+ m_direct = &m_program->direct();
+ m_data = &space(AS_DATA);
+ m_io = &space(AS_IO);
+
+ save_item(NAME(m_A));
+ save_item(NAME(m_X));
+ save_item(NAME(m_P));
+ save_item(NAME(m_SA));
+ save_item(NAME(m_SB));
+ save_item(NAME(m_Skip));
+ save_item(NAME(m_SAG));
+ save_item(NAME(m_B));
+ save_item(NAME(m_C));
+ save_item(NAME(m_FF1));
+ save_item(NAME(m_FF2));
+ save_item(NAME(m_I));
+ save_item(NAME(m_I2));
+ save_item(NAME(m_Ip));
+
+ state_add( PPS4_PC, "PC", m_P ).mask(0xFFF).formatstr("%03X");
+ state_add( PPS4_A, "A", m_A ).formatstr("%01X");
+ state_add( PPS4_X, "X", m_X ).formatstr("%01X");
+ state_add( PPS4_SA, "SA", m_SA ).formatstr("%03X");
+ state_add( PPS4_SB, "SB", m_SB ).formatstr("%03X");
+ state_add( PPS4_Skip, "Skip", m_Skip ).formatstr("%01X");
+ state_add( PPS4_SAG, "SAG", m_SAG ).formatstr("%03X");
+ state_add( PPS4_B, "B", m_B ).formatstr("%03X");
+ state_add( PPS4_I2, "I", m_I ).formatstr("%02X").noshow();
+ state_add( PPS4_I2, "I2", m_I2 ).formatstr("%02X").noshow();
+ state_add( PPS4_Ip, "Ip", m_Ip ).formatstr("%02X").noshow();
+ state_add( STATE_GENPC, "GENPC", m_P ).noshow();
+ state_add( STATE_GENFLAGS, "GENFLAGS", m_C).formatstr("%3s").noshow();
+
+ m_icountptr = &m_icount;
}
void pps4_device::state_string_export(const device_state_entry &entry, astring &string)
{
- switch (entry.index())
- {
- case STATE_GENFLAGS:
- string.printf("%c%c%c",
- m_C ? 'C':'.',
- m_FF1 ? '1':'.',
- m_FF2 ? '2':'.');
- break;
- }
+ switch (entry.index())
+ {
+ case STATE_GENFLAGS:
+ string.printf("%c%c%c",
+ m_C ? 'C':'.',
+ m_FF1 ? '1':'.',
+ m_FF2 ? '2':'.');
+ break;
+ }
}
/***************************************************************************
@@ -379,11 +1565,17 @@ void pps4_device::state_string_export(const device_state_entry &entry, astring &
void pps4_device::device_reset()
{
- m_A = m_X = 0;
- m_C = m_FF1 = m_FF2 = 0;
-
- m_P.d = 0;
- m_SA.d = 0;
- m_SB.d = 0;
- m_B.d = 0;
+ m_A = 0; // Accumulator A(4:1)
+ m_X = 0; // X register X(4:1)
+ m_P = 0; // program counter P(12:1)
+ m_SA = 0; // Shift register SA(12:1)
+ m_SB = 0; // Shift register SB(12:1)
+ m_SAG = 0; // Special address generation mask
+ m_B = 0; // B address register B(12:1) (BL, BM and BU)
+ m_C = 0; // Carry flip-flop
+ m_FF1 = 0; // Flip-flop 1
+ m_FF2 = 0; // Flip-flop 2
+ m_I = 0; // Most recent instruction I(8:1)
+ m_I2 = 0; // Most recent parameter I2(8:1)
+ m_Ip = 0; // Previous instruction I(8:1)
}
diff --git a/src/emu/cpu/pps4/pps4.h b/src/emu/cpu/pps4/pps4.h
index 1fa8f7dc377..710b5bfca5d 100644
--- a/src/emu/cpu/pps4/pps4.h
+++ b/src/emu/cpu/pps4/pps4.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
+// copyright-holders:Juergen Buchmueller <pullmoll@t-online.de>
#ifndef __PPS4_H__
#define __PPS4_H__
@@ -9,11 +9,21 @@
***************************************************************************/
enum
{
- PPS4_PC,
- PPS4_A,PPS4_X,PPS4_SA,PPS4_SB,PPS4_B,
- PPS4_GENPC = STATE_GENPC,
- PPS4_GENSP = STATE_GENSP,
- PPS4_GENPCBASE = STATE_GENPCBASE
+ PPS4_PC,
+ PPS4_A,
+ PPS4_X,
+ PPS4_SA,
+ PPS4_SB,
+ PPS4_B,
+ PPS4_Skip,
+ PPS4_SAG,
+ PPS4_I2,
+ PPS4_Ip,
+ PPS4_GENPC = STATE_GENPC,
+ PPS4_GENSP = STATE_GENSP,
+ PPS4_GENPCBASE = STATE_GENPCBASE,
+ PPS4_PORT_A = 256,
+ PPS4_PORT_B = 257
};
/***************************************************************************
@@ -26,69 +36,131 @@ enum
extern const device_type PPS4;
-
class pps4_device : public cpu_device
{
public:
- // construction/destruction
- pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ // construction/destruction
+ pps4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
- // device-level overrides
- virtual void device_start();
- virtual void device_reset();
-
- // device_execute_interface overrides
- virtual UINT32 execute_min_cycles() const { return 1; }
- virtual UINT32 execute_max_cycles() const { return 2; }
- virtual UINT32 execute_input_lines() const { return 0; }
- virtual UINT32 execute_default_irq_vector() const { return 0; }
- virtual void execute_run();
-
- // device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const
- {
- return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) );
- }
-
- // device_state_interface overrides
- void state_string_export(const device_state_entry &entry, astring &string);
-
- // device_disasm_interface overrides
- virtual UINT32 disasm_min_opcode_bytes() const { return 1; }
- virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
- virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // device_execute_interface overrides
+ virtual UINT32 execute_min_cycles() const { return 1; }
+ virtual UINT32 execute_max_cycles() const { return 3; }
+ virtual UINT32 execute_input_lines() const { return 0; }
+ virtual UINT32 execute_default_irq_vector() const { return 0; }
+ virtual void execute_run();
+
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const
+ {
+ return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_IO) ? &m_io_config : ( (spacenum == AS_DATA) ? &m_data_config : NULL ) );
+ }
+
+ // device_state_interface overrides
+ void state_string_export(const device_state_entry &entry, astring &string);
+
+ // device_disasm_interface overrides
+ virtual UINT32 disasm_min_opcode_bytes() const { return 1; }
+ virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
+ virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
private:
- address_space_config m_program_config;
- address_space_config m_data_config;
- address_space_config m_io_config;
-
- UINT8 m_A; // Accumulator
- UINT8 m_X;
-
- PAIR m_P;
- PAIR m_SA;
- PAIR m_SB;
- PAIR m_B; // BU + BM + BL
-
- UINT8 m_C; // Carry flag
- UINT8 m_FF1; // Flip-flop 1
- UINT8 m_FF2; // Flip-flop 2
-
- address_space *m_program;
- direct_read_data *m_direct;
- address_space *m_data;
- address_space *m_io;
-
- int m_icount;
-
- inline UINT8 ROP();
- inline UINT8 ARG();
- inline void DO_SKIP();
- void execute_one(int opcode);
-
+ address_space_config m_program_config;
+ address_space_config m_data_config;
+ address_space_config m_io_config;
+
+ address_space *m_program;
+ direct_read_data *m_direct;
+ address_space *m_data;
+ address_space *m_io;
+ int m_icount;
+
+ UINT8 m_A; //!< Accumulator A(4:1)
+ UINT8 m_X; //!< X register X(4:1)
+ UINT16 m_P; //!< program counter P(12:1)
+ UINT16 m_SA; //!< Shift register SA(12:1)
+ UINT16 m_SB; //!< Shift register SB(12:1)
+ UINT8 m_Skip; //!< Skip next instruction
+ UINT16 m_SAG; //!< Special address generation mask
+ UINT16 m_B; //!< B register B(12:1) (BL, BM and BH)
+ UINT8 m_C; //!< Carry flip-flop
+ UINT8 m_FF1; //!< Flip-flop 1
+ UINT8 m_FF2; //!< Flip-flop 2
+ UINT8 m_I; //!< Most recent instruction I(8:1)
+ UINT8 m_I2; //!< Most recent parameter I2(8:1)
+ UINT8 m_Ip; //!< Previous instruction I(8:1)
+
+ //! return the contents of B register (made of BU, BM and BL)
+ inline UINT16 B() const;
+
+ //! return memory at address B(12:1)
+ inline UINT8 M();
+
+ //! write to memory at address B(12:1)
+ inline void W(UINT8 data);
+
+ //! return the next opcode (also in m_I)
+ inline UINT8 ROP();
+
+ //! return the next argument (also in m_I2)
+ inline UINT8 ARG();
+
+ void iAD(); //!< Add
+ void iADC(); //!< Add with carry-in
+ void iADSK(); //!< Add and skip on carry-out
+ void iADCSK(); //!< Add with carry-in and skip on carry-out
+ void iADI(); //!< Add immediate
+ void iDC(); //!< Decimal correction
+ void iAND(); //!< Logical AND
+ void iOR(); //!< Logical OR
+ void iEOR(); //!< Logical Exclusive-OR
+ void iCOMP(); //!< Complement
+ void iSC(); //!< Set Carry flip-flop
+ void iRC(); //!< Reset Carry flip-flop
+ void iSF1(); //!< Set FF1
+ void iRF1(); //!< Reset FF1
+ void iSF2(); //!< Set FF2
+ void iRF2(); //!< Reset FF2
+ void iLD(); //!< Load accumulator from memory
+ void iEX(); //!< Exchange accumulator and memory
+ void iEXD(); //!< Exchange accumulator and memory and decrement BL
+ void iLDI(); //!< Load accumulator immediate
+ void iLAX(); //!< Load accumulator from X register
+ void iLXA(); //!< Load X register from accumulator
+ void iLABL(); //!< Load accumulator with BL
+ void iLBMX(); //!< Load BM with X
+ void iLBUA(); //!< Load BU with A
+ void iXABL(); //!< Exchange accumulator and BL
+ void iXBMX(); //!< Exchange BM and X registers
+ void iXAX(); //!< Exchange accumulator and X
+ void iXS(); //!< Eychange SA and SB registers
+ void iCYS(); //!< Cycle SA register and accumulaor
+ void iLB(); //!< Load B indirect
+ void iLBL(); //!< Load B long
+ void iINCB(); //!< Increment BL
+ void iDECB(); //!< Decrement BL
+ void iT(); //!< Transfer
+ void iTM(); //!< Transfer and mark indirect
+ void iTL(); //!< Transfer long
+ void iTML(); //!< Transfer and mark long
+ void iSKC(); //!< Skip on carry flip-flop
+ void iSKZ(); //!< Skip on accumulator zero
+ void iSKBI(); //!< Skip if BL equal to immediate
+ void iSKF1(); //!< Skip if FF1 equals 1
+ void iSKF2(); //!< Skip if FF2 equals 1
+ void iRTN(); //!< Return
+ void iRTNSK(); //!< Return and skip
+ void iIOL(); //!< Input/Output long
+ void iDIA(); //!< Discrete input group A
+ void iDIB(); //!< Discrete input group B
+ void iDOA(); //!< Discrete output group A
+ void iSAG(); //!< Special address generation
+
+ void execute_one(); //!< execute one instruction
};
-
-#endif
+#endif // __PPS4_H__
diff --git a/src/emu/cpu/pps4/pps4dasm.c b/src/emu/cpu/pps4/pps4dasm.c
index f3cb664f0e9..4b6ee314175 100644
--- a/src/emu/cpu/pps4/pps4dasm.c
+++ b/src/emu/cpu/pps4/pps4dasm.c
@@ -1,135 +1,432 @@
// license:BSD-3-Clause
-// copyright-holders:Miodrag Milanovic
+// copyright-holders:Juergen Buchmueller <pullmoll@t-online.de>
/*****************************************************************************
*
* pps4dasm.c
*
* Rockwell PPS-4 CPU Disassembly
*
+ *
+ * TODO: double verify all opcodes with t_Ixx flags
+ *
*****************************************************************************/
-
#include "emu.h"
#define OP(A) oprom[(A) - PC]
#define ARG(A) opram[(A) - PC]
+typedef enum pps4_token_e {
+ t_AD, t_ADC, t_ADSK, t_ADCSK, t_ADI,
+ t_DC, t_AND, t_OR, t_EOR, t_COMP,
+ t_SC, t_RC, t_SF1, t_RF1, t_SF2,
+ t_RF2, t_LD, t_EX, t_EXD, t_LDI,
+ t_LAX, t_LXA, t_LABL, t_LBMX, t_LBUA,
+ t_XABL, t_XBMX, t_XAX, t_XS, t_CYS,
+ t_LB, t_LBL, t_INCB, t_DECB, t_T,
+ t_TM, t_TL, t_TML, t_SKC, t_SKZ,
+ t_SKBI, t_SKF1, t_SKF2, t_RTN, t_RTNSK,
+ t_IOL, t_DIA, t_DIB, t_DOA, t_SAG,
+ t_COUNT,
+ t_MASK = (1 << 6) - 1,
+ t_I3c = 1 << 6, /* immediate 3 bit constant, complemented */
+ t_I4 = 1 << 7, /* immediate 4 bit constant */
+ t_I4c = 1 << 8, /* immediate 4 bit constant, complemented */
+ t_I4p = 1 << 9, /* immediate 4 bit offset into page 3 */
+ t_I6p = 1 << 10, /* immediate 6 bit constant; address in current page */
+ t_I8 = 1 << 11, /* immediate 8 bit constant (I/O port number) */
+ t_I8c = 1 << 12, /* immediate 8 bit constant inverted */
+ t_OVER = 1 << 13, /* Debugger step over (CALL) */
+ t_OUT = 1 << 14 /* Debugger step out (RETURN) */
+} pps4_token_e;
+
+static const char *token_str[t_COUNT] = {
+ "ad", /* add */
+ "adc", /* add with carry-in */
+ "adsk", /* add and skip on carry-out */
+ "adcsk", /* add with carry-in and skip on carry-out */
+ "adi", /* add immediate */
+ "dc", /* decimal correction */
+ "and", /* logical and */
+ "or", /* logical or */
+ "eor", /* logical exclusive-orf */
+ "comp", /* complement */
+ "sc", /* set C flip-flop */
+ "rc", /* reset C flip-flop */
+ "sf1", /* set FF1 flip-flop */
+ "rf1", /* reset FF1 flip-flop */
+ "sf2", /* set FF2 flip-flop */
+ "rf2", /* reset FF2 flip-flop */
+ "ld", /* load accumulator from memory */
+ "ex", /* exchange accumulator and memory */
+ "exd", /* exchange accumulator and memory and decrement BL */
+ "ldi", /* load accumulator immediate */
+ "lax", /* load accumulator from X register */
+ "lxa", /* load X register from accumulator */
+ "labl", /* load accumulator with BL */
+ "lbmx", /* load BM with X */
+ "lbua", /* load BU with A */
+ "xabl", /* exchange accumulator and BL */
+ "xbmx", /* exchange BM and X */
+ "xax", /* exchange accumulator and X */
+ "xs", /* exchange SA and SB */
+ "cys", /* cycle SA register and accumulator */
+ "lb", /* load B indirect */
+ "lbl", /* load B long */
+ "incb", /* increment BL */
+ "decb", /* decrement BL */
+ "t", /* transfer */
+ "tm", /* transfer and mark indirect */
+ "tl", /* transfer long */
+ "tml", /* transfer and mark long */
+ "skc", /* skip on C flip-flop equals 1 */
+ "skz", /* skip on accumulator zero */
+ "skbi", /* skip on BL equal to immediate */
+ "skf1", /* skip on FF1 flip-flop equals 1 */
+ "skf2", /* skip on FF2 flip-flop equals 1 */
+ "rtn", /* return */
+ "rtnsk", /* return and skip */
+ "iol", /* input/output long */
+ "dia", /* discrete input group A */
+ "dib", /* discrete input group B */
+ "doa", /* discrete output */
+ "sag" /* special address generation */
+};
+
+static const UINT16 table[] = {
+/* 00 */ t_LBL | t_I8c,
+/* 01 */ t_TML | t_I4 | t_I8,
+/* 02 */ t_TML | t_I4 | t_I8,
+/* 03 */ t_TML | t_I4 | t_I8,
+/* 04 */ t_LBUA,
+/* 05 */ t_RTN | t_OUT,
+/* 06 */ t_XS,
+/* 07 */ t_RTNSK | t_OUT,
+/* 08 */ t_ADCSK,
+/* 09 */ t_ADSK,
+/* 0a */ t_ADC,
+/* 0b */ t_AD,
+/* 0c */ t_EOR,
+/* 0d */ t_AND,
+/* 0e */ t_COMP,
+/* 0f */ t_OR,
+
+/* 10 */ t_LBMX,
+/* 11 */ t_LABL,
+/* 12 */ t_LAX,
+/* 13 */ t_SAG,
+/* 14 */ t_SKF2,
+/* 15 */ t_SKC,
+/* 16 */ t_SKF1,
+/* 17 */ t_INCB,
+/* 18 */ t_XBMX,
+/* 19 */ t_XABL,
+/* 1a */ t_XAX,
+/* 1b */ t_LXA,
+/* 1c */ t_IOL | t_I8,
+/* 1d */ t_DOA,
+/* 1e */ t_SKZ,
+/* 1f */ t_DECB,
+
+/* 20 */ t_SC,
+/* 21 */ t_SF2,
+/* 22 */ t_SF1,
+/* 23 */ t_DIB,
+/* 24 */ t_RC,
+/* 25 */ t_RF2,
+/* 26 */ t_RF1,
+/* 27 */ t_DIA,
+/* 28 */ t_EXD | t_I3c,
+/* 29 */ t_EXD | t_I3c,
+/* 2a */ t_EXD | t_I3c,
+/* 2b */ t_EXD | t_I3c,
+/* 2c */ t_EXD | t_I3c,
+/* 2d */ t_EXD | t_I3c,
+/* 2e */ t_EXD | t_I3c,
+/* 2f */ t_EXD | t_I3c,
+
+/* 30 */ t_LD | t_I3c,
+/* 31 */ t_LD | t_I3c,
+/* 32 */ t_LD | t_I3c,
+/* 33 */ t_LD | t_I3c,
+/* 34 */ t_LD | t_I3c,
+/* 35 */ t_LD | t_I3c,
+/* 36 */ t_LD | t_I3c,
+/* 37 */ t_LD | t_I3c,
+/* 38 */ t_EX | t_I3c,
+/* 39 */ t_EX | t_I3c,
+/* 3a */ t_EX | t_I3c,
+/* 3b */ t_EX | t_I3c,
+/* 3c */ t_EX | t_I3c,
+/* 3d */ t_EX | t_I3c,
+/* 3e */ t_EX | t_I3c,
+/* 3f */ t_EX | t_I3c,
+
+/* 40 */ t_SKBI | t_I4,
+/* 41 */ t_SKBI | t_I4,
+/* 42 */ t_SKBI | t_I4,
+/* 43 */ t_SKBI | t_I4,
+/* 44 */ t_SKBI | t_I4,
+/* 45 */ t_SKBI | t_I4,
+/* 46 */ t_SKBI | t_I4,
+/* 47 */ t_SKBI | t_I4,
+/* 48 */ t_SKBI | t_I4,
+/* 49 */ t_SKBI | t_I4,
+/* 4a */ t_SKBI | t_I4,
+/* 4b */ t_SKBI | t_I4,
+/* 4c */ t_SKBI | t_I4,
+/* 4d */ t_SKBI | t_I4,
+/* 4e */ t_SKBI | t_I4,
+/* 4f */ t_SKBI | t_I4,
+
+/* 50 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 51 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 52 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 53 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 54 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 55 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 56 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 57 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 58 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 59 */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 5a */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 5b */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 5c */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 5d */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 5e */ t_TL | t_I4 | t_I8 | t_OVER,
+/* 5f */ t_TL | t_I4 | t_I8 | t_OVER,
+
+/* 60 */ t_ADI | t_I4c,
+/* 61 */ t_ADI | t_I4c,
+/* 62 */ t_ADI | t_I4c,
+/* 63 */ t_ADI | t_I4c,
+/* 64 */ t_ADI | t_I4c,
+/* 65 */ t_DC,
+/* 66 */ t_ADI | t_I4c,
+/* 67 */ t_ADI | t_I4c,
+/* 68 */ t_ADI | t_I4c,
+/* 69 */ t_ADI | t_I4c,
+/* 6a */ t_ADI | t_I4c,
+/* 6b */ t_ADI | t_I4c,
+/* 6c */ t_ADI | t_I4c,
+/* 6d */ t_ADI | t_I4c,
+/* 6e */ t_ADI | t_I4c,
+/* 6f */ t_CYS,
+
+/* 70 */ t_LDI | t_I4c,
+/* 71 */ t_LDI | t_I4c,
+/* 72 */ t_LDI | t_I4c,
+/* 73 */ t_LDI | t_I4c,
+/* 74 */ t_LDI | t_I4c,
+/* 75 */ t_LDI | t_I4c,
+/* 76 */ t_LDI | t_I4c,
+/* 77 */ t_LDI | t_I4c,
+/* 78 */ t_LDI | t_I4c,
+/* 79 */ t_LDI | t_I4c,
+/* 7a */ t_LDI | t_I4c,
+/* 7b */ t_LDI | t_I4c,
+/* 7c */ t_LDI | t_I4c,
+/* 7d */ t_LDI | t_I4c,
+/* 7e */ t_LDI | t_I4c,
+/* 7f */ t_LDI | t_I4c,
+
+/* 80 */ t_T | t_I6p,
+/* 81 */ t_T | t_I6p,
+/* 82 */ t_T | t_I6p,
+/* 83 */ t_T | t_I6p,
+/* 84 */ t_T | t_I6p,
+/* 85 */ t_T | t_I6p,
+/* 86 */ t_T | t_I6p,
+/* 87 */ t_T | t_I6p,
+/* 88 */ t_T | t_I6p,
+/* 89 */ t_T | t_I6p,
+/* 8a */ t_T | t_I6p,
+/* 8b */ t_T | t_I6p,
+/* 8c */ t_T | t_I6p,
+/* 8d */ t_T | t_I6p,
+/* 8e */ t_T | t_I6p,
+/* 8f */ t_T | t_I6p,
+
+/* 90 */ t_T | t_I6p,
+/* 91 */ t_T | t_I6p,
+/* 92 */ t_T | t_I6p,
+/* 93 */ t_T | t_I6p,
+/* 94 */ t_T | t_I6p,
+/* 95 */ t_T | t_I6p,
+/* 96 */ t_T | t_I6p,
+/* 97 */ t_T | t_I6p,
+/* 98 */ t_T | t_I6p,
+/* 99 */ t_T | t_I6p,
+/* 9a */ t_T | t_I6p,
+/* 9b */ t_T | t_I6p,
+/* 9c */ t_T | t_I6p,
+/* 9d */ t_T | t_I6p,
+/* 9e */ t_T | t_I6p,
+/* 9f */ t_T | t_I6p,
+
+/* a0 */ t_T | t_I6p,
+/* a1 */ t_T | t_I6p,
+/* a2 */ t_T | t_I6p,
+/* a3 */ t_T | t_I6p,
+/* a4 */ t_T | t_I6p,
+/* a5 */ t_T | t_I6p,
+/* a6 */ t_T | t_I6p,
+/* a7 */ t_T | t_I6p,
+/* a8 */ t_T | t_I6p,
+/* a9 */ t_T | t_I6p,
+/* aa */ t_T | t_I6p,
+/* ab */ t_T | t_I6p,
+/* ac */ t_T | t_I6p,
+/* ad */ t_T | t_I6p,
+/* ae */ t_T | t_I6p,
+/* af */ t_T | t_I6p,
+
+/* b0 */ t_T | t_I6p,
+/* b1 */ t_T | t_I6p,
+/* b2 */ t_T | t_I6p,
+/* b3 */ t_T | t_I6p,
+/* b4 */ t_T | t_I6p,
+/* b5 */ t_T | t_I6p,
+/* b6 */ t_T | t_I6p,
+/* b7 */ t_T | t_I6p,
+/* b8 */ t_T | t_I6p,
+/* b9 */ t_T | t_I6p,
+/* ba */ t_T | t_I6p,
+/* bb */ t_T | t_I6p,
+/* bc */ t_T | t_I6p,
+/* bd */ t_T | t_I6p,
+/* be */ t_T | t_I6p,
+/* bf */ t_T | t_I6p,
+
+/* c0 */ t_LB | t_I4p,
+/* c1 */ t_LB | t_I4p,
+/* c2 */ t_LB | t_I4p,
+/* c3 */ t_LB | t_I4p,
+/* c4 */ t_LB | t_I4p,
+/* c5 */ t_LB | t_I4p,
+/* c6 */ t_LB | t_I4p,
+/* c7 */ t_LB | t_I4p,
+/* c8 */ t_LB | t_I4p,
+/* c9 */ t_LB | t_I4p,
+/* ca */ t_LB | t_I4p,
+/* cb */ t_LB | t_I4p,
+/* cc */ t_LB | t_I4p,
+/* cd */ t_LB | t_I4p,
+/* ce */ t_LB | t_I4p,
+/* cf */ t_LB | t_I4p,
+
+/* d0 */ t_TM | t_I6p | t_OVER,
+/* d1 */ t_TM | t_I6p | t_OVER,
+/* d2 */ t_TM | t_I6p | t_OVER,
+/* d3 */ t_TM | t_I6p | t_OVER,
+/* d4 */ t_TM | t_I6p | t_OVER,
+/* d5 */ t_TM | t_I6p | t_OVER,
+/* d6 */ t_TM | t_I6p | t_OVER,
+/* d7 */ t_TM | t_I6p | t_OVER,
+/* d8 */ t_TM | t_I6p | t_OVER,
+/* d9 */ t_TM | t_I6p | t_OVER,
+/* da */ t_TM | t_I6p | t_OVER,
+/* db */ t_TM | t_I6p | t_OVER,
+/* dc */ t_TM | t_I6p | t_OVER,
+/* dd */ t_TM | t_I6p | t_OVER,
+/* de */ t_TM | t_I6p | t_OVER,
+/* df */ t_TM | t_I6p | t_OVER,
+
+/* e0 */ t_TM | t_I6p | t_OVER,
+/* e1 */ t_TM | t_I6p | t_OVER,
+/* e2 */ t_TM | t_I6p | t_OVER,
+/* e3 */ t_TM | t_I6p | t_OVER,
+/* e4 */ t_TM | t_I6p | t_OVER,
+/* e5 */ t_TM | t_I6p | t_OVER,
+/* e6 */ t_TM | t_I6p | t_OVER,
+/* e7 */ t_TM | t_I6p | t_OVER,
+/* e8 */ t_TM | t_I6p | t_OVER,
+/* e9 */ t_TM | t_I6p | t_OVER,
+/* ea */ t_TM | t_I6p | t_OVER,
+/* eb */ t_TM | t_I6p | t_OVER,
+/* ec */ t_TM | t_I6p | t_OVER,
+/* ed */ t_TM | t_I6p | t_OVER,
+/* ee */ t_TM | t_I6p | t_OVER,
+/* ef */ t_TM | t_I6p | t_OVER,
+
+/* f0 */ t_TM | t_I6p | t_OVER,
+/* f1 */ t_TM | t_I6p | t_OVER,
+/* f2 */ t_TM | t_I6p | t_OVER,
+/* f3 */ t_TM | t_I6p | t_OVER,
+/* f4 */ t_TM | t_I6p | t_OVER,
+/* f5 */ t_TM | t_I6p | t_OVER,
+/* f6 */ t_TM | t_I6p | t_OVER,
+/* f7 */ t_TM | t_I6p | t_OVER,
+/* f8 */ t_TM | t_I6p | t_OVER,
+/* f9 */ t_TM | t_I6p | t_OVER,
+/* fa */ t_TM | t_I6p | t_OVER,
+/* fb */ t_TM | t_I6p | t_OVER,
+/* fc */ t_TM | t_I6p | t_OVER,
+/* fd */ t_TM | t_I6p | t_OVER,
+/* fe */ t_TM | t_I6p | t_OVER,
+/* ff */ t_TM | t_I6p | t_OVER
+};
+
CPU_DISASSEMBLE( pps4 )
{
- UINT32 flags = 0;
- unsigned PC = pc;
- UINT8 op;
- switch (op = OP(pc++))
- {
- // Arithmetic instructions
- case 0x0b: sprintf (buffer,"ad"); break;
- case 0x0a: sprintf (buffer,"adc"); break;
- case 0x09: sprintf (buffer,"adsk"); break;
- case 0x08: sprintf (buffer,"adcsk"); break;
- case 0x60: case 0x61: case 0x62: case 0x63:
- case 0x64: case 0x66: case 0x67: case 0x68:
- case 0x69: case 0x6a: case 0x6b: case 0x6c:
- case 0x6d: case 0x6e:
- sprintf (buffer,"adi %01x",(op & 0x0f)); break;
- case 0x65: sprintf (buffer,"dc"); break;
- // Logical instructions
- case 0x0d: sprintf (buffer,"and"); break;
- case 0x0f: sprintf (buffer,"or"); break;
- case 0x0c: sprintf (buffer,"eor"); break;
- case 0x0e: sprintf (buffer,"comp"); break;
- // Data transfer instructions
- case 0x20: sprintf (buffer,"sc"); break;
- case 0x24: sprintf (buffer,"rc"); break;
- case 0x22: sprintf (buffer,"sf1"); break;
- case 0x26: sprintf (buffer,"rf1"); break;
- case 0x21: sprintf (buffer,"sf2"); break;
- case 0x25: sprintf (buffer,"rf2"); break;
- case 0x30: case 0x31: case 0x32: case 0x33:
- case 0x34: case 0x35: case 0x36: case 0x37:
- sprintf (buffer,"ld %01x",(op & 0x07)); break;
- case 0x38: case 0x39: case 0x3a: case 0x3b:
- case 0x3c: case 0x3d: case 0x3e: case 0x3f:
- sprintf (buffer,"ex %01x",(op & 0x07)); break;
- case 0x28: case 0x29: case 0x2a: case 0x2b:
- case 0x2c: case 0x2d: case 0x2e: case 0x2f:
- sprintf (buffer,"exd %01x",(op & 0x07)); break;
- case 0x70: case 0x71: case 0x72: case 0x73:
- case 0x74: case 0x75: case 0x76: case 0x77:
- sprintf (buffer,"ldi %01x",(op & 0x0f)); break;
- case 0x12: sprintf (buffer,"lax"); break;
- case 0x1b: sprintf (buffer,"lxa"); break;
- case 0x11: sprintf (buffer,"labl"); break;
- case 0x10: sprintf (buffer,"lbmx"); break;
- case 0x04: sprintf (buffer,"lbua"); break;
- case 0x19: sprintf (buffer,"xabl"); break;
- case 0x18: sprintf (buffer,"xbmx"); break;
- case 0x1a: sprintf (buffer,"xax"); break;
- case 0x06: sprintf (buffer,"xs"); break;
- case 0x6f: sprintf (buffer,"cys"); break;
- case 0xc0: case 0xc1: case 0xc2: case 0xc3:
- case 0xc4: case 0xc5: case 0xc6: case 0xc7:
- case 0xc8: case 0xc9: case 0xca: case 0xcb:
- case 0xcc: case 0xcd: case 0xce: case 0xcf:
- sprintf (buffer,"lb %02x",ARG(pc)); pc++; break;
- case 0x00: sprintf (buffer,"lbl %02x",ARG(pc)); pc++; break;
- case 0x17: sprintf (buffer,"incb"); break;
- case 0x1f: sprintf (buffer,"decb"); break;
- // Control transfer instructions
- case 0x80: case 0x81: case 0x82: case 0x83:
- case 0x84: case 0x85: case 0x86: case 0x87:
- case 0x88: case 0x89: case 0x8a: case 0x8b:
- case 0x8c: case 0x8d: case 0x8e: case 0x8f:
- case 0x90: case 0x91: case 0x92: case 0x93:
- case 0x94: case 0x95: case 0x96: case 0x97:
- case 0x98: case 0x99: case 0x9a: case 0x9b:
- case 0x9c: case 0x9d: case 0x9e: case 0x9f:
- case 0xa0: case 0xa1: case 0xa2: case 0xa3:
- case 0xa4: case 0xa5: case 0xa6: case 0xa7:
- case 0xa8: case 0xa9: case 0xaa: case 0xab:
- case 0xac: case 0xad: case 0xae: case 0xaf:
- case 0xb0: case 0xb1: case 0xb2: case 0xb3:
- case 0xb4: case 0xb5: case 0xb6: case 0xb7:
- case 0xb8: case 0xb9: case 0xba: case 0xbb:
- case 0xbc: case 0xbd: case 0xbe: case 0xbf:
- sprintf (buffer,"t %02x",(op & 0x3f)); break;
- case 0xd0: case 0xd1: case 0xd2: case 0xd3:
- case 0xd4: case 0xd5: case 0xd6: case 0xd7:
- case 0xd8: case 0xd9: case 0xda: case 0xdb:
- case 0xdc: case 0xdd: case 0xde: case 0xdf:
- case 0xe0: case 0xe1: case 0xe2: case 0xe3:
- case 0xe4: case 0xe5: case 0xe6: case 0xe7:
- case 0xe8: case 0xe9: case 0xea: case 0xeb:
- case 0xec: case 0xed: case 0xee: case 0xef:
- case 0xf0: case 0xf1: case 0xf2: case 0xf3:
- case 0xf4: case 0xf5: case 0xf6: case 0xf7:
- case 0xf8: case 0xf9: case 0xfa: case 0xfb:
- case 0xfc: case 0xfd: case 0xfe: case 0xff:
- sprintf (buffer,"tm %02x %02x",(op & 0x3f),ARG(pc)); pc++; break;
- case 0x50: case 0x51: case 0x52: case 0x53:
- case 0x54: case 0x55: case 0x56: case 0x57:
- case 0x58: case 0x59: case 0x5a: case 0x5b:
- case 0x5c: case 0x5d: case 0x5e: case 0x5f:
- sprintf (buffer,"tl %01x %02x",(op & 0x0f),ARG(pc)); pc++; break;
- case 0x01: case 0x02: case 0x03:
- sprintf (buffer,"tml %02x",ARG(pc)); pc++; break;
- case 0x15: sprintf (buffer,"skc"); break;
- case 0x1e: sprintf (buffer,"skz"); break;
- case 0x40: case 0x41: case 0x42: case 0x43:
- case 0x44: case 0x45: case 0x46: case 0x47:
- case 0x48: case 0x49: case 0x4a: case 0x4b:
- case 0x4c: case 0x4d: case 0x4e: case 0x4f:
- sprintf (buffer,"skbi %01x",(op & 0x0f)); break;
- case 0x16: sprintf (buffer,"skf1"); break;
- case 0x14: sprintf (buffer,"skf2"); break;
- case 0x05: sprintf (buffer,"rtn"); break;
- case 0x07: sprintf (buffer,"rtnsk"); break;
- // Input/Output instructions
- case 0x1c: sprintf (buffer,"iol %02x",ARG(pc)); pc++; break;
- case 0x27: sprintf (buffer,"dia"); break;
- case 0x23: sprintf (buffer,"dib"); break;
- case 0x1d: sprintf (buffer,"doa"); break;
- // Special instructions
- case 0x13: sprintf (buffer,"sag"); break;
- }
-
- return (pc - PC) | flags | DASMFLAG_SUPPORTED;
+ UINT32 flags = 0;
+ unsigned PC = pc;
+ UINT8 op = OP(pc++);
+ UINT32 tok = table[op];
+ char *dst = 0;
+
+ if (0 == (tok & t_MASK))
+ sprintf(buffer, "%s", token_str[tok & t_MASK]);
+ else
+ dst = buffer + sprintf(buffer, "%-7s", token_str[tok & t_MASK]);
+
+ if (tok & t_I3c) {
+ // 3 bit immediate, complemented
+ UINT8 i = ~op & 7;
+ if (0 != i) // only print if non-zero
+ dst += sprintf(dst, "%x", i);
+ }
+
+ if (tok & t_I4) {
+ // 4 bit immediate
+ UINT8 i = op & 15;
+ dst += sprintf(dst, "%x", i);
+ }
+
+ if (tok & t_I4c) {
+ // 4 bit immediate, complemented
+ UINT8 i = ~op & 15;
+ dst += sprintf(dst, "%x", i);
+ }
+
+ if (tok & t_I4p) {
+ // 4 bit immediate offset into page 3
+ UINT8 i = op & 15;
+ dst += sprintf(dst, "[%x]", 0x0c0 | i);
+ }
+
+ if (tok & t_I6p) {
+ // 6 bit immediate offset into current page
+ UINT8 i = op & 63;
+ dst += sprintf(dst, "%x", (PC & ~63) | i);
+ }
+
+ if (tok & t_I8) {
+ // 8 bit immediate I/O port address
+ UINT8 arg = ARG(pc++);
+ dst += sprintf(dst, "%02x", arg);
+ }
+
+ if (tok & t_I8c) {
+ // 8 bit immediate offset into page
+ UINT16 arg = ~ARG(pc++) & 255;
+ dst += sprintf(dst, "%03x", arg);
+ }
+
+ if (tok & t_OVER) // TL or TML
+ flags |= DASMFLAG_STEP_OVER;
+
+ if (tok & t_OUT) // RTN or RTNSK
+ flags |= DASMFLAG_STEP_OUT;
+
+ return (pc - PC) | flags | DASMFLAG_SUPPORTED;
}
diff --git a/src/emu/cpu/tms0980/tms0980.c b/src/emu/cpu/tms0980/tms0980.c
index d5bdd0801b4..35898829fee 100644
--- a/src/emu/cpu/tms0980/tms0980.c
+++ b/src/emu/cpu/tms0980/tms0980.c
@@ -1,47 +1,13 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol, hap
/*
+ TMS0980/TMS1000-family MCU cores
-TMS0980/TMS1000-family CPU cores
-
-The tms0980 and tms1000-family cpu cores are very similar. The tms0980 has a
-slightly bigger addressable area and uses 9bit instructions where the tms1000
+The TMS0980 and TMS1000-family MCU cores are very similar. The TMS0980 has a
+slightly bigger addressable area and uses 9bit instructions where the TMS1000
family uses 8bit instruction. The instruction set themselves are very similar
-though. The table below shows the differences between the different models.
-
-Mode | ROM | RAM | R pins | O pins | K pins | ids
----------+-----------+----------+--------+--------+--------|----------
-tms0970 | 1024 * 8 | 64 * 4 | | | | tms0972
-tms0920* | 511?* 9 | 40 * 5 | | | | tmc0921
-tms0980 | 2048 * 9 | 64 * 9 | | | | tmc0981
-tms1000 | 1024 * 8 | 64 * 4 | 11 | 8 | 4 | tms1001
-tms1040* | 1024 * 8 | 64 * 4 | | | | tms1043
-tms1070 | 1024 * 8 | 64 * 4 | 11 | 8 | 4 | tms1071
-tms1100 | 2048 * 8 | 128 * 4 | 11 | 8 | 4 | tms1111/tms1115
-tms1170* | 2048 * 8 | 128 * 4 | | | | tmc1172
-tms1200 | 1024 * 8 | 64 * 4 | 13 | 8 | 4 | tms1215
-tms1270 | 1024 * 8 | 64 * 4 | 13 | 10 | 4 | tms1278
-tms1300 | 2048 * 8 | 128 * 4 | 16 | 8 | 4 | tms1309
-tms1370* | 2048 * 8 | 128 * 4 | | | | za0543
-tms1400* | 4096 * 8 | 128 * 4 | | | |
-tms1470* | 4096 * 8 | 128 * 4 | | | | tms1470
-tms1500* | 2048 * 13 | 64 * 20 | | | | tmc1501
-tms1600* | 4096 * 8 | 128 * 4 | | | |
-tms1670* | 4096 * 8 | 128 * 4 | | | |
-tms1700* | 512 * 8 | 32 * 4 | | | |
-tms1980* | 2048 * 9 | 64 * 9 | | | | tmc1982
-tms1990* | 1024 * 8 | 64 * 4 | | | | tmc1991
-tp0310* | 511?* 9 | 40 * 5 | | | | tp0311
-tp0320* | 2048 * 9 | 64 * 13 | | | | tp0321
-tp0455* | | | | | | cd4501
-tp0456* | | | | | | cd4555
-tp0458* | | | | | | cd4812
-tp0485* | | | | | | cd2901
-tp0530* | | | | | | cd5402
-
-* = not supported yet
-
-The TMS1000 core has been tested with some example code, the other models
-have not been tested lacking rom dumps.
+though.
Each instruction takes 12 cycles to execute in 2 phases: a fetch phase and an
execution phase. The execution phase takes place at the same time as the fetch
@@ -82,34 +48,17 @@ cycle #5
- Execute:
1. Execute BRANCH/CALL/RETN part #1
+*/
+
+#include "tms0980.h"
+#include "debugger.h"
+
+/*
-The CPU cores contains a set of fixed instructions and a set of
+The MCU cores contains a set of fixed instructions and a set of
instructions created using microinstructions. A subset of the
instruction set could be defined from the microinstructions by
-TI customers. Currently we only support the standard instruction
-set as defined by TI.
-
-The microinstructions are:
-15TN - 15 to -ALU
-ATN - ACC to -ALU
-AUTA - ALU to ACC
-AUTY - ALU to Y
-C8 - CARRY8 to STATUS
-CIN - Carry In to ALU
-CKM - CKB to MEM
-CKN - CKB to -ALU
-CKP - CKB to +ALU
-CME - Conditional Memory Enable
-DMTP - DAM to +ALU
-MTN - MEM to -ALU
-MTP - MEM to +ALU
-NATN - ~ACC to -ALU
-NDMTP - ~DAM to +ALU
-NE - COMP to STATUS
-SSE - Special Status Enable
-SSS - Special Status Sample
-STO - ACC to MEM
-YTP - Y to +ALU
+TI customers.
cycle #0: 15TN, ATN, CIN, CKN, CKP, DMTP, MTN, MTP, NATN, NDMTP, YTP
cycle #2: C8(?), CKM, NE(?), STO
@@ -119,28 +68,30 @@ unknown cycle: CME, SSE, SSS
*/
-#include "emu.h"
-#include "debugger.h"
-#include "tms0980.h"
-
-
-
-const device_type TMS0980 = &device_creator<tms0980_cpu_device>;
-const device_type TMS1000 = &device_creator<tms1000_cpu_device>;
-const device_type TMS0970 = &device_creator<tms0970_cpu_device>;
-const device_type TMS1070 = &device_creator<tms1070_cpu_device>;
-const device_type TMS1200 = &device_creator<tms1200_cpu_device>;
-const device_type TMS1270 = &device_creator<tms1270_cpu_device>;
-const device_type TMS1100 = &device_creator<tms1100_cpu_device>;
-const device_type TMS1300 = &device_creator<tms1300_cpu_device>;
-
-
-#define MICRO_MASK 0x80000000
-#define FIXED_INSTRUCTION 0x00000000
-
-
-/* Standard/fixed intructions */
-#define F_ILL 0x00000000
+/* Microinstructions */
+#define M_15TN 0x00000001 /* 15 to -ALU */
+#define M_ATN 0x00000002 /* ACC to -ALU */
+#define M_AUTA 0x00000004 /* ALU to ACC */
+#define M_AUTY 0x00000008 /* ALU to Y */
+#define M_C8 0x00000010 /* CARRY8 to STATUS */
+#define M_CIN 0x00000020 /* Carry In to ALU */
+#define M_CKM 0x00000040 /* CKB to MEM */
+#define M_CKN 0x00000080 /* CKB to -ALU */
+#define M_CKP 0x00000100 /* CKB to +ALU */
+#define M_CME 0x00000200 /* Conditional Memory Enable */
+#define M_DMTP 0x00000400 /* DAM to +ALU */
+#define M_MTN 0x00000800 /* MEM to -ALU */
+#define M_MTP 0x00001000 /* MEM to +ALU */
+#define M_NATN 0x00002000 /* ~ACC to -ALU */
+#define M_NDMTP 0x00004000 /* ~DAM to +ALU */
+#define M_NE 0x00008000 /* COMP to STATUS */
+#define M_SSE 0x00010000 /* Special Status Enable */
+#define M_SSS 0x00020000 /* Special Status Sample */
+#define M_STO 0x00040000 /* ACC to MEM */
+#define M_STSL 0x00080000 /* STATUS to Status Latch */
+#define M_YTP 0x00100000 /* Y to +ALU */
+
+/* Standard/fixed instructions - these are documented more in their specific handlers below */
#define F_BR 0x00000001
#define F_CALL 0x00000002
#define F_CLO 0x00000004
@@ -160,950 +111,982 @@ const device_type TMS1300 = &device_creator<tms1300_cpu_device>;
#define F_SEAC 0x00010000
#define F_SETR 0x00020000
#define F_TDO 0x00040000
+#define F_XDA 0x00080000
+
+
+// supported types:
+// note: dice information assumes the orientation is pictured with RAM at the bottom-left
+
+// TMS1000
+// - 64x4bit RAM array at the bottom-left
+// - 1024x8bit ROM array at the bottom-right
+// * FYI, the row-selector to the left of it is laid out as:
+// 3,4,11,12,19,20,27,28,35,36,43,44,51,52,59,60,0,7,8,15,16,23,24,31,32,39,40,47,48,55,56,63,
+// 2,5,10,13,18,21,26,29,34,37,42,45,50,53,58,61,1,6,9,14,17,22,25,30,33,38,41,46,49,54,57,62
+// - 30-term microinstructions PLA(mpla) at the top half, to the right of the midline, supporting 16 microinstructions
+// - 20-term output PLA(opla) at the top-left
+// - the ALU is between the opla and mpla
+const device_type TMS1000 = &device_creator<tms1000_cpu_device>; // 28-pin DIP, 11 R pins
+const device_type TMS1200 = &device_creator<tms1200_cpu_device>; // 40-pin DIP, 13 R pins
+const device_type TMS1070 = &device_creator<tms1070_cpu_device>; // same as tms1000, just supports higher voltage
+// TMS1270 has 10 O pins, how does that work?
+
+// TMS1100 is nearly the same as TMS1000, some different opcodes, and with double the RAM and ROM
+const device_type TMS1100 = &device_creator<tms1100_cpu_device>; // 28-pin DIP, 11 R pins
+const device_type TMS1300 = &device_creator<tms1300_cpu_device>; // 40-pin DIP, 16 R pins
+
+// TMS0980
+// - 64x9bit RAM array at the bottom-left (set up as 144x4)
+// - 2048x9bit ROM array at the bottom-left
+// - main instructions PLA at the top half, to the right of the midline
+// - 64-term microinstructions PLA between the RAM and ROM, supporting 20 microinstructions
+// - 16-term output PLA and segment PLA above the RAM
+const device_type TMS0980 = &device_creator<tms0980_cpu_device>; // 28-pin DIP, 9 R pins
+
+// TMS0970 is a stripped-down version of the TMS0980, itself acting more like a TMS1000
+// - 64x4bit RAM array at the bottom-left
+// - 1024x8bit ROM array at the bottom-right
+// - main instructions PLA at the top half, to the right of the midline
+// - 32-term microinstructions PLA between the RAM and ROM, supporting 15 microinstructions
+// - 16-term output PLA and segment PLA above the RAM
+const device_type TMS0970 = &device_creator<tms0970_cpu_device>; // 28-pin DIP, 11 R pins
-/* Microinstructions */
-#define M_15TN 0x00000001
-#define M_ATN 0x00000002
-#define M_AUTA 0x00000004
-#define M_AUTY 0x00000008
-#define M_C8 0x00000010
-#define M_CIN 0x00000020
-#define M_CKM 0x00000040
-#define M_CKN 0x00000080
-#define M_CKP 0x00000100
-#define M_CME 0x00000200
-#define M_DMTP 0x00000400
-#define M_MTN 0x00000800
-#define M_MTP 0x00001000
-#define M_NATN 0x00002000
-#define M_NDMTP 0x00004000
-#define M_NE 0x00008000
-#define M_SSE 0x00010000
-#define M_SSS 0x00020000
-#define M_STO 0x00040000
-#define M_STSL 0x00080000
-#define M_YTP 0x00100000
-
-
-/* instructions built from microinstructions */
-#define I_AC1AC ( MICRO_MASK | M_CKP | M_ATN | M_CIN | M_C8 | M_AUTA )
-#define I_A6AAC I_ACACC
-#define I_A8AAC I_ACACC
-#define I_A10AAC I_ACACC
-#define I_ACACC ( MICRO_MASK | M_CKP | M_ATN | M_C8 | M_AUTA )
-#define I_ACNAA ( MICRO_MASK | M_CKP | M_NATN | M_AUTA )
-#define I_ALEC ( MICRO_MASK | M_CKP | M_NATN | M_CIN | M_C8 )
-#define I_ALEM ( MICRO_MASK | M_MTP | M_NATN | M_CIN | M_C8 )
-#define I_AMAAC ( MICRO_MASK | M_MTP | M_ATN | M_C8 | M_AUTA )
-#define I_CCLA ( MICRO_MASK | M_AUTA | M_SSS )
-#define I_CLA ( MICRO_MASK | M_AUTA )
-#define I_CPAIZ ( MICRO_MASK | M_NATN | M_CIN | M_C8 | M_AUTA )
-#define I_CTMDYN ( MICRO_MASK | M_YTP | M_15TN | M_C8 | M_AUTY | M_CME )
-#define I_DAN ( MICRO_MASK | M_CKP | M_ATN | M_CIN | M_C8 | M_AUTA )
-#define I_DMAN ( MICRO_MASK | M_MTP | M_15TN | M_C8 | M_AUTA )
-#define I_DMEA ( MICRO_MASK | M_MTP | M_DMTP | M_SSS | M_AUTA )
-#define I_NDMEA ( MICRO_MASK | M_MTN | M_NDMTP | M_SSS | M_AUTA )
-#define I_DNAA ( MICRO_MASK | M_DMTP | M_NATN | M_SSS | M_AUTA )
-#define I_DYN ( MICRO_MASK | M_YTP | M_15TN | M_C8 | M_AUTY )
-#define I_IA ( MICRO_MASK | M_ATN | M_CIN | M_AUTA )
-#define I_IMAC ( MICRO_MASK | M_MTP | M_CIN | M_C8 | M_AUTA )
-#define I_IYC ( MICRO_MASK | M_YTP | M_CIN | M_C8 | M_AUTY )
-#define I_KNEZ ( MICRO_MASK | M_CKP | M_NE )
-#define I_MNEA ( MICRO_MASK | M_MTP | M_ATN | M_NE )
-#define I_MNEZ ( MICRO_MASK | M_MTP | M_NE )
-#define I_SAMAN ( MICRO_MASK | M_MTP | M_NATN | M_CIN | M_C8 | M_AUTA )
-#define I_SETR ( MICRO_MASK | M_YTP | M_15TN | M_AUTY | M_C8 )
-#define I_TAM ( MICRO_MASK | M_STO )
-#define I_TAMACS ( MICRO_MASK | M_STO | M_ATN | M_CKP | M_AUTA | M_SSE )
-#define I_TAMDYN ( MICRO_MASK | M_STO | M_YTP | M_15TN | M_AUTY | M_C8 )
-#define I_TAMIY ( MICRO_MASK | M_STO | M_YTP | M_CIN | M_AUTY )
-#define I_TAMIYC ( MICRO_MASK | M_STO | M_YTP | M_CIN | M_C8 | M_AUTY )
-#define I_TAMZA ( MICRO_MASK | M_STO | M_AUTA )
-#define I_TAY ( MICRO_MASK | M_ATN | M_AUTY )
-#define I_TBIT ( MICRO_MASK | M_CKP | M_CKN | M_MTP | M_NE )
-#define I_TCY ( MICRO_MASK | M_CKP | M_AUTY )
-#define I_TCMIY ( MICRO_MASK | M_CKM | M_YTP | M_CIN | M_AUTY )
-#define I_TKA ( MICRO_MASK | M_CKP | M_AUTA )
-#define I_TKM ( MICRO_MASK | M_CKM )
-#define I_TMA ( MICRO_MASK | M_MTP | M_AUTA )
-#define I_TMY ( MICRO_MASK | M_MTP | M_AUTY )
-#define I_TYA ( MICRO_MASK | M_YTP | M_AUTA )
-#define I_XDA ( MICRO_MASK | M_DMTP | M_AUTA | M_STO )
-#define I_XMA ( MICRO_MASK | M_MTP | M_STO | M_AUTA )
-#define I_YMCY ( MICRO_MASK | M_CIN | M_YTP | M_CKN | M_AUTY )
-#define I_YNEA ( MICRO_MASK | M_YTP | M_ATN | M_NE )
-#define I_YNEC ( MICRO_MASK | M_YTP | M_CKN | M_NE )
-
-
-static const UINT8 tms0980_c2_value[4] = { 0, 2, 1, 3 };
-static const UINT8 tms0980_c3_value[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
-static const UINT8 tms0980_c4_value[16] = { 0x0, 0x8, 0x4, 0xC, 0x2, 0xA, 0x6, 0xE, 0x1, 0x9, 0x5, 0xD, 0x3, 0xB, 0x7, 0xF };
-static const UINT8 tms0980_bit_value[4] = { 1, 4, 2, 8 };
-static const UINT8 tms0980_nbit_value[4] = { 0xE, 0xB, 0xD, 0x7 };
-
-
-static const UINT32 tms0980_decode[512] =
+static ADDRESS_MAP_START(program_11bit_9, AS_PROGRAM, 16, tms1xxx_cpu_device)
+ AM_RANGE(0x000, 0xfff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(program_10bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
+ AM_RANGE(0x000, 0x3ff) AM_ROM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(program_11bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
+ AM_RANGE(0x000, 0x7ff) AM_ROM
+ADDRESS_MAP_END
+
+
+static ADDRESS_MAP_START(data_64x4, AS_DATA, 8, tms1xxx_cpu_device)
+ AM_RANGE(0x00, 0x3f) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(data_128x4, AS_DATA, 8, tms1xxx_cpu_device)
+ AM_RANGE(0x00, 0x7f) AM_RAM
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START(data_64x9_as4, AS_DATA, 8, tms1xxx_cpu_device)
+ AM_RANGE(0x00, 0x7f) AM_RAM
+ AM_RANGE(0x80, 0x8f) AM_RAM AM_MIRROR(0x70) // DAM
+ADDRESS_MAP_END
+
+
+tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms1xxx_cpu_device(mconfig, TMS1000, "TMS1000", tag, owner, clock, 8, 11, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms1000", __FILE__)
{
- /* 0x000 */
- F_COMX, I_ALEM, I_YNEA, I_XMA, I_DYN, I_IYC, I_CLA, I_DMAN,
- I_TKA, I_MNEA, I_TKM, F_ILL, F_ILL, F_SETR, I_KNEZ, F_ILL,
- I_DMEA, I_DNAA, I_CCLA, I_NDMEA, F_ILL, I_AMAAC, F_ILL, F_ILL,
- I_CTMDYN, I_XDA, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL,
- I_TBIT, I_TBIT, I_TBIT, I_TBIT, F_ILL, F_ILL, F_ILL, F_ILL,
- I_TAY, I_TMA, I_TMY, I_TYA, I_TAMDYN, I_TAMIYC, I_TAMZA, I_TAM,
- I_SAMAN, I_CPAIZ, I_IMAC, I_MNEZ, F_ILL, F_ILL, F_ILL, F_ILL,
- I_TCY, I_YNEC, I_TCMIY, I_ACACC, I_ACNAA, I_TAMACS, I_ALEC, I_YMCY,
- /* 0x040 */
- I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
- I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
- I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
- I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
- I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
- I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
- I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC,
- I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC, I_ACACC,
- /* 0x080 */
- F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
- F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
- F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX,
- F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX,
- F_SBIT, F_SBIT, F_SBIT, F_SBIT, F_RBIT, F_RBIT, F_RBIT, F_RBIT,
- F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL,
- F_TDO, F_SAL, F_COMX8, F_SBL, F_REAC, F_SEAC, F_OFF, F_ILL,
- F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_ILL, F_RETN,
- /* 0x0c0 */
- I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA,
- I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA, I_ACNAA,
- I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS,
- I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS, I_TAMACS,
- I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
- I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
- I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY,
- I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY, I_YMCY,
- /* 0x100 */
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- /* 0x140 */
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- /* 0x180 */
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- /* 0x1c0 */
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL
-};
+}
+tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
+ : tms1xxx_cpu_device(mconfig, type, name, tag, owner, clock, o_pins, r_pins, k_pins, pc_bits, byte_bits, x_bits, prgwidth, program, datawidth, data, shortname, source)
+{
+}
-static const UINT32 tms1000_default_decode[256] =
+tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms1000_cpu_device(mconfig, TMS1070, "TMS1070", tag, owner, clock, 8, 11, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms1070", __FILE__)
{
- /* 0x00 */
- F_COMX, I_A8AAC, I_YNEA, I_TAM, I_TAMZA, I_A10AAC, I_A6AAC, I_DAN,
- I_TKA, I_KNEZ, F_TDO, F_CLO, F_RSTR, F_SETR, I_IA, F_RETN,
- F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
- F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
- /* 0x20 */
- I_TAMIY, I_TMA, I_TMY, I_TYA, I_TAY, I_AMAAC, I_MNEZ, I_SAMAN,
- I_IMAC, I_ALEM, I_DMAN, I_IYC, I_DYN, I_CPAIZ, I_XMA, I_CLA,
- F_SBIT, F_SBIT, F_SBIT, F_SBIT, F_RBIT, F_RBIT, F_RBIT, F_RBIT,
- I_TBIT, I_TBIT, I_TBIT, I_TBIT, F_LDX, F_LDX, F_LDX, F_LDX,
- /* 0x40 */
- I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
- I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
- I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
- I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
- /* 0x60 */
- I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
- I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
- I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
- I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC, I_ALEC,
- /* 0x80 */
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- /* 0xC0 */
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
-};
+}
+tms1200_cpu_device::tms1200_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms1000_cpu_device(mconfig, TMS1200, "TMS1200", tag, owner, clock, 8, 13, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms1200", __FILE__)
+{
+}
-static const UINT32 tms1100_default_decode[256] =
+
+tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms1000_cpu_device(mconfig, TMS1100, "TMS1100", tag, owner, clock, 8, 11, 4, 6, 8, 3, 11, ADDRESS_MAP_NAME(program_11bit_8), 7, ADDRESS_MAP_NAME(data_128x4), "tms1100", __FILE__)
{
- /* 0x00 */
- I_MNEA, I_ALEM, I_YNEA, I_XMA, I_DYN, I_IYC, I_AMAAC, I_DMAN,
- I_TKA, F_COMX, F_TDO, F_COMC, F_RSTR, F_SETR, I_KNEZ, F_RETN,
- F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
- F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP, F_LDP,
- /* 0x20 */
- I_TAY, I_TMA, I_TMY, I_TYA, I_TAMDYN, I_TAMIYC, I_TAMZA, I_TAM,
- F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX, F_LDX,
- F_SBIT, F_SBIT, F_SBIT, F_SBIT, F_RBIT, F_RBIT, F_RBIT, F_RBIT,
- I_TBIT, I_TBIT, I_TBIT, I_TBIT, I_SAMAN, I_CPAIZ, I_IMAC, I_MNEZ,
- /* 0x40 */
- I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
- I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY, I_TCY,
- I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
- I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC, I_YNEC,
- /* 0x60 */
- I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
- I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY, I_TCMIY,
- I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC,
- I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_AC1AC, I_CLA,
- /* 0x80 */
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR, F_BR,
- /* 0xC0 */
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
- F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL, F_CALL,
-};
+}
+
+tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
+ : tms1000_cpu_device(mconfig, type, name, tag, owner, clock, o_pins, r_pins, k_pins, pc_bits, byte_bits, x_bits, prgwidth, program, datawidth, data, shortname, source)
+{
+}
+tms1300_cpu_device::tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms1100_cpu_device(mconfig, TMS1300, "TMS1200", tag, owner, clock, 8, 16, 4, 6, 8, 3, 11, ADDRESS_MAP_NAME(program_11bit_8), 7, ADDRESS_MAP_NAME(data_128x4), "tms1300", __FILE__)
+{
+}
-static ADDRESS_MAP_START(program_11bit_9, AS_PROGRAM, 16, tms1xxx_cpu_device)
- AM_RANGE( 0x000, 0xfff ) AM_ROM
-ADDRESS_MAP_END
+tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms1000_cpu_device(mconfig, TMS0970, "TMS0970", tag, owner, clock, 8, 11, 4, 6, 8, 2, 10, ADDRESS_MAP_NAME(program_10bit_8), 6, ADDRESS_MAP_NAME(data_64x4), "tms0970", __FILE__)
+{
+}
-static ADDRESS_MAP_START(program_10bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
- AM_RANGE( 0x000, 0x3ff ) AM_ROM
-ADDRESS_MAP_END
+tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
+ : tms1000_cpu_device(mconfig, type, name, tag, owner, clock, o_pins, r_pins, k_pins, pc_bits, byte_bits, x_bits, prgwidth, program, datawidth, data, shortname, source)
+{
+}
-static ADDRESS_MAP_START(program_11bit_8, AS_PROGRAM, 8, tms1xxx_cpu_device)
- AM_RANGE( 0x000, 0x7ff ) AM_ROM
-ADDRESS_MAP_END
+tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : tms0970_cpu_device(mconfig, TMS0980, "TMS0980", tag, owner, clock, 8, 9, 5, 7, 9, 4, 12, ADDRESS_MAP_NAME(program_11bit_9), 8, ADDRESS_MAP_NAME(data_64x9_as4), "tms0980", __FILE__)
+{
+}
-static ADDRESS_MAP_START(data_64x4, AS_DATA, 8, tms1xxx_cpu_device)
- AM_RANGE( 0x00, 0x3f ) AM_RAM
-ADDRESS_MAP_END
+static MACHINE_CONFIG_FRAGMENT(tms1000)
+
+ // microinstructions PLA, output PLA
+ MCFG_PLA_ADD("mpla", 8, 16, 30)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+ MCFG_PLA_ADD("opla", 5, 8, 20)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+MACHINE_CONFIG_END
-static ADDRESS_MAP_START(data_128x4, AS_DATA, 8, tms1xxx_cpu_device)
- AM_RANGE( 0x00, 0x7f ) AM_RAM
-ADDRESS_MAP_END
+machine_config_constructor tms1000_cpu_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME(tms1000);
+}
+
+
+static MACHINE_CONFIG_FRAGMENT(tms0970)
+
+ // main opcodes PLA, microinstructions PLA, output PLA, segment PLA
+ MCFG_PLA_ADD("ipla", 8, 15, 18)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+ MCFG_PLA_ADD("mpla", 5, 15, 32)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+ MCFG_PLA_ADD("opla", 4, 8, 16)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+ MCFG_PLA_ADD("spla", 3, 8, 8)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+MACHINE_CONFIG_END
+
+machine_config_constructor tms0970_cpu_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME(tms0970);
+}
+
+
+static MACHINE_CONFIG_FRAGMENT(tms0980)
+
+ // main opcodes PLA, microinstructions PLA, output PLA, segment PLA
+ MCFG_PLA_ADD("ipla", 9, 22, 24)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+ MCFG_PLA_ADD("mpla", 6, 20, 64)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+ MCFG_PLA_ADD("opla", 4, 8, 16)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+ MCFG_PLA_ADD("spla", 3, 8, 8)
+ MCFG_PLA_FILEFORMAT(PLA_FMT_BERKELEY)
+MACHINE_CONFIG_END
+
+machine_config_constructor tms0980_cpu_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME(tms0980);
+}
+
+
+
+offs_t tms1000_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ extern CPU_DISASSEMBLE(tms1000);
+ return CPU_DISASSEMBLE_NAME(tms1000)(this, buffer, pc, oprom, opram, options);
+}
+
+offs_t tms1100_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ extern CPU_DISASSEMBLE(tms1100);
+ return CPU_DISASSEMBLE_NAME(tms1100)(this, buffer, pc, oprom, opram, options);
+}
+
+offs_t tms0980_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+{
+ extern CPU_DISASSEMBLE(tms0980);
+ return CPU_DISASSEMBLE_NAME(tms0980)(this, buffer, pc, oprom, opram, options);
+}
+
+void tms1xxx_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
+{
+ switch (entry.index())
+ {
+ case STATE_GENPC:
+ string.printf("%03X", m_rom_address << ((m_byte_bits > 8) ? 1 : 0));
+ break;
+ }
+}
-static ADDRESS_MAP_START(data_64x9_as4, AS_DATA, 8, tms1xxx_cpu_device)
- AM_RANGE( 0x00, 0x8f ) AM_RAM
- AM_RANGE( 0x90, 0xff ) AM_NOP
-ADDRESS_MAP_END
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+enum
+{
+ TMS0980_PC=1, TMS0980_SR, TMS0980_PA, TMS0980_PB,
+ TMS0980_A, TMS0980_X, TMS0980_Y, TMS0980_STATUS
+};
void tms1xxx_cpu_device::device_start()
{
- m_program = &space( AS_PROGRAM );
- m_data = &space( AS_DATA );
+ m_program = &space(AS_PROGRAM);
+ m_data = &space(AS_DATA);
- m_read_k.resolve_safe(0xff);
+ m_read_k.resolve_safe(0);
m_write_o.resolve_safe();
m_write_r.resolve_safe();
+ m_power_off.resolve_safe();
+
+ m_o_mask = (1 << m_o_pins) - 1;
+ m_r_mask = (1 << m_r_pins) - 1;
+ m_k_mask = (1 << m_k_pins) - 1;
+ m_pc_mask = (1 << m_pc_bits) - 1;
+ m_x_mask = (1 << m_x_bits) - 1;
+
+ // zerofill
+ m_pc = 0;
+ m_sr = 0;
+ m_pa = 0;
+ m_pb = 0;
+ m_a = 0;
+ m_x = 0;
+ m_y = 0;
+ m_ca = 0;
+ m_cb = 0;
+ m_cs = 0;
+ m_r = 0;
+ m_o = 0;
+ m_cki_bus = 0;
+ m_c4 = 0;
+ m_p = 0;
+ m_n = 0;
+ m_adder_out = 0;
+ m_carry_in = 0;
+ m_carry_out = 0;
+ m_status = 0;
+ m_status_latch = 0;
+ m_eac = 0;
+ m_clatch = 0;
+ m_add = 0;
+ m_bl = 0;
+
+ m_ram_in = 0;
+ m_dam_in = 0;
+ m_ram_out = 0;
+ m_ram_address = 0;
+ m_rom_address = 0;
+ m_opcode = 0;
+ m_fixed = 0;
+ m_micro = 0;
+ m_subcycle = 0;
- save_item( NAME(m_prev_pc) );
- save_item( NAME(m_prev_pa) );
- save_item( NAME(m_pc) );
- save_item( NAME(m_pa) );
- save_item( NAME(m_sr) );
- save_item( NAME(m_pb) );
- save_item( NAME(m_a) );
- save_item( NAME(m_x) );
- save_item( NAME(m_y) );
- save_item( NAME(m_dam) );
- save_item( NAME(m_ca) );
- save_item( NAME(m_cb) );
- save_item( NAME(m_cs) );
- save_item( NAME(m_r) );
- save_item( NAME(m_o) );
- save_item( NAME(m_cki_bus) );
- save_item( NAME(m_p) );
- save_item( NAME(m_n) );
- save_item( NAME(m_adder_result) );
- save_item( NAME(m_carry_in) );
- save_item( NAME(m_status) );
- save_item( NAME(m_status_latch) );
- save_item( NAME(m_special_status) );
- save_item( NAME(m_call_latch) );
- save_item( NAME(m_add_latch) );
- save_item( NAME(m_branch_latch) );
- save_item( NAME(m_subcycle) );
- save_item( NAME(m_ram_address) );
- save_item( NAME(m_ram_data) );
- save_item( NAME(m_rom_address) );
- save_item( NAME(m_opcode) );
- save_item( NAME(m_decode) );
-
- // Register state for debugger
- state_add( TMS0980_PC, "PC", m_pc ).callimport().callexport().formatstr("%02X");
- state_add( TMS0980_SR, "SR", m_sr ).callimport().callexport().formatstr("%01X");
- state_add( TMS0980_PA, "PA", m_pa ).callimport().callexport().formatstr("%01X");
- state_add( TMS0980_PB, "PB", m_pb ).callimport().callexport().formatstr("%01X");
- state_add( TMS0980_A, "A", m_a ).callimport().callexport().formatstr("%01X");
- state_add( TMS0980_X, "X", m_x ).callimport().callexport().formatstr("%01X");
- state_add( TMS0980_Y, "Y", m_y ).callimport().callexport().formatstr("%01X");
- state_add( TMS0980_STATUS, "STATUS", m_status ).callimport().callexport().formatstr("%01X");
-
- state_add(STATE_GENPC, "curpc", m_pc).callimport().callexport().formatstr("%8s").noshow();
- state_add(STATE_GENFLAGS, "GENFLAGS", m_sr).callimport().callexport().formatstr("%8s").noshow();
+ // register for savestates
+ save_item(NAME(m_pc));
+ save_item(NAME(m_sr));
+ save_item(NAME(m_pa));
+ save_item(NAME(m_pb));
+ save_item(NAME(m_a));
+ save_item(NAME(m_x));
+ save_item(NAME(m_y));
+ save_item(NAME(m_ca));
+ save_item(NAME(m_cb));
+ save_item(NAME(m_cs));
+ save_item(NAME(m_r));
+ save_item(NAME(m_o));
+ save_item(NAME(m_cki_bus));
+ save_item(NAME(m_c4));
+ save_item(NAME(m_p));
+ save_item(NAME(m_n));
+ save_item(NAME(m_adder_out));
+ save_item(NAME(m_carry_in));
+ save_item(NAME(m_carry_out));
+ save_item(NAME(m_status));
+ save_item(NAME(m_status_latch));
+ save_item(NAME(m_eac));
+ save_item(NAME(m_clatch));
+ save_item(NAME(m_add));
+ save_item(NAME(m_bl));
+
+ save_item(NAME(m_ram_in));
+ save_item(NAME(m_dam_in));
+ save_item(NAME(m_ram_out));
+ save_item(NAME(m_ram_address));
+ save_item(NAME(m_rom_address));
+ save_item(NAME(m_opcode));
+ save_item(NAME(m_fixed));
+ save_item(NAME(m_micro));
+ save_item(NAME(m_subcycle));
+
+ // register state for debugger
+ state_add(TMS0980_PC, "PC", m_pc ).formatstr("%02X");
+ state_add(TMS0980_SR, "SR", m_sr ).formatstr("%01X");
+ state_add(TMS0980_PA, "PA", m_pa ).formatstr("%01X");
+ state_add(TMS0980_PB, "PB", m_pb ).formatstr("%01X");
+ state_add(TMS0980_A, "A", m_a ).formatstr("%01X");
+ state_add(TMS0980_X, "X", m_x ).formatstr("%01X");
+ state_add(TMS0980_Y, "Y", m_y ).formatstr("%01X");
+ state_add(TMS0980_STATUS, "STATUS", m_status).formatstr("%01X");
+
+ state_add(STATE_GENPC, "curpc", m_rom_address).formatstr("%03X").noshow();
+ state_add(STATE_GENFLAGS, "GENFLAGS", m_sr).formatstr("%8s").noshow();
m_icountptr = &m_icount;
}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
void tms1xxx_cpu_device::device_reset()
{
- m_pa = 0xF;
- m_pb = 0xF;
+ m_pa = 0xf;
+ m_pb = 0xf;
m_pc = 0;
- m_dam = 0;
m_ca = 0;
m_cb = 0;
m_cs = 0;
+
+ m_eac = 0;
+ m_bl = 0;
+ m_add = 0;
+
+ m_opcode = 0;
+ m_micro = 0;
+ m_fixed = 0;
+
m_subcycle = 0;
- m_status = 1;
- m_status_latch = 0;
- m_call_latch = 0;
- m_add_latch = 0;
- m_branch_latch = 0;
+
+ // clear outputs
m_r = 0;
- m_o = 0;
- m_ram_address = 0;
- m_decode = F_ILL;
- m_opcode = 0;
+ m_write_r(0, m_r & m_r_mask, 0xffff);
+ write_o_output(0);
+ m_write_r(0, m_r & m_r_mask, 0xffff);
}
-/*
-The program counter is implemented using PRNG logic and gets incremented as follows:
-
-00, 01, 03, 07, 0F, 1F, 3F, 3E,
-3D, 3B, 37, 2F, 1E, 3C, 39, 33
-27, 0E, 1D, 3A, 35, 2B, 16, 2C,
-18, 30, 21, 02, 05, 0B, 17, 2E,
-1C, 38, 31, 23, 06, 0D, 1B, 36,
-2D, 1A, 34, 29, 12, 24, 08, 11,
-22, 04, 09, 13, 26, 0C, 19, 32,
-25, 0A, 15, 2A, 14, 28, 10, 20
-
-There is also a strange address (AD) to location (LOC) mapping performed by the
-tms1000 family.
-
-From tms1000 family pdf:
-AD LOC
-000 000000 003 000011
-001 000001 004 000100
-003 000011 00C 001100
-007 000111 01C 011100
-00F 001111 03C 111100
-01F 011111 03F 111111
-03F 111111 03E 111110
-03E 111110 039 111001
-03D 111101 036 110110
-03B 111011 02E 101110
-037 110111 01E 011110
-02F 101111 03D 111101
-01E 011110 038 111000
-03C 111100 031 110001
-039 111001 026 100110
-033 110011 00E 001110
-027 100111 01D 011101
-00E 001110 03B 111011
-01D 011101 037 110111
-03A 111010 029 101001
-035 110101 016 010110
-02B 101011 02D 101101
-016 010110 018 011000
-02C 101100 032 110010
-018 011000 020 100000
-030 110000 001 000001
-021 100001 005 000101
-002 000010 00B 001011
-005 000101 014 010100
-00B 001011 02C 101100
-017 010111 01F 011111
-02E 101110 03A 111010
-01C 011100 030 110000
-038 111000 021 100001
-031 110001 006 000110
-023 100011 00D 001101
-006 000110 01B 011011
-00D 001101 034 110100
-01B 011011 02F 101111
-036 110110 019 011001
-02D 101101 035 110101
-01A 011010 028 101000
-034 110100 011 010001
-029 101001 025 100101
-012 010010 008 001000
-024 100100 012 010010
-008 001000 023 100011
-011 010001 007 000111
-022 100010 00A 001010
-004 000100 013 010011
-009 001001 024 100100
-013 010011 00F 001111
-026 100110 01A 011010
-00C 001100 033 110011
-019 011001 027 100111
-032 110010 009 001001
-025 100101 015 010101
-00A 001010 02B 101011
-015 010101 017 010111
-02A 101010 02A 101010
-014 010100 010 010000
-028 101000 022 100010
-010 010000 000 000000
-020 100000 002 000010
-
-The following formula seems to be used to decode a program counter
-into a rom address:
-location{5:2} = pc{3:0}
-location{1:0} = ( pc{5:4} == 00 && pc{0} == 0 ) => 11
- ( pc{5:4} == 00 && pc{0} == 1 ) => 00
- ( pc{5:4} == 01 && pc{0} == 0 ) => 00
- ( pc{5:4} == 01 && pc{0} == 1 ) => 11
- ( pc{5:4} == 10 && pc{0} == 0 ) => 10
- ( pc{5:4} == 10 && pc{0} == 1 ) => 01
- ( pc{5:4} == 11 && pc{0} == 0 ) => 01
- ( pc{5:4} == 11 && pc{0} == 1 ) => 10
+void tms1000_cpu_device::device_reset()
+{
+ // common reset
+ tms1xxx_cpu_device::device_reset();
+
+ // pre-decode instructionset
+ m_fixed_decode.resize_and_clear(0x100);
+ m_micro_decode.resize_and_clear(0x100);
+
+ for (int op = 0; op < 0x100; op++)
+ {
+ // _____ _____ ______ _____ ______ _____ _____ _____ _____
+ const UINT32 md[16] = { M_STSL, M_AUTY, M_AUTA, M_CIN, M_C8, M_NE, M_CKN, M_15TN, M_MTN, M_NATN, M_ATN, M_MTP, M_YTP, M_CKP, M_CKM, M_STO };
+ UINT16 mask = m_mpla->read(op);
+ mask ^= 0x3fc8; // invert active-negative
+
+ for (int bit = 0; bit < 16; bit++)
+ if (mask & (1 << bit))
+ m_micro_decode[op] |= md[bit];
+ }
-*/
-static const UINT8 tms1000_next_pc[64] =
+ // the fixed instruction set is not programmable
+ m_fixed_decode[0x00] = F_COMX;
+ m_fixed_decode[0x0a] = F_TDO;
+ m_fixed_decode[0x0b] = F_CLO;
+ m_fixed_decode[0x0c] = F_RSTR;
+ m_fixed_decode[0x0d] = F_SETR;
+ m_fixed_decode[0x0f] = F_RETN;
+
+ for (int i = 0x10; i < 0x20; i++) m_fixed_decode[i] = F_LDP;
+ for (int i = 0x30; i < 0x34; i++) m_fixed_decode[i] = F_SBIT;
+ for (int i = 0x34; i < 0x38; i++) m_fixed_decode[i] = F_RBIT;
+ for (int i = 0x3c; i < 0x40; i++) m_fixed_decode[i] = F_LDX;
+
+ for (int i = 0x80; i < 0xc0; i++) m_fixed_decode[i] = F_BR;
+ for (int i = 0xc0; i < 0x100; i++) m_fixed_decode[i] = F_CALL;
+}
+
+void tms1100_cpu_device::device_reset()
{
- 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F,
- 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A, 0x3C, 0x3F,
- 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C, 0x1E,
- 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B, 0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3E,
-};
+ tms1000_cpu_device::device_reset();
+
+ // small differences in 00-3f area
+ m_fixed_decode[0x00] = 0;
+ m_fixed_decode[0x09] = F_COMX8; // !
+ m_fixed_decode[0x0b] = F_COMC;
+
+ for (int i = 0x28; i < 0x30; i++) m_fixed_decode[i] = F_LDX;
+ for (int i = 0x3c; i < 0x40; i++) m_fixed_decode[i] = 0;
+}
-/* emulator for the program counter increment on the tms0980/tmc0980 mcu;
- see patent 4064554 figure 19 (on page 13) for an explanation of feedback:
-
- nand324 = NAND of PC0 through pc4, i.e. output is true if ((pc&0x1f) != 0x1f)
- nand323 = NAND of pc5, pc6 and nand324
- i.e. output is true, if ((pc&0x1f)==0x1f) || pc5 is 0 || pc 6 is 0
- or321 = OR of pc5 and pc6, i.e. output is true if ((pc&0x60) != 0)
- nand322 = NAND of pc0 through pc5 plus /pc6,
- i.e. output is true if (pc != 0x3f)
- nand325 = nand of nand323, or321 and nand322
- This one is complex:
- / or321 means if pc&0x60 is zero, output MUST be true
- \ nand323 means if (pc&0x60=0x60) && (pc&0x1f != 0x1f), output MUST be true
- nand322 means if pc = 0x3f, output MUST be true
- hence, nand325 is if pc = 0x7f, false. if pc = 0x3f, true. if pc&0x60 is zero OR pc&0x60 is 0x60, true. otherwise, false.
-
- tms0980_next_pc below implements an identical function to this in a somewhat more elegant way.
-*/
-void tms1xxx_cpu_device::next_pc()
+
+void tms0970_cpu_device::device_reset()
{
- if ( m_byte_size > 8 )
- {
- UINT8 xorval = ( m_pc & 0x3F ) == 0x3F ? 1 : 0;
- UINT8 new_bit = ( ( m_pc ^ ( m_pc << 1 ) ) & 0x40 ) ? xorval : 1 - xorval;
+ // common reset
+ tms1xxx_cpu_device::device_reset();
- m_pc = ((m_pc << 1) | new_bit) & ((1 << m_pc_size) - 1);
- }
- else
+ // pre-decode instructionset
+ m_fixed_decode.resize_and_clear(0x100);
+ m_micro_decode.resize_and_clear(0x100);
+
+ for (int op = 0; op < 0x100; op++)
{
- m_pc = tms1000_next_pc[ m_pc & 0x3f ];
+ // upper half of the opcodes is always branch/call
+ if (op & 0x80)
+ m_fixed_decode[op] = (op & 0x40) ? F_CALL: F_BR;
+
+ // 5 output bits select a microinstruction index
+ UINT32 imask = m_ipla->read(op);
+ UINT8 msel = imask & 0x1f;
+
+ // but if (from bottom to top) term 1 is active and output bit 5 is 0, R2,R4-R7 directly select a microinstruction index
+ if (imask & 0x40 && (imask & 0x20) == 0)
+ msel = (op & 0xf) | (op >> 1 & 0x10);
+
+ msel = BITSWAP8(msel,7,6,5,0,1,2,3,4); // lines are reversed
+ UINT32 mmask = m_mpla->read(msel);
+ mmask ^= 0x09fe; // invert active-negative
+
+ // _____ _____ _____ _____ ______ _____ ______ _____ _____
+ const UINT32 md[15] = { M_CKM, M_CKP, M_YTP, M_MTP, M_ATN, M_NATN, M_MTN, M_15TN, M_CKN, M_NE, M_C8, M_CIN, M_AUTA, M_AUTY, M_STO };
+
+ for (int bit = 0; bit < 15; bit++)
+ if (mmask & (1 << bit))
+ m_micro_decode[op] |= md[bit];
+
+ // the other ipla terms each select a fixed instruction
+ const UINT32 id[8] = { F_LDP, F_TDO, F_COMX, F_LDX, F_SBIT, F_RBIT, F_SETR, F_RETN };
+
+ for (int bit = 0; bit < 8; bit++)
+ if (imask & (0x80 << bit))
+ m_fixed_decode[op] |= id[bit];
}
}
-static const UINT8 tms1000_pc_decode[64] =
+UINT32 tms0980_cpu_device::decode_micro(UINT8 sel)
{
- 0x03, 0x04, 0x0B, 0x0C, 0x13, 0x14, 0x1B, 0x1C,
- 0x23, 0x24, 0x2B, 0x2C, 0x33, 0x34, 0x3B, 0x3C,
- 0x00, 0x07, 0x08, 0x0F, 0x10, 0x17, 0x18, 0x1F,
- 0x20, 0x27, 0x28, 0x2F, 0x30, 0x37, 0x38, 0x3F,
- 0x02, 0x05, 0x0A, 0x0D, 0x12, 0x15, 0x1A, 0x1D,
- 0x22, 0x25, 0x2A, 0x2D, 0x32, 0x35, 0x3A, 0x3D,
- 0x01, 0x06, 0x09, 0x0E, 0x11, 0x16, 0x19, 0x1E,
- 0x21, 0x26, 0x29, 0x2E, 0x31, 0x36, 0x39, 0x3E
-};
-
+ UINT32 decode = 0;
+
+ sel = BITSWAP8(sel,7,6,0,1,2,3,4,5); // lines are reversed
+ UINT32 mask = m_mpla->read(sel);
+ mask ^= 0x43fc3; // invert active-negative
+
+ // _______ ______ _____ _____ _____ _____ ______ _____ ______ _____ _____
+ const UINT32 md[20] = { M_NDMTP, M_DMTP, M_AUTY, M_AUTA, M_CKM, M_SSE, M_CKP, M_YTP, M_MTP, M_ATN, M_NATN, M_MTN, M_15TN, M_CKN, M_NE, M_C8, M_SSS, M_CME, M_CIN, M_STO };
+
+ for (int bit = 0; bit < 20; bit++)
+ if (mask & (1 << bit))
+ decode |= md[bit];
+
+ return decode;
+}
-void tms1xxx_cpu_device::set_cki_bus()
+void tms0980_cpu_device::device_reset()
{
- switch( m_opcode & 0x1F8 )
+ // common reset
+ tms1xxx_cpu_device::device_reset();
+
+ // pre-decode instructionset
+ m_fixed_decode.resize_and_clear(0x200);
+ m_micro_decode.resize_and_clear(0x200);
+
+ for (int op = 0; op < 0x200; op++)
{
- case 0x008:
- m_cki_bus = m_read_k( 0, 0xff );
- break;
- case 0x020: case 0x028:
- m_cki_bus = 0;
- break;
- case 0x030: case 0x038:
- m_cki_bus = tms0980_nbit_value[ m_opcode & 0x03 ];
- break;
- case 0x000:
- case 0x040: case 0x048:
- case 0x050: case 0x058:
- case 0x060: case 0x068:
- case 0x070: case 0x078:
- case 0x080: case 0x088:
- case 0x090: case 0x098:
- case 0x0c0: case 0x0c8:
- case 0x0d0: case 0x0d8:
- case 0x0e0: case 0x0e8:
- case 0x0f0: case 0x0f8:
- m_cki_bus = tms0980_c4_value[ m_opcode & 0x0F ];
- break;
- default:
- m_cki_bus = 0x0F;
- break;
+ // upper half of the opcodes is always branch/call
+ if (op & 0x100)
+ m_fixed_decode[op] = (op & 0x80) ? F_CALL: F_BR;
+
+ UINT32 imask = m_ipla->read(op);
+
+ // 6 output bits select a microinstruction index
+ m_micro_decode[op] = decode_micro(imask & 0x3f);
+
+ // the other ipla terms each select a fixed instruction
+ const UINT32 id[15] = { F_LDP, F_SBL, F_OFF, F_RBIT, F_SAL, F_XDA, F_REAC, F_SETR, F_RETN, F_SBIT, F_TDO, F_COMX8, F_COMX, F_LDX, F_SEAC };
+
+ for (int bit = 0; bit < 15; bit++)
+ if (imask & (0x80 << bit))
+ m_fixed_decode[op] |= id[bit];
}
+
+ // like on TMS0970, one of the terms directly select a microinstruction index (via R4-R8),
+ // but it can't be pre-determined when it's active
+ m_micro_direct.resize_and_clear(0x40);
+
+ for (int op = 0; op < 0x40; op++)
+ m_micro_direct[op] = decode_micro(op);
}
-void tms1xxx_cpu_device::execute_run()
+
+
+
+void tms1xxx_cpu_device::next_pc()
{
- do
- {
- m_icount--;
- switch( m_subcycle )
- {
- case 0:
- /* fetch: rom address 0 */
- /* execute: read ram, alu input, execute br/call, k input valid */
- set_cki_bus();
- m_ram_data = m_data->read_byte( m_ram_address );
- m_status = 1;
- m_p = 0;
- m_n = 0;
- m_carry_in = 0;
- break;
- case 1:
- /* fetch: rom address 1 */
- m_rom_address = ( m_ca << ( m_pc_size + 4 ) ) | ( m_pa << m_pc_size ) | m_pc;
- /* execute: k input valid */
- if ( m_decode & MICRO_MASK )
- {
- /* Check N inputs */
- if ( m_decode & ( M_15TN | M_ATN | M_CKN | M_MTN | M_NATN ) )
- {
- m_n = 0;
- if ( m_decode & M_15TN )
- {
- m_n |= 0x0F;
- }
- if ( m_decode & M_ATN )
- {
- m_n |= m_a;
- }
- if ( m_decode & M_CKN )
- {
- m_n |= m_cki_bus;
- }
- if ( m_decode & M_MTN )
- {
- m_n |= m_ram_data;
- }
- if ( m_decode & M_NATN )
- {
- m_n |= ( ( ~m_a ) & 0x0F );
- }
- }
+ // The program counter is a LFSR. To put it simply, the feedback bit is a XOR of the two highest bits,
+ // but it makes an exception when all low bits are set (eg. in TMS1000 case, when PC is 0x1f or 0x3f).
+ int high = 1 << (m_pc_bits - 1);
+ int fb = (m_pc << 1 & high) == (m_pc & high);
+
+ if (m_pc == (m_pc_mask >> 1))
+ fb = 1;
+ else if (m_pc == m_pc_mask)
+ fb = 0;
+
+ m_pc = (m_pc << 1 | fb) & m_pc_mask;
+}
+void tms1xxx_cpu_device::read_opcode()
+{
+ debugger_instruction_hook(this, m_rom_address);
+ m_opcode = m_program->read_byte(m_rom_address);
+ m_c4 = BITSWAP8(m_opcode,7,6,5,4,0,1,2,3) & 0xf; // opcode operand is bitswapped for most opcodes
- /* Check P inputs */
- if ( m_decode & ( M_CKP | M_DMTP | M_MTP | M_NDMTP | M_YTP ) )
- {
- m_p = 0;
- if ( m_decode & M_CKP )
- {
- m_p |= m_cki_bus;
- }
- if ( m_decode & M_DMTP )
- {
- m_p |= m_dam;
- }
- if ( m_decode & M_MTP )
- {
- m_p |= m_ram_data;
- }
- if ( m_decode & M_NDMTP )
- {
- m_p |= ( ( ~m_dam ) & 0x0F );
- }
- if ( m_decode & M_YTP )
- {
- m_p |= m_y;
- }
- }
+ m_fixed = m_fixed_decode[m_opcode];
+ m_micro = m_micro_decode[m_opcode];
- /* Carry In input */
- if ( m_decode & M_CIN )
- {
- m_carry_in = 1;
- }
- }
+ next_pc();
+}
+
+void tms0980_cpu_device::read_opcode()
+{
+ debugger_instruction_hook(this, m_rom_address << 1);
+ m_opcode = m_program->read_word(m_rom_address << 1) & 0x1ff;
+ m_c4 = BITSWAP8(m_opcode,7,6,5,4,0,1,2,3) & 0xf; // opcode operand is bitswapped for most opcodes
+
+ m_fixed = m_fixed_decode[m_opcode];
+
+ // if ipla term 0 is active, R4-R8 directly select a microinstruction index when R0 or R0^BL is 0
+ int r0 = m_opcode >> 8 & 1;
+ if (m_ipla->read(m_opcode) & 0x40 && !((r0 & m_bl) ^ r0))
+ m_micro = m_micro_direct[m_opcode & 0x3f];
+ else
+ m_micro = m_micro_decode[m_opcode];
+
+ next_pc();
+}
+
+
+void tms1xxx_cpu_device::write_o_output(UINT8 data)
+{
+ // a hardcoded table is supported if the output pla is unknown
+ m_o = (c_output_pla == NULL) ? m_opla->read(data) : c_output_pla[data];
+
+ if ((m_o & 0xff00) == 0xff00)
+ logerror("unknown output pla mapping for index %02X\n", data);
+
+ m_write_o(0, m_o & m_o_mask, 0xffff);
+}
+
+void tms0970_cpu_device::write_o_output(UINT8 data)
+{
+ m_o = m_spla->read(data);
+ m_write_o(0, m_o & m_o_mask, 0xffff);
+}
+
+UINT8 tms1xxx_cpu_device::read_k_input()
+{
+ // K1,2,4,8,3 (KC test pin is not emulated)
+ UINT8 k = m_read_k(0, 0xff) & m_k_mask;
+ UINT8 k3 = (k & 0x10) ? 3: 0; // the K3 line that is on some chips, is simply K1|K2
+ return (k & 0xf) | k3;
+}
+
+
+void tms1xxx_cpu_device::set_cki_bus()
+{
+ switch (m_opcode & 0xf8)
+ {
+ // 00001XXX: K-inputs
+ case 0x08:
+ m_cki_bus = read_k_input();
break;
- case 2:
- /* fetch: nothing */
- /* execute: write ram */
- /* perform adder logic */
- m_adder_result = m_p + m_n + m_carry_in;
- if ( m_decode & MICRO_MASK )
- {
- if ( m_decode & M_NE )
- {
- if ( m_n == m_p )
- {
- m_status = 0;
- }
- }
- if ( m_decode & M_C8 )
- {
- m_status = m_adder_result >> 4;
- }
- if ( m_decode & M_STO )
- {
- m_data->write_byte( m_ram_address, m_a );
- }
- if ( m_decode & M_CKM )
- {
- m_data->write_byte( m_ram_address, m_cki_bus );
- }
- }
- else
- {
- if ( m_decode & F_SBIT )
- {
- m_data->write_byte( m_ram_address, m_ram_data | tms0980_bit_value[ m_opcode & 0x03 ] );
- }
- if ( m_decode & F_RBIT )
- {
- m_data->write_byte( m_ram_address, m_ram_data & tms0980_nbit_value[ m_opcode & 0x03 ] );
- }
- if ( m_decode & F_SETR )
- {
- m_r = m_r | ( 1 << m_y );
- m_write_r( 0, m_r & m_r_mask, 0xffff );
- }
- if ( m_decode & F_RSTR )
- {
- m_r = m_r & ( ~( 1 << m_y ) );
- m_write_r( 0, m_r & m_r_mask, 0xffff );
- }
- if ( m_decode & F_TDO )
- {
- /* Calculate O-outputs based on status latch, A, and the output PLA configuration */
- m_o = c_output_pla[ ( m_status_latch << 4 ) | m_a ];
- if ( ( c_output_pla[ ( m_status_latch << 4 ) | m_a ] & 0xFF00 ) == 0xFF00 )
- {
- logerror("unknown output pla mapping for status latch = %d and a = %X\n", m_status_latch, m_a);
- }
- m_write_o( 0, m_o & m_o_mask, 0xffff );
- }
- if ( m_decode & F_CLO )
- {
- m_o = 0;
- m_write_o( 0, m_o & m_o_mask, 0xffff );
- }
- if ( m_decode & F_LDX )
- {
- switch( m_x_bits )
- {
- case 2:
- m_x = tms0980_c2_value[ m_opcode & 0x03 ];
- break;
- case 3:
- m_x = tms0980_c3_value[ m_opcode & 0x07 ];
- break;
- case 4:
- m_x = tms0980_c4_value[ m_opcode & 0x0f ];
- break;
- }
- }
- if ( m_decode & F_COMX )
- {
- switch ( m_x_bits )
- {
- case 2:
- m_x = m_x ^ 0x03;
- break;
- case 3:
- m_x = m_x ^ 0x07;
- break;
- case 4:
- m_x = m_x ^ 0x0f;
- break;
- }
- }
- if ( m_decode & F_COMC )
- {
- m_cb = m_cb ^ 0x01;
- }
- if ( m_decode & F_LDP )
- {
- m_pb = tms0980_c4_value[ m_opcode & 0x0F ];
- }
- if ( m_decode & F_REAC )
- {
- m_special_status = 0;
- }
- if ( m_decode & F_SEAC )
- {
- m_special_status = 1;
- }
- if ( m_decode == F_SAL )
- {
- m_add_latch = 1;
- }
- if ( m_decode == F_SBL )
- {
- m_branch_latch = 1;
- }
- }
+ // 0011XXXX: select bit
+ case 0x30: case 0x38:
+ m_cki_bus = 1 << (m_c4 >> 2) ^ 0xf;
break;
- case 3:
- /* fetch: fetch, update pc, ram address */
- /* execute: register store */
+
+ // 01XXXXXX: constant
+ case 0x00: // R2,3,4 are NANDed with eachother, and then ORed with R1, making 00000XXX valid too
+ case 0x40: case 0x48: case 0x50: case 0x58: case 0x60: case 0x68: case 0x70: case 0x78:
+ m_cki_bus = m_c4;
break;
- case 4:
- /* execute: register store */
- if ( m_decode & MICRO_MASK )
- {
- if ( m_decode & M_AUTA )
- {
- m_a = m_adder_result & 0x0F;
- }
- if ( m_decode & M_AUTY )
- {
- m_y = m_adder_result & 0x0F;
- }
- if ( m_decode & M_STSL )
- {
- m_status_latch = m_status;
- }
- }
- /* fetch: fetch, update pc, ram address */
- if ( m_byte_size > 8 )
- {
- debugger_instruction_hook( this, m_rom_address << 1 );
- m_opcode = m_program->read_word( m_rom_address << 1 ) & 0x1FF;
- }
- else
- {
- debugger_instruction_hook( this, m_rom_address );
- m_opcode = m_program->read_byte( m_rom_address );
- }
- next_pc();
- /* ram address */
- m_ram_address = ( m_x << 4 ) | m_y;
+ default:
+ m_cki_bus = 0;
break;
- case 5:
- /* fetch: instruction decode */
- m_decode = m_decode_table[ m_opcode ];
- /* execute: execute br/call */
- if ( m_status )
- {
- if ( m_decode == F_BR )
- {
- m_ca = m_cb;
- if ( m_call_latch == 0 )
- {
- m_pa = m_pb;
- }
- m_pc = m_opcode & ( ( 1 << m_pc_size ) - 1 );
- }
- if ( m_decode == F_CALL )
- {
- UINT8 t = m_pa;
- if ( m_call_latch == 0 )
- {
- m_sr = m_pc;
- m_call_latch = 1;
- m_pa = m_pb;
- m_cs = m_ca;
- }
- m_ca = m_cb;
- m_pb = t;
- m_pc = m_opcode & ( ( 1 << m_pc_size ) - 1 );
- }
- }
- if ( m_decode == F_RETN )
- {
- if ( m_call_latch == 1 )
- {
- m_pc = m_sr;
- m_call_latch = 0;
- m_ca = m_cs;
- }
- m_add_latch = 0;
- m_pa = m_pb;
- } else {
- m_branch_latch = 0;
- }
- break;
- }
- m_subcycle = ( m_subcycle + 1 ) % 6;
- } while( m_icount > 0 );
+ }
}
-
-void tms0980_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
+void tms0980_cpu_device::set_cki_bus()
{
- switch( entry.index() )
+ switch (m_opcode & 0x1f8)
{
- case STATE_GENPC:
- string.printf( "%03X", ( ( m_pa << 7 ) | m_pc ) << 1 );
+ // 000001XXX: K-inputs
+ case 0x008:
+ m_cki_bus = read_k_input();
+ break;
+
+ // 0X0100XXX: select bit
+ case 0x020: case 0x0a0:
+ m_cki_bus = 1 << (m_c4 >> 2) ^ 0xf;
+ break;
+
+ // 0X1XXXXXX: constant
+ case 0x040: case 0x048: case 0x050: case 0x058: case 0x060: case 0x068: case 0x070: case 0x078:
+ case 0x0c0: case 0x0c8: case 0x0d0: case 0x0d8: case 0x0e0: case 0x0e8: case 0x0f0: case 0x0f8:
+ m_cki_bus = m_c4;
+ break;
+
+ default:
+ m_cki_bus = 0;
break;
}
}
-void tms1000_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
+// fixed opcode set
+
+// TMS1000/common:
+
+void tms1xxx_cpu_device::op_sbit()
{
- switch( entry.index() )
- {
- case STATE_GENPC:
- string.printf( "%03X", ( m_pa << 6 ) | tms1000_pc_decode[ m_pc ] );
- break;
- }
+ // SBIT: set memory bit
+ if (m_ram_out == -1)
+ m_ram_out = m_ram_in;
+ m_ram_out |= (m_cki_bus ^ 0xf);
}
+void tms1xxx_cpu_device::op_rbit()
+{
+ // RBIT: reset memory bit
+ if (m_ram_out == -1)
+ m_ram_out = m_ram_in;
+ m_ram_out &= m_cki_bus;
+}
-void tms1100_cpu_device::state_string_export(const device_state_entry &entry, astring &string)
+void tms1xxx_cpu_device::op_setr()
{
- switch( entry.index() )
- {
- case STATE_GENPC:
- string.printf( "%03X", ( m_ca << 10 ) | ( m_pa << 6 ) | m_pc );
- break;
- }
+ // SETR: set one R-output line
+ m_r = m_r | (1 << m_y);
+ m_write_r(0, m_r & m_r_mask, 0xffff);
}
+void tms1xxx_cpu_device::op_rstr()
+{
+ // RSTR: reset one R-output line
+ m_r = m_r & ~(1 << m_y);
+ m_write_r(0, m_r & m_r_mask, 0xffff);
+}
-tms0980_cpu_device::tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1xxx_cpu_device( mconfig, TMS0980, "TMS0980", tag, owner, clock, tms0980_decode, 0x00ff, 0x07ff, 7, 9, 4
- , 12, ADDRESS_MAP_NAME( program_11bit_9 ), 8, ADDRESS_MAP_NAME( data_64x9_as4 ), "tms0980", __FILE__)
+void tms1xxx_cpu_device::op_tdo()
+{
+ // TDO: transfer accumulator and status latch to O-output
+ write_o_output(m_status_latch << 4 | m_a);
+}
+
+void tms1xxx_cpu_device::op_clo()
{
+ // CLO: clear O-output
+ write_o_output(0);
}
+void tms1xxx_cpu_device::op_ldx()
+{
+ // LDX: load X register with (x_bits) constant
+ m_x = m_c4 >> (4-m_x_bits);
+}
-offs_t tms0980_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+void tms1xxx_cpu_device::op_comx()
{
- extern CPU_DISASSEMBLE( tms0980 );
- return CPU_DISASSEMBLE_NAME(tms0980)(this, buffer, pc, oprom, opram, options);
+ // COMX: complement X register
+ m_x ^= m_x_mask;
}
+void tms1xxx_cpu_device::op_comx8()
+{
+ // COMX8: complement MSB of X register
+ // note: on TMS1100, the mnemonic is simply called "COMX"
+ m_x ^= 1 << (m_x_bits-1);
+}
-tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1xxx_cpu_device( mconfig, TMS1000, "TMS1000", tag, owner, clock, tms1000_default_decode, 0x00ff, 0x07ff, 6, 8, 2
- , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_64x4 ), "tms1000", __FILE__)
+void tms1xxx_cpu_device::op_ldp()
{
+ // LDP: load page buffer with constant
+ m_pb = m_c4;
}
-tms1000_cpu_device::tms1000_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source)
- : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1000_default_decode, o_mask, r_mask, 6, 8, 2
- , 10, ADDRESS_MAP_NAME( program_10bit_8 ), 6, ADDRESS_MAP_NAME( data_64x4 ), shortname, source )
+// TMS1100-specific
+
+void tms1100_cpu_device::op_setr()
{
+ // SETR: same, but X register MSB must be clear
+ if (~m_x & (1 << (m_x_bits-1)))
+ tms1xxx_cpu_device::op_setr();
}
+void tms1100_cpu_device::op_rstr()
+{
+ // RSTR: same, but X register MSB must be clear
+ if (~m_x & (1 << (m_x_bits-1)))
+ tms1xxx_cpu_device::op_rstr();
+}
-offs_t tms1000_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+void tms1xxx_cpu_device::op_comc()
{
- extern CPU_DISASSEMBLE( tms1000 );
- return CPU_DISASSEMBLE_NAME(tms1000)(this, buffer, pc, oprom, opram, options);
+ // COMC: complement chapter buffer
+ m_cb ^= 1;
}
-tms0970_cpu_device::tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1000_cpu_device( mconfig, TMS0970, "TMS0970", tag, owner, clock, 0x00ff, 0x07ff, "tms0970", __FILE__)
+// TMS09x0-specific
+void tms0970_cpu_device::op_setr()
{
+ // SETR: set output register
+ // DDIG line is a coincidence between the selected output pla row(s) and segment pla row(s)
+ int ddig = (m_opla->read(m_a) & m_o) ? 0 : 1;
+ m_r = (m_r & ~(1 << m_y)) | (ddig << m_y);
}
-tms1070_cpu_device::tms1070_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1000_cpu_device( mconfig, TMS1070, "TMS1070", tag, owner, clock, 0x00ff, 0x07ff, "tms1070", __FILE__)
+void tms0970_cpu_device::op_tdo()
{
+ // TDO: transfer digits to output
+ write_o_output(m_a & 0x7);
+ m_write_r(0, m_r & m_r_mask, 0xffff);
}
-tms1200_cpu_device::tms1200_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1000_cpu_device( mconfig, TMS1200, "TMS1200", tag, owner, clock, 0x00ff, 0x1fff, "tms1200", __FILE__)
+// TMS0980-specific
+void tms0980_cpu_device::op_comx()
{
+ // COMX: complement X register, but not the MSB
+ m_x ^= (m_x_mask >> 1);
}
+void tms1xxx_cpu_device::op_xda()
+{
+ // XDA: exchange DAM and A
+ // note: setting A to DAM is done with DMTP and AUTA during this instruction
+ m_ram_address |= (0x10 << (m_x_bits-1));
+}
-tms1270_cpu_device::tms1270_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1000_cpu_device( mconfig, TMS1270, "TMS1270", tag, owner, clock, 0x03ff, 0x1fff, "tms1270", __FILE__)
+void tms1xxx_cpu_device::op_off()
{
+ // OFF: request power off
+ logerror("%s: power-off request\n", tag());
+ m_power_off(1);
}
+void tms1xxx_cpu_device::op_seac()
+{
+ // SEAC: set end around carry
+ m_eac = 1;
+}
-tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1xxx_cpu_device( mconfig, TMS1100, "TMS1100", tag, owner, clock, tms1100_default_decode, 0x00ff, 0x07ff, 6, 8, 3
- , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_128x4 ), "tms1100", __FILE__ )
+void tms1xxx_cpu_device::op_reac()
{
+ // REAC: reset end around carry
+ m_eac = 0;
}
+void tms1xxx_cpu_device::op_sal()
+{
+ // SAL: set add latch (reset is done with RETN)
+ m_add = 1;
+}
-tms1100_cpu_device::tms1100_cpu_device(const machine_config &mconfig, device_type type, const char*name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source)
- : tms1xxx_cpu_device( mconfig, type, name, tag, owner, clock, tms1100_default_decode, o_mask, r_mask, 6, 8, 3
- , 11, ADDRESS_MAP_NAME( program_11bit_8 ), 7, ADDRESS_MAP_NAME( data_128x4 ), shortname, source )
+void tms1xxx_cpu_device::op_sbl()
{
+ // SBL: set branch latch (reset is done with RETN)
+ m_bl = 1;
}
-offs_t tms1100_cpu_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
+void tms1xxx_cpu_device::execute_fixed_opcode()
{
- extern CPU_DISASSEMBLE( tms1100 );
- return CPU_DISASSEMBLE_NAME(tms1100)(this, buffer, pc, oprom, opram, options);
+ switch (m_fixed)
+ {
+ case F_SBIT: op_sbit(); break;
+ case F_RBIT: op_rbit(); break;
+ case F_SETR: op_setr(); break;
+ case F_RSTR: op_rstr(); break;
+ case F_TDO: op_tdo(); break;
+ case F_CLO: op_clo(); break;
+ case F_LDX: op_ldx(); break;
+ case F_COMX: op_comx(); break;
+ case F_COMX8:op_comx8();break;
+ case F_LDP: op_ldp(); break;
+ case F_COMC: op_comc(); break;
+ case F_OFF: op_off(); break;
+ case F_SEAC: op_seac(); break;
+ case F_REAC: op_reac(); break;
+ case F_SAL: op_sal(); break;
+ case F_SBL: op_sbl(); break;
+ case F_XDA: op_xda(); break;
+
+ default:
+ // BR, CALL, RETN are handled in execute_run
+ if (m_fixed & ~(F_BR | F_CALL | F_RETN))
+ fatalerror("%s unsupported fixed opcode %03X %04X!\n", tag(), m_opcode, m_fixed);
+ break;
+ }
}
-tms1300_cpu_device::tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : tms1100_cpu_device( mconfig, TMS1300, "TMS1300", tag, owner, clock, 0x00ff, 0xffff, "tms1300", __FILE__ )
+
+void tms1xxx_cpu_device::execute_run()
{
+ do
+ {
+ m_icount--;
+ switch (m_subcycle)
+ {
+ case 0:
+ // fetch: rom address 1/2
+
+ // execute: br/call 2/2
+ // note: add(latch) and bl(branch latch) are specific to 0980 series,
+ // c(chapter) bits are specific to 1100 series
+ if (m_status)
+ {
+ UINT8 new_pc = m_opcode & m_pc_mask;
+
+ // BR: conditional branch
+ if (m_fixed & F_BR)
+ {
+ if (m_clatch == 0)
+ m_pa = m_pb;
+ m_ca = m_cb;
+ m_pc = new_pc;
+ }
+
+ // CALL: conditional call
+ if (m_fixed & F_CALL)
+ {
+ UINT8 prev_pa = m_pa;
+ if (m_clatch == 0)
+ {
+ m_sr = m_pc;
+ m_clatch = 1;
+ m_pa = m_pb;
+ m_cs = m_ca;
+ }
+ m_ca = m_cb;
+ m_pb = prev_pa;
+ m_pc = new_pc;
+ }
+ }
+
+ // RETN: return from subroutine
+ if (m_fixed & F_RETN)
+ {
+ if (m_clatch == 1)
+ {
+ m_pc = m_sr;
+ m_clatch = 0;
+ m_ca = m_cs;
+ }
+ m_add = 0;
+ m_bl = 0;
+ m_pa = m_pb;
+ }
+
+ // execute: k input valid, read ram, clear alu inputs
+ set_cki_bus();
+ m_ram_in = m_data->read_byte(m_ram_address) & 0xf;
+ m_dam_in = m_data->read_byte(m_ram_address | (0x10 << (m_x_bits-1))) & 0xf;
+ m_ram_out = -1;
+ m_status = 1;
+ m_p = 0;
+ m_n = 0;
+ m_carry_in = 0;
+
+ break;
+
+ case 1:
+ // fetch: rom address 2/2
+ m_rom_address = (m_ca << (m_pc_bits+4)) | (m_pa << m_pc_bits) | m_pc;
+
+ // execute: update alu inputs
+ // N inputs
+ if (m_micro & M_15TN) m_n |= 0xf;
+ if (m_micro & M_ATN) m_n |= m_a;
+ if (m_micro & M_NATN) m_n |= (~m_a & 0xf);
+ if (m_micro & M_CKN) m_n |= m_cki_bus;
+ if (m_micro & M_MTN) m_n |= m_ram_in;
+
+ // P inputs
+ if (m_micro & M_CKP) m_p |= m_cki_bus;
+ if (m_micro & M_MTP) m_p |= m_ram_in;
+ if (m_micro & M_YTP) m_p |= m_y;
+ if (m_micro & M_DMTP) m_p |= m_dam_in;
+ if (m_micro & M_NDMTP) m_p |= (~m_dam_in & 0xf);
+
+ // carry input
+ if (m_micro & M_CIN) m_carry_in |= 1;
+ if (m_micro & M_SSS) m_carry_in |= m_eac;
+
+ break;
+
+ case 2:
+ {
+ // fetch: nothing
+
+ // execute: perform alu logic
+ // note: officially, only 1 alu operation is allowed per opcode
+ m_adder_out = m_p + m_n + m_carry_in;
+ int carry_out = m_adder_out >> 4 & 1;
+
+ if (m_micro & M_C8) m_status &= carry_out;
+ if (m_micro & M_NE) m_status &= (m_n != m_p); // COMP
+
+ if (m_micro & M_CKM) m_ram_out = m_cki_bus;
+
+ // special status circuit
+ if (m_micro & M_SSE)
+ {
+ m_eac = m_carry_out;
+ if (m_add)
+ m_eac |= carry_out;
+ }
+ m_carry_out = carry_out;
+
+ if (m_micro & M_STO || (m_micro & M_CME && m_eac == m_add))
+ m_ram_out = m_a;
+
+ // handle the fixed opcodes here
+ execute_fixed_opcode();
+
+ // execute: write ram
+ if (m_ram_out != -1)
+ m_data->write_byte(m_ram_address, m_ram_out);
+
+ break;
+ }
+
+ case 3:
+ // fetch: update pc, ram address 1/2
+ // execute: register store 1/2
+ break;
+
+ case 4:
+ // execute: register store 2/2
+ if (m_micro & M_AUTA) m_a = m_adder_out & 0xf;
+ if (m_micro & M_AUTY) m_y = m_adder_out & 0xf;
+ if (m_micro & M_STSL) m_status_latch = m_status;
+
+ // fetch: update pc, ram address 2/2
+ read_opcode();
+ m_ram_address = m_x << 4 | m_y;
+ break;
+
+ case 5:
+ // fetch: instruction decode (handled above, before next_pc)
+ // execute: br/call 1/2
+ break;
+ }
+ m_subcycle = (m_subcycle + 1) % 6;
+ } while (m_icount > 0);
}
diff --git a/src/emu/cpu/tms0980/tms0980.h b/src/emu/cpu/tms0980/tms0980.h
index c24dcacab25..25556f0121f 100644
--- a/src/emu/cpu/tms0980/tms0980.h
+++ b/src/emu/cpu/tms0980/tms0980.h
@@ -1,61 +1,65 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol, hap
+/*
+
+ TMS0980/TMS1000-family MCU cores
+
+*/
#ifndef _TMS0980_H_
#define _TMS0980_H_
-
-/* Registers */
-enum {
- TMS0980_PC=1, TMS0980_SR, TMS0980_PA, TMS0980_PB,
- TMS0980_A, TMS0980_X, TMS0980_Y, TMS0980_STATUS
-};
+#include "emu.h"
+#include "machine/pla.h"
#define MCFG_TMS1XXX_OUTPUT_PLA(_pla) \
tms1xxx_cpu_device::set_output_pla(*device, _pla);
-#define MCFG_TMS1XXX_READ_K(_devcb) \
- tms1xxx_cpu_device::set_read_k(*device, DEVCB_##_devcb);
+#define MCFG_TMS1XXX_READ_K_CB(_devcb) \
+ tms1xxx_cpu_device::set_read_k_callback(*device, DEVCB_##_devcb);
+
+#define MCFG_TMS1XXX_WRITE_O_CB(_devcb) \
+ tms1xxx_cpu_device::set_write_o_callback(*device, DEVCB_##_devcb);
-#define MCFG_TMS1XXX_WRITE_O(_devcb) \
- tms1xxx_cpu_device::set_write_o(*device, DEVCB_##_devcb);
+#define MCFG_TMS1XXX_WRITE_R_CB(_devcb) \
+ tms1xxx_cpu_device::set_write_r_callback(*device, DEVCB_##_devcb);
-#define MCFG_TMS1XXX_WRITE_R(_devcb) \
- tms1xxx_cpu_device::set_write_r(*device, DEVCB_##_devcb);
+#define MCFG_TMS1XXX_POWER_OFF_CB(_devcb) \
+ tms1xxx_cpu_device::set_power_off_callback(*device, DEVCB_##_devcb);
class tms1xxx_cpu_device : public cpu_device
{
public:
// construction/destruction
- tms1xxx_cpu_device( const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock
- , const UINT32* decode_table, UINT16 o_mask, UINT16 r_mask, UINT8 pc_size, UINT8 byte_size, UINT8 x_bits
- , int program_addrbus_width, address_map_constructor program, int data_addrbus_width, address_map_constructor data, const char *shortname, const char *source)
- : cpu_device( mconfig, type, name, tag, owner, clock, shortname, source)
- , m_program_config("program", ENDIANNESS_BIG, byte_size > 8 ? 16 : 8, program_addrbus_width, 0, program )
- , m_data_config("data", ENDIANNESS_BIG, 8, data_addrbus_width, 0, data )
- , m_pc(0)
- , m_pa(0)
- , m_sr(0)
- , m_pb(0)
- , m_a(0)
- , m_x(0)
- , m_y(0)
- , m_status(0)
- , m_o_mask( o_mask )
- , m_r_mask( r_mask )
- , m_pc_size( pc_size )
- , m_byte_size( byte_size )
- , m_x_bits( x_bits )
- , m_decode_table( decode_table )
- , c_output_pla( NULL )
- , m_read_k( *this )
- , m_write_o( *this )
- , m_write_r( *this )
+ tms1xxx_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock
+ , UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits
+ , int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source)
+ : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source)
+ , m_program_config("program", ENDIANNESS_BIG, byte_bits > 8 ? 16 : 8, prgwidth, 0, program)
+ , m_data_config("data", ENDIANNESS_BIG, 8, datawidth, 0, data)
+ , m_mpla(*this, "mpla")
+ , m_ipla(*this, "ipla")
+ , m_opla(*this, "opla")
+ , m_spla(*this, "spla")
+ , m_o_pins(o_pins)
+ , m_r_pins(r_pins)
+ , m_k_pins(k_pins)
+ , m_pc_bits(pc_bits)
+ , m_byte_bits(byte_bits)
+ , m_x_bits(x_bits)
+ , c_output_pla(NULL)
+ , m_read_k(*this)
+ , m_write_o(*this)
+ , m_write_r(*this)
+ , m_power_off(*this)
{ }
// static configuration helpers
- template<class _Object> static devcb_base &set_read_k(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_read_k.set_callback(object); }
- template<class _Object> static devcb_base &set_write_o(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_o.set_callback(object); }
- template<class _Object> static devcb_base &set_write_r(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_r.set_callback(object); }
+ template<class _Object> static devcb_base &set_read_k_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_read_k.set_callback(object); }
+ template<class _Object> static devcb_base &set_write_o_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_o.set_callback(object); }
+ template<class _Object> static devcb_base &set_write_r_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_write_r.set_callback(object); }
+ template<class _Object> static devcb_base &set_power_off_callback(device_t &device, _Object object) { return downcast<tms1xxx_cpu_device &>(device).m_power_off.set_callback(object); }
static void set_output_pla(device_t &device, const UINT16 *output_pla) { downcast<tms1xxx_cpu_device &>(device).c_output_pla = output_pla; }
protected:
@@ -65,62 +69,98 @@ protected:
// device_execute_interface overrides
virtual UINT32 execute_min_cycles() const { return 1; }
- virtual UINT32 execute_max_cycles() const { return 6; }
+ virtual UINT32 execute_max_cycles() const { return 1; }
virtual UINT32 execute_input_lines() const { return 1; }
virtual void execute_run();
// device_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : ( (spacenum == AS_DATA ) ? &m_data_config : NULL ); }
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return(spacenum == AS_PROGRAM) ? &m_program_config :((spacenum == AS_DATA) ? &m_data_config : NULL); }
// device_disasm_interface overrides
virtual UINT32 disasm_min_opcode_bytes() const { return 1; }
virtual UINT32 disasm_max_opcode_bytes() const { return 1; }
+ void state_string_export(const device_state_entry &entry, astring &string);
+
void next_pc();
- void set_cki_bus();
+ void execute_fixed_opcode();
+
+ virtual void write_o_output(UINT8 data);
+ virtual UINT8 read_k_input();
+ virtual void set_cki_bus();
+ virtual void read_opcode();
+
+ virtual void op_sbit();
+ virtual void op_rbit();
+ virtual void op_setr();
+ virtual void op_rstr();
+ virtual void op_tdo();
+ virtual void op_clo();
+ virtual void op_ldx();
+ virtual void op_comx();
+ virtual void op_comx8();
+ virtual void op_ldp();
+
+ virtual void op_comc();
+ virtual void op_xda();
+ virtual void op_off();
+ virtual void op_seac();
+ virtual void op_reac();
+ virtual void op_sal();
+ virtual void op_sbl();
address_space_config m_program_config;
address_space_config m_data_config;
- UINT8 m_prev_pc; /* previous program counter */
- UINT8 m_prev_pa; /* previous page address register */
- UINT8 m_pc; /* program counter is a 7 bit register on tms0980, 6 bit register on tms1000/1070/1200/1270/1100/1300 */
- UINT8 m_pa; /* page address register is a 4 bit register */
- UINT8 m_sr; /* subroutine return register is a 7 bit register */
- UINT8 m_pb; /* page buffer register is a 4 bit register */
- UINT8 m_a; /* Accumulator is a 4 bit register (?) */
- UINT8 m_x; /* X-register is a 2, 3, or 4 bit register */
- UINT8 m_y; /* Y-register is a 4 bit register */
- UINT8 m_dam; /* DAM register is a 4 bit register */
- UINT8 m_ca; /* Chapter address bit */
- UINT8 m_cb; /* Chapter buffer bit */
- UINT8 m_cs; /* Chapter subroutine bit */
+ optional_device<pla_device> m_mpla;
+ optional_device<pla_device> m_ipla;
+ optional_device<pla_device> m_opla;
+ optional_device<pla_device> m_spla;
+
+ UINT8 m_pc; // 6 or 7-bit program counter
+ UINT8 m_sr; // 6 or 7-bit subroutine return register
+ UINT8 m_pa; // 4-bit page address register
+ UINT8 m_pb; // 4-bit page buffer register
+ UINT8 m_a; // 4-bit accumulator
+ UINT8 m_x; // 2,3,or 4-bit RAM X register
+ UINT8 m_y; // 4-bit RAM Y register
+ UINT8 m_ca; // chapter address bit
+ UINT8 m_cb; // chapter buffer bit
+ UINT8 m_cs; // chapter subroutine bit
UINT16 m_r;
- UINT8 m_o;
- UINT8 m_cki_bus; /* CKI bus */
- UINT8 m_p; /* adder p-input */
- UINT8 m_n; /* adder n-input */
- UINT8 m_adder_result; /* adder result */
- UINT8 m_carry_in; /* carry in */
+ UINT16 m_o;
+ UINT8 m_cki_bus;
+ UINT8 m_c4;
+ UINT8 m_p; // 4-bit adder p(lus)-input
+ UINT8 m_n; // 4-bit adder n(egative)-input
+ UINT8 m_adder_out; // adder result
+ UINT8 m_carry_in; // adder carry-in bit
+ UINT8 m_carry_out; // adder carry-out bit
UINT8 m_status;
UINT8 m_status_latch;
- UINT8 m_special_status;
- UINT8 m_call_latch;
- UINT8 m_add_latch;
- UINT8 m_branch_latch;
- int m_subcycle;
+ UINT8 m_eac; // end around carry bit
+ UINT8 m_clatch; // call latch bit
+ UINT8 m_add; // add latch bit
+ UINT8 m_bl; // branch latch bit
+
+ UINT8 m_ram_in;
+ UINT8 m_dam_in;
+ int m_ram_out; // signed!
UINT8 m_ram_address;
- UINT16 m_ram_data;
UINT16 m_rom_address;
UINT16 m_opcode;
- UINT32 m_decode;
+ UINT32 m_fixed;
+ UINT32 m_micro;
+ int m_subcycle;
int m_icount;
- UINT16 m_o_mask; /* mask to determine the number of O outputs */
- UINT16 m_r_mask; /* mask to determine the number of R outputs */
- UINT8 m_pc_size; /* how bits in the PC register */
- UINT8 m_byte_size; /* 8 or 9 bit bytes */
- UINT8 m_x_bits; /* determine the number of bits in the X register */
- const UINT32 *m_decode_table;
+
+ UINT8 m_o_pins; // how many O pins
+ UINT8 m_r_pins; // how many R pins
+ UINT8 m_k_pins; // how many K pins
+ UINT8 m_pc_bits; // how many program counter bits
+ UINT8 m_byte_bits; // how many bits per 'byte'
+ UINT8 m_x_bits; // how many X register bits
+
address_space *m_program;
address_space *m_data;
@@ -128,47 +168,37 @@ protected:
devcb_read8 m_read_k;
devcb_write16 m_write_o;
devcb_write16 m_write_r;
-
+ devcb_write_line m_power_off;
+
+ UINT32 m_o_mask;
+ UINT32 m_r_mask;
+ UINT32 m_k_mask;
+ UINT32 m_pc_mask;
+ UINT32 m_x_mask;
+
+ // lookup tables
+ dynamic_array<UINT32> m_fixed_decode;
+ dynamic_array<UINT32> m_micro_decode;
+ dynamic_array<UINT32> m_micro_direct;
};
-class tms0980_cpu_device : public tms1xxx_cpu_device
-{
-public:
- tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-
-protected:
- // device_state_interface overrides
- void state_string_export(const device_state_entry &entry, astring &string);
-
- // device_disasm_interface overrides
- virtual UINT32 disasm_min_opcode_bytes() const { return 2; }
- virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
- virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
-};
-
class tms1000_cpu_device : public tms1xxx_cpu_device
{
public:
tms1000_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- tms1000_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source);
+ tms1000_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source);
protected:
- // device_state_interface overrides
- void state_string_export(const device_state_entry &entry, astring &string);
-
- virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
-};
+ // overrides
+ virtual void device_reset();
+ virtual machine_config_constructor device_mconfig_additions() const;
-class tms0970_cpu_device : public tms1000_cpu_device
-{
-public:
- tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
};
-
class tms1070_cpu_device : public tms1000_cpu_device
{
public:
@@ -183,45 +213,79 @@ public:
};
-class tms1270_cpu_device : public tms1000_cpu_device
+class tms1100_cpu_device : public tms1000_cpu_device
{
public:
- tms1270_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ tms1100_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source);
+
+protected:
+ // overrides
+ virtual void device_reset();
+
+ virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
+
+ virtual void op_setr();
+ virtual void op_rstr();
+};
+
+class tms1300_cpu_device : public tms1100_cpu_device
+{
+public:
+ tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
-class tms1100_cpu_device : public tms1xxx_cpu_device
+class tms0970_cpu_device : public tms1000_cpu_device
{
public:
- tms1100_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- tms1100_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT16 o_mask, UINT16 r_mask, const char *shortname, const char *source);
+ tms0970_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ tms0970_cpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 o_pins, UINT8 r_pins, UINT8 k_pins, UINT8 pc_bits, UINT8 byte_bits, UINT8 x_bits, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data, const char *shortname, const char *source);
protected:
- // device_state_interface overrides
- void state_string_export(const device_state_entry &entry, astring &string);
+ // overrides
+ virtual void device_reset();
+ virtual machine_config_constructor device_mconfig_additions() const;
- virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
+ virtual void write_o_output(UINT8 data);
+
+ virtual void op_setr();
+ virtual void op_tdo();
};
-class tms1300_cpu_device : public tms1100_cpu_device
+class tms0980_cpu_device : public tms0970_cpu_device
{
public:
- tms1300_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ tms0980_cpu_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+protected:
+ // overrides
+ virtual void device_reset();
+
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+ virtual UINT32 disasm_min_opcode_bytes() const { return 2; }
+ virtual UINT32 disasm_max_opcode_bytes() const { return 2; }
+ virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options);
+
+ virtual void set_cki_bus();
+ virtual void read_opcode();
+
+ virtual void op_comx();
+private:
+ UINT32 decode_micro(UINT8 sel);
};
-/* 9-bit family */
-extern const device_type TMS0980;
-/* 8-bit family */
extern const device_type TMS1000;
-extern const device_type TMS0970;
extern const device_type TMS1070;
extern const device_type TMS1200;
-extern const device_type TMS1270;
extern const device_type TMS1100;
extern const device_type TMS1300;
+extern const device_type TMS0970;
+extern const device_type TMS0980;
#endif /* _TMS0980_H_ */
diff --git a/src/emu/emupal.c b/src/emu/emupal.c
index b5712fa4b95..0831d50a712 100644
--- a/src/emu/emupal.c
+++ b/src/emu/emupal.c
@@ -927,10 +927,18 @@ rgb_t raw_to_rgb_converter::RRRRGGGGBBBBRGBx_decoder(UINT32 raw)
return rgb_t(r, g, b);
}
-rgb_t raw_to_rgb_converter::xRGBRRRRGGGGBBBB_decoder(UINT32 raw)
+rgb_t raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder(UINT32 raw)
{
UINT8 r = pal5bit(((raw >> 7) & 0x1e) | ((raw >> 14) & 0x01));
UINT8 g = pal5bit(((raw >> 3) & 0x1e) | ((raw >> 13) & 0x01));
UINT8 b = pal5bit(((raw << 1) & 0x1e) | ((raw >> 12) & 0x01));
return rgb_t(r, g, b);
}
+
+rgb_t raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder(UINT32 raw)
+{
+ UINT8 r = pal5bit(((raw >> 8) & 0x0f) | ((raw >> 10) & 0x10));
+ UINT8 g = pal5bit(((raw >> 4) & 0x0f) | ((raw >> 9) & 0x10));
+ UINT8 b = pal5bit(((raw >> 0) & 0x0f) | ((raw >> 8) & 0x10));
+ return rgb_t(r, g, b);
+}
diff --git a/src/emu/emupal.h b/src/emu/emupal.h
index e8e0ebaf3a5..e11510745b0 100644
--- a/src/emu/emupal.h
+++ b/src/emu/emupal.h
@@ -143,7 +143,8 @@
#define PALETTE_FORMAT_RRRRRGGGGGBBBBBx raw_to_rgb_converter(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 11,6,1>)
#define PALETTE_FORMAT_GGGGGRRRRRBBBBBx raw_to_rgb_converter(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 6,11,1>)
#define PALETTE_FORMAT_RRRRGGGGBBBBRGBx raw_to_rgb_converter(2, &raw_to_rgb_converter::RRRRGGGGBBBBRGBx_decoder)
-#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_decoder)
+#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit0 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit0_decoder)
+#define PALETTE_FORMAT_xRGBRRRRGGGGBBBB_bit4 raw_to_rgb_converter(2, &raw_to_rgb_converter::xRGBRRRRGGGGBBBB_bit4_decoder)
// standard 5-6-5 formats
#define PALETTE_FORMAT_RRRRRGGGGGGBBBBB raw_to_rgb_converter(2, &raw_to_rgb_converter::standard_rgb_decoder<5,6,5, 11,5,0>)
@@ -307,7 +308,8 @@ public:
static rgb_t BBGGRRII_decoder(UINT32 raw);
static rgb_t IRRRRRGGGGGBBBBB_decoder(UINT32 raw);
static rgb_t RRRRGGGGBBBBRGBx_decoder(UINT32 raw); // bits 3/2/1 are LSb
- static rgb_t xRGBRRRRGGGGBBBB_decoder(UINT32 raw); // bits 14/13/12 are LSb
+ static rgb_t xRGBRRRRGGGGBBBB_bit0_decoder(UINT32 raw); // bits 14/13/12 are LSb
+ static rgb_t xRGBRRRRGGGGBBBB_bit4_decoder(UINT32 raw); // bits 14/13/12 are MSb
private:
// internal data
diff --git a/src/emu/luaengine.c b/src/emu/luaengine.c
index 510f29eb8bb..4c27f1bf35f 100644
--- a/src/emu/luaengine.c
+++ b/src/emu/luaengine.c
@@ -207,6 +207,32 @@ int lua_engine::l_emu_gamename(lua_State *L)
}
//-------------------------------------------------
+// emu_romname - returns rom base name
+//-------------------------------------------------
+
+int lua_engine::l_emu_romname(lua_State *L)
+{
+ lua_pushstring(L, luaThis->machine().basename());
+ return 1;
+}
+
+//-------------------------------------------------
+// emu_pause/emu_unpause - pause/unpause game
+//-------------------------------------------------
+
+int lua_engine::l_emu_pause(lua_State *L)
+{
+ luaThis->machine().pause();
+ return 0;
+}
+
+int lua_engine::l_emu_unpause(lua_State *L)
+{
+ luaThis->machine().resume();
+ return 0;
+}
+
+//-------------------------------------------------
// emu_keypost - post keys to natural keyboard
//-------------------------------------------------
@@ -496,6 +522,7 @@ void lua_engine::initialize()
luabridge::getGlobalNamespace (m_lua_state)
.beginNamespace ("emu")
.addCFunction ("gamename", l_emu_gamename )
+ .addCFunction ("romname", l_emu_romname )
.addCFunction ("keypost", l_emu_keypost )
.addCFunction ("hook_output", l_emu_hook_output )
.addCFunction ("time", l_emu_time )
@@ -503,6 +530,8 @@ void lua_engine::initialize()
.addCFunction ("after", l_emu_after )
.addCFunction ("exit", l_emu_exit )
.addCFunction ("start", l_emu_start )
+ .addCFunction ("pause", l_emu_pause )
+ .addCFunction ("unpause", l_emu_unpause )
.beginClass <machine_manager> ("manager")
.addFunction ("machine", &machine_manager::machine)
.addFunction ("options", &machine_manager::options)
diff --git a/src/emu/luaengine.h b/src/emu/luaengine.h
index ad4712d262f..e6263025f19 100644
--- a/src/emu/luaengine.h
+++ b/src/emu/luaengine.h
@@ -79,10 +79,13 @@ private:
static int l_emu_wait(lua_State *L);
static int l_emu_time(lua_State *L);
static int l_emu_gamename(lua_State *L);
+ static int l_emu_romname(lua_State *L);
static int l_emu_keypost(lua_State *L);
static int l_emu_hook_output(lua_State *L);
static int l_emu_exit(lua_State *L);
static int l_emu_start(lua_State *L);
+ static int l_emu_pause(lua_State *L);
+ static int l_emu_unpause(lua_State *L);
void resume(void *L, INT32 param);
void report_errors(int status);
diff --git a/src/emu/rendlay.c b/src/emu/rendlay.c
index 2f9393180e1..107084ced85 100644
--- a/src/emu/rendlay.c
+++ b/src/emu/rendlay.c
@@ -677,6 +677,10 @@ layout_element::component::component(running_machine &machine, xml_data_node &co
else if (strcmp(compnode.name, "led7seg") == 0)
m_type = CTYPE_LED7SEG;
+ // led8seg nodes
+ else if (strcmp(compnode.name, "led8seg") == 0)
+ m_type = CTYPE_LED8SEG;
+
// led14seg nodes
else if (strcmp(compnode.name, "led14seg") == 0)
m_type = CTYPE_LED14SEG;
@@ -749,6 +753,10 @@ void layout_element::component::draw(running_machine &machine, bitmap_argb32 &de
draw_led7seg(dest, bounds, state);
break;
+ case CTYPE_LED8SEG:
+ draw_led8seg(dest, bounds, state);
+ break;
+
case CTYPE_LED14SEG:
draw_led14seg(dest, bounds, state);
break;
@@ -1399,6 +1407,62 @@ void layout_element::component::draw_led7seg(bitmap_argb32 &dest, const rectangl
}
+//------------------------------------------------------
+// draw_led8seg - draw a 8-segment fluorescent (Futaba)
+//------------------------------------------------------
+
+void layout_element::component::draw_led8seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern)
+{
+ const rgb_t onpen = rgb_t(0xff,0xff,0xff,0xff);
+ const rgb_t offpen = rgb_t(0xff,0x20,0x20,0x20);
+ const rgb_t backpen = rgb_t(0xff,0x00,0x00,0x00);
+
+ // sizes for computation
+ int bmwidth = 250;
+ int bmheight = 400;
+ int segwidth = 40;
+ int skewwidth = 40;
+
+ // allocate a temporary bitmap for drawing
+ bitmap_argb32 tempbitmap(bmwidth + skewwidth, bmheight);
+ tempbitmap.fill(backpen);
+
+ // top bar
+ draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 0)) ? onpen : offpen);
+
+ // top-right bar
+ draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 1)) ? onpen : offpen);
+
+ // bottom-right bar
+ draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, bmwidth - segwidth/2, segwidth, (pattern & (1 << 2)) ? onpen : offpen);
+
+ // bottom bar
+ draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, bmwidth - 2*segwidth/3, bmheight - segwidth/2, segwidth, (pattern & (1 << 3)) ? onpen : offpen);
+
+ // bottom-left bar
+ draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 4)) ? onpen : offpen);
+
+ // top-left bar
+ draw_segment_vertical(tempbitmap, 0 + 2*segwidth/3, bmheight/2 - segwidth/3, 0 + segwidth/2, segwidth, (pattern & (1 << 5)) ? onpen : offpen);
+
+ // horizontal bars
+ draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3, 2*bmwidth/3 - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen);
+ draw_segment_horizontal(tempbitmap, 0 + 2*segwidth/3 + bmwidth/2, bmwidth - 2*segwidth/3, bmheight/2, segwidth, (pattern & (1 << 6)) ? onpen : offpen);
+
+ // vertical bars
+ draw_segment_vertical(tempbitmap, 0 + segwidth/3 - 8, bmheight/2 - segwidth/3 + 2, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen);
+ draw_segment_vertical(tempbitmap, 0 + segwidth/3, bmheight/2 - segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen);
+
+ draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3 - 2, bmheight - 2*segwidth/3 + 4, 2*bmwidth/3 - segwidth/2 - 4, segwidth + 8, backpen);
+ draw_segment_vertical(tempbitmap, bmheight/2 + segwidth/3, bmheight - 2*segwidth/3, 2*bmwidth/3 - segwidth/2 - 4, segwidth, (pattern & (1 << 7)) ? onpen : offpen);
+
+ // apply skew
+ apply_skew(tempbitmap, 40);
+
+ // resample to the target size
+ render_resample_argb_bitmap_hq(dest, tempbitmap, m_color);
+}
+
//-------------------------------------------------
// draw_led14seg - draw a 14-segment LCD
//-------------------------------------------------
diff --git a/src/emu/rendlay.h b/src/emu/rendlay.h
index acd4b4407ab..d169a860602 100644
--- a/src/emu/rendlay.h
+++ b/src/emu/rendlay.h
@@ -87,6 +87,7 @@ private:
CTYPE_DISK,
CTYPE_TEXT,
CTYPE_LED7SEG,
+ CTYPE_LED8SEG,
CTYPE_LED14SEG,
CTYPE_LED16SEG,
CTYPE_LED14SEGSC,
@@ -109,6 +110,7 @@ private:
void load_bitmap();
void load_reel_bitmap(int number);
void draw_led7seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
+ void draw_led8seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
void draw_led14seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
void draw_led14segsc(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
void draw_led16seg(bitmap_argb32 &dest, const rectangle &bounds, int pattern);
diff --git a/src/emu/video/poly.h b/src/emu/video/poly.h
index 420b6eedf82..8c7df71249d 100644
--- a/src/emu/video/poly.h
+++ b/src/emu/video/poly.h
@@ -35,6 +35,7 @@
#ifndef __POLYNEW_H__
#define __POLYNEW_H__
+#include <limits.h>
//**************************************************************************
// DEBUGGING
@@ -226,6 +227,9 @@ private:
inline INT32 round_coordinate(_BaseType value)
{
INT32 result = poly_floor(value);
+
+ if ((value > 0) && (result < 0))
+ return INT_MAX-1;
return result + (value - _BaseType(result) > _BaseType(0.5));
}
diff --git a/src/lib/formats/flopimg.c b/src/lib/formats/flopimg.c
index d22a97c1c06..2f3260366ce 100644
--- a/src/lib/formats/flopimg.c
+++ b/src/lib/formats/flopimg.c
@@ -1466,7 +1466,7 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
break;
case TRACK_ID_VICTOR_GCR5:
- gcr5_w(buffer, offset, 10, 1 + track + (head * 0x80));
+ gcr5_w(buffer, offset, 10, track + (head * 0x80));
break;
case HEAD_ID:
diff --git a/src/lib/formats/victor9k_dsk.c b/src/lib/formats/victor9k_dsk.c
index beb5141ba1c..0d4957ee2b0 100644
--- a/src/lib/formats/victor9k_dsk.c
+++ b/src/lib/formats/victor9k_dsk.c
@@ -39,6 +39,62 @@
Interleave factor 3
cell 2.13 usec
+
+ Boot Disc Label Format
+ Track 0 Sector 0
+
+ Byte
+ Offset Name Description
+
+ 0 System disc ID literally, ff,00h for a system
+ disc
+
+ 2 Load address paragraph to load booted
+ program at. If zero then boot
+ loads in high memory.
+
+ 4 Length paragraph count to load.
+
+ 6 Entry offset I.P. value for transfer of
+ control.
+
+ 8 Entry segment C.S. value for transfer of
+ control.
+
+ 10 I.D. disc identifier.
+
+ 18 Part number system identifier - displayed
+ by early versions of boot.
+
+ 26 Sector size byte count for sectors.
+
+ 28 Data start first data sector on disc
+ (absolute sectors).
+
+ 30 Boot start first absolute sector of
+ program for boot to load at
+ 'load address' for 'length'
+ paragraphs.
+
+ 32 Flags indicators:
+ bit meaning
+ 15-12 interleave factor
+ (0-15)
+ 0 0=single sided
+ 1=double sided
+
+ 34 Disc type 00 = CP/M
+ 01 = MS-DOS
+
+ 35 Reserved
+
+ 38 Speed table information for speed control
+ proc.
+
+ 56 Zone table high track for each zone.
+
+ 71 Sector/track sectors per track for each
+ zone.
*/
#include "emu.h"
@@ -84,6 +140,71 @@ int victor9k_format::identify(io_generic *io, UINT32 form_factor)
return 0;
}
+void victor9k_format::log_boot_sector(UINT8 *data)
+{
+ // System disc ID
+ logerror("System disc: %s\n", ((data[0] == 0xff) && (data[1] == 0x00)) ? "yes" : "no");
+
+ // Load address
+ logerror("Load address: %04x\n", (data[1] << 8) | data[2]);
+
+ // Length
+ logerror("Length: %04x\n", (data[3] << 8) | data[4]);
+
+ // Entry offset
+ logerror("Entry offset: %04x\n", (data[5] << 8) | data[6]);
+
+ // Entry segment
+ logerror("Entry segment: %04x\n", (data[7] << 8) | data[8]);
+
+ // I.D.
+ //logerror("I.D.: %s\n", data[10]);
+
+ // Part number
+ //logerror("Part number: %s\n", data[18]);
+
+ // Sector size
+ logerror("Sector size: %04x\n", (data[25] << 8) | data[26]);
+
+ // Data start
+ logerror("Data start: %04x\n", (data[27] << 8) | data[28]);
+
+ // Boot start
+ logerror("Boot start: %04x\n", (data[29] << 8) | data[30]);
+
+ // Flags
+ logerror("%s sided\n", BIT(data[33], 0) ? "Double" : "Single");
+ logerror("Interleave factor: %u\n", data[32] >> 4);
+
+ // Disc type
+ switch (data[34]) {
+ case 0x00: logerror("Disc type: CP/M\n"); break;
+ case 0x01: logerror("Disc type: MS-DOS\n"); break;
+ default: logerror("Disc type: unknown\n"); break;
+ }
+
+ // Speed table
+ logerror("Speed table: ");
+ for (int i = 38; i < 56; i++) {
+ logerror("%02x ", data[i]);
+ }
+ logerror("\n");
+
+ // Zone table
+ logerror("Zone table: ");
+ for (int i = 56; i < 71; i++) {
+ logerror("%02x ", data[i]);
+ }
+ logerror("\n");
+
+ // Sector/track
+ logerror("Sector/track: ");
+ for (int i = 71; i < 86; i++) {
+ logerror("%02x ", data[i]);
+ }
+ logerror("\n");
+}
+
floppy_image_format_t::desc_e* victor9k_format::get_sector_desc(const format &f, int &current_size, int sector_count)
{
static floppy_image_format_t::desc_e desc[] = {
@@ -141,6 +262,8 @@ bool victor9k_format::load(io_generic *io, UINT32 form_factor, floppy_image *ima
io_generic_read(io, img, 0, size);
+ log_boot_sector(img);
+
int track_offset = 0;
for (int head = 0; head < f.head_count; head++) {
@@ -207,8 +330,8 @@ const int victor9k_format::sectors_per_track[2][80] =
18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15, 15, 15,
+ 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
12, 12, 12, 12, 12, 12, 12, 12, 12
},
@@ -231,8 +354,8 @@ const int victor9k_format::speed_zone[2][80] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
7, 7, 7, 7, 7, 7, 7, 7, 7
},
diff --git a/src/lib/formats/victor9k_dsk.h b/src/lib/formats/victor9k_dsk.h
index 2fb24a6534a..c1d00052a62 100644
--- a/src/lib/formats/victor9k_dsk.h
+++ b/src/lib/formats/victor9k_dsk.h
@@ -33,6 +33,7 @@ public:
int find_size(io_generic *io, UINT32 form_factor);
virtual int identify(io_generic *io, UINT32 form_factor);
+ void log_boot_sector(UINT8 *data);
floppy_image_format_t::desc_e* get_sector_desc(const format &f, int &current_size, int sector_count);
void build_sector_description(const format &f, UINT8 *sectdata, offs_t sect_offs, desc_s *sectors, int sector_count) const;
virtual bool load(io_generic *io, UINT32 form_factor, floppy_image *image);
diff --git a/src/lib/lib.mak b/src/lib/lib.mak
index 57140d0da4d..7a5736d3533 100644
--- a/src/lib/lib.mak
+++ b/src/lib/lib.mak
@@ -389,7 +389,7 @@ $(OBJ)/libflac.a: $(LIBFLACOBJS)
$(LIBOBJ)/libflac/%.o: $(LIBSRC)/libflac/libFLAC/%.c | $(OSPREBUILD)
@echo Compiling $<...
- $(CC) $(CDEFS) $(CONLYFLAGS) $(CCOMFLAGS) $(FLACOPTS) -I$(LIBSRC)/libflac/include -c $< -o $@
+ $(CC) $(CDEFS) $(CONLYFLAGS) $(CCOMFLAGS) $(FLACOPTS) -I$(LIBSRC)/libflac/include -I$(LIBSRC)/libflac/libFLAC/include -c $< -o $@
diff --git a/src/lib/libflac/include/private/all.h b/src/lib/libflac/libFLAC/include/private/all.h
index 304c471a52a..304c471a52a 100644
--- a/src/lib/libflac/include/private/all.h
+++ b/src/lib/libflac/libFLAC/include/private/all.h
diff --git a/src/lib/libflac/include/private/bitmath.h b/src/lib/libflac/libFLAC/include/private/bitmath.h
index 87fa0facd6b..87fa0facd6b 100644
--- a/src/lib/libflac/include/private/bitmath.h
+++ b/src/lib/libflac/libFLAC/include/private/bitmath.h
diff --git a/src/lib/libflac/include/private/bitreader.h b/src/lib/libflac/libFLAC/include/private/bitreader.h
index fd0f6aac6ce..fd0f6aac6ce 100644
--- a/src/lib/libflac/include/private/bitreader.h
+++ b/src/lib/libflac/libFLAC/include/private/bitreader.h
diff --git a/src/lib/libflac/include/private/bitwriter.h b/src/lib/libflac/libFLAC/include/private/bitwriter.h
index aa5c4f74fcb..aa5c4f74fcb 100644
--- a/src/lib/libflac/include/private/bitwriter.h
+++ b/src/lib/libflac/libFLAC/include/private/bitwriter.h
diff --git a/src/lib/libflac/include/private/cpu.h b/src/lib/libflac/libFLAC/include/private/cpu.h
index 651bb224f2a..651bb224f2a 100644
--- a/src/lib/libflac/include/private/cpu.h
+++ b/src/lib/libflac/libFLAC/include/private/cpu.h
diff --git a/src/lib/libflac/include/private/crc.h b/src/lib/libflac/libFLAC/include/private/crc.h
index 0b67fb4be5d..0b67fb4be5d 100644
--- a/src/lib/libflac/include/private/crc.h
+++ b/src/lib/libflac/libFLAC/include/private/crc.h
diff --git a/src/lib/libflac/include/private/fixed.h b/src/lib/libflac/libFLAC/include/private/fixed.h
index f2e0f4fb15a..f2e0f4fb15a 100644
--- a/src/lib/libflac/include/private/fixed.h
+++ b/src/lib/libflac/libFLAC/include/private/fixed.h
diff --git a/src/lib/libflac/include/private/float.h b/src/lib/libflac/libFLAC/include/private/float.h
index 6f7ae610f35..6f7ae610f35 100644
--- a/src/lib/libflac/include/private/float.h
+++ b/src/lib/libflac/libFLAC/include/private/float.h
diff --git a/src/lib/libflac/include/private/format.h b/src/lib/libflac/libFLAC/include/private/format.h
index 7f5cc9360dc..7f5cc9360dc 100644
--- a/src/lib/libflac/include/private/format.h
+++ b/src/lib/libflac/libFLAC/include/private/format.h
diff --git a/src/lib/libflac/include/private/lpc.h b/src/lib/libflac/libFLAC/include/private/lpc.h
index 35588bd718e..35588bd718e 100644
--- a/src/lib/libflac/include/private/lpc.h
+++ b/src/lib/libflac/libFLAC/include/private/lpc.h
diff --git a/src/lib/libflac/include/private/md5.h b/src/lib/libflac/libFLAC/include/private/md5.h
index e5f675a830a..e5f675a830a 100644
--- a/src/lib/libflac/include/private/md5.h
+++ b/src/lib/libflac/libFLAC/include/private/md5.h
diff --git a/src/lib/libflac/include/private/memory.h b/src/lib/libflac/libFLAC/include/private/memory.h
index 38a9ffe0711..38a9ffe0711 100644
--- a/src/lib/libflac/include/private/memory.h
+++ b/src/lib/libflac/libFLAC/include/private/memory.h
diff --git a/src/lib/libflac/include/private/metadata.h b/src/lib/libflac/libFLAC/include/private/metadata.h
index b5268c9552e..b5268c9552e 100644
--- a/src/lib/libflac/include/private/metadata.h
+++ b/src/lib/libflac/libFLAC/include/private/metadata.h
diff --git a/src/lib/libflac/include/private/stream_encoder_framing.h b/src/lib/libflac/libFLAC/include/private/stream_encoder_framing.h
index 4865c16c8a9..4865c16c8a9 100644
--- a/src/lib/libflac/include/private/stream_encoder_framing.h
+++ b/src/lib/libflac/libFLAC/include/private/stream_encoder_framing.h
diff --git a/src/lib/libflac/include/private/window.h b/src/lib/libflac/libFLAC/include/private/window.h
index 55a5bf29230..55a5bf29230 100644
--- a/src/lib/libflac/include/private/window.h
+++ b/src/lib/libflac/libFLAC/include/private/window.h
diff --git a/src/lib/libflac/include/protected/all.h b/src/lib/libflac/libFLAC/include/protected/all.h
index 2921092b380..2921092b380 100644
--- a/src/lib/libflac/include/protected/all.h
+++ b/src/lib/libflac/libFLAC/include/protected/all.h
diff --git a/src/lib/libflac/include/protected/stream_decoder.h b/src/lib/libflac/libFLAC/include/protected/stream_decoder.h
index 9108ca78f22..9108ca78f22 100644
--- a/src/lib/libflac/include/protected/stream_decoder.h
+++ b/src/lib/libflac/libFLAC/include/protected/stream_decoder.h
diff --git a/src/lib/libflac/include/protected/stream_encoder.h b/src/lib/libflac/libFLAC/include/protected/stream_encoder.h
index 4101ee55288..4101ee55288 100644
--- a/src/lib/libflac/include/protected/stream_encoder.h
+++ b/src/lib/libflac/libFLAC/include/protected/stream_encoder.h
diff --git a/src/mame/audio/dcs.c b/src/mame/audio/dcs.c
index d76cf03c859..8b51a0c9380 100644
--- a/src/mame/audio/dcs.c
+++ b/src/mame/audio/dcs.c
@@ -184,7 +184,7 @@
#define SET_INPUT_FULL() (m_latch_control &= ~LCTRL_INPUT_EMPTY)
-/* These are the some of the control register, we dont use them all */
+/* These are some of the control registers. We don't use them all */
enum
{
IDMA_CONTROL_REG = 0, /* 3fe0 */
diff --git a/src/mame/audio/gottlieb.c b/src/mame/audio/gottlieb.c
index a2280efe09b..4feab28f889 100644
--- a/src/mame/audio/gottlieb.c
+++ b/src/mame/audio/gottlieb.c
@@ -1030,7 +1030,7 @@ void gottlieb_sound_r2_device::device_timer(emu_timer &timer, device_timer_id id
m_nmi_state = 1;
nmi_state_update();
- // set a timer to turn it off again on hte next SOUND_CLOCK/16
+ // set a timer to turn it off again on the next SOUND_CLOCK/16
timer_set(attotime::from_hz(SOUND2_CLOCK/16), TID_NMI_CLEAR);
// adjust the NMI timer for the next time
diff --git a/src/mame/drivers/40love.c b/src/mame/drivers/40love.c
index d8ee762b8c9..59ae1b92f18 100644
--- a/src/mame/drivers/40love.c
+++ b/src/mame/drivers/40love.c
@@ -28,7 +28,7 @@ Game number : A30
Vintage : 1984
Game serial/model number : M4300006B ?
-I dont have the wiring harness for this board, so dont know if it works.
+I don't have the wiring harness for this board, so don't know if it works.
One GFX ROM is bad though.
See A30-26.u23\A30-26.txt for details about the bad ROM.
To summarise:
diff --git a/src/mame/drivers/alpha68k.c b/src/mame/drivers/alpha68k.c
index 74f5f6a4bcb..0cc70ee6b8a 100644
--- a/src/mame/drivers/alpha68k.c
+++ b/src/mame/drivers/alpha68k.c
@@ -2098,7 +2098,7 @@ static MACHINE_CONFIG_START( alpha68k_II, alpha68k_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_II)
MCFG_PALETTE_ADD("palette", 2048)
- MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
+ MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
@@ -2151,7 +2151,7 @@ static MACHINE_CONFIG_START( alpha68k_II_gm, alpha68k_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_II)
MCFG_PALETTE_ADD("palette", 2048)
- MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
+ MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
@@ -2197,7 +2197,7 @@ static MACHINE_CONFIG_START( alpha68k_V, alpha68k_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_V)
MCFG_PALETTE_ADD("palette", 4096)
- MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
+ MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
@@ -2243,7 +2243,7 @@ static MACHINE_CONFIG_START( alpha68k_V_sb, alpha68k_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", alpha68k_V)
MCFG_PALETTE_ADD("palette", 4096)
- MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB)
+ MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
MCFG_VIDEO_START_OVERRIDE(alpha68k_state,alpha68k)
diff --git a/src/mame/drivers/atvtrack.c b/src/mame/drivers/atvtrack.c
index 1b11c741a13..bd0e243482c 100644
--- a/src/mame/drivers/atvtrack.c
+++ b/src/mame/drivers/atvtrack.c
@@ -41,7 +41,7 @@ REF. 020419
Notes:
SH4 - Hitachi HD6417750S SH4 CPU (BGA)
K4S643232 - Samsung K4S643232E-TC70 64M x 32-bit SDRAM (TSSOP86)
- GFX - Unknown BGA graphics chip (heatsinked)
+ GFX - NEC PowerVR Neon 250
FLASH.IC* - Samsung K9F2808U0B 128MBit (16M + 512k Spare x 8-bit) FlashROM (TSOP48)
EPF10K50 - Altera Flex EPF10K50EQC240-3 FPGA (QFP240)
EPC1PC8 - Altera EPC1PC8 FPGA Configuration Device (DIP8)
@@ -56,6 +56,36 @@ Notes:
*/
+/*
+
+notes from DEMUL team
+
+Smashing Drive needs a working SH4 MMU emulation, ATV Track does not.
+
+Audio - is a simple buffered DAC.
+frequency is 32kHz
+data written by CPU to buffer have such meaning:
+offs 0 - s16 bass channel 0
+offs 2 - s16 bass channel 1
+offs 4 - s16 left channel
+offs 6 - s16 right channel
+and so on
+
+buffer is 2x32bytes
+then it becomes (I suppose half) empty - SH4 IRL5 IRQ generated
+
+
+"control registers" (Smashing Drive)
+0 - read - various statuses, returning -1 is OK
+write - enable slave CPU, gpu, etc most of bits is unclear
+4 - r/w - communication port (for cabinet linking), returning 0 is OK
+also there some bits on SH4 PDTRA port, I'll hook it later by myself
+
+about clocks - SH4s is clocked at 33000000*6
+but unlike to DC/AW/Naomi SH4 'peripheral clock' (at which works TMU timers and other internal stuff) is 1/6 from CPU clock, not 1/4
+
+*/
+
#include "emu.h"
#include "cpu/sh4/sh4.h"
#include "debugger.h"
@@ -71,8 +101,8 @@ public:
m_maincpu(*this, "maincpu"),
m_subcpu(*this, "subcpu") { }
- DECLARE_READ64_MEMBER(area1_r);
- DECLARE_WRITE64_MEMBER(area1_w);
+ DECLARE_READ64_MEMBER(control_r);
+ DECLARE_WRITE64_MEMBER(control_w);
DECLARE_READ64_MEMBER(area2_r);
DECLARE_WRITE64_MEMBER(area2_w);
DECLARE_READ64_MEMBER(area3_r);
@@ -94,6 +124,19 @@ public:
required_device<sh4_device> m_maincpu;
required_device<sh4_device> m_subcpu;
+protected:
+ bool m_slaverun;
+};
+
+
+class smashdrv_state : public atvtrack_state
+{
+public:
+ smashdrv_state(const machine_config &mconfig, device_type type, const char *tag)
+ : atvtrack_state(mconfig, type, tag) { }
+
+ virtual void machine_start();
+ virtual void machine_reset();
};
void atvtrack_state::logbinary(UINT32 data,int high=31,int low=0)
@@ -126,7 +169,7 @@ inline UINT32 atvtrack_state::decode64_32(offs_t offset64, UINT64 data, UINT64 m
return 0;
}
-READ64_MEMBER(atvtrack_state::area1_r)
+READ64_MEMBER(atvtrack_state::control_r)
{
UINT32 addr;
@@ -139,7 +182,7 @@ READ64_MEMBER(atvtrack_state::area1_r)
return -1;
}
-WRITE64_MEMBER(atvtrack_state::area1_w)
+WRITE64_MEMBER(atvtrack_state::control_w)
{
UINT32 addr, dat; //, old;
@@ -148,9 +191,10 @@ WRITE64_MEMBER(atvtrack_state::area1_w)
// old = m_area1_data[addr];
m_area1_data[addr] = dat;
if (addr == (0x00020000-0x00020000)/4) {
- if (data & 4) {
+ if ((data & 4) && m_slaverun)
m_subcpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
- }
+ else
+ m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
logerror("Write %08x at %08x ",dat, 0x20000+addr*4+0);
logbinary(dat);
@@ -299,6 +343,10 @@ WRITE64_MEMBER(atvtrack_state::ioport_w)
#endif
if (offset == SH4_IOPORT_16/8) {
+ if ((data & 0xf000) == 0x7000) {
+ if (data & 0x0100)
+ m_slaverun = true;
+ }
logerror("SH4 16bit i/o port write ");
logbinary((UINT32)data,15,0);
logerror("\n");
@@ -358,22 +406,59 @@ void atvtrack_state::machine_reset()
m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
}
+
+void smashdrv_state::machine_start()
+{
+
+}
+
+void smashdrv_state::machine_reset()
+{
+ m_slaverun = false;
+ m_subcpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
+}
+
+// ATV Track
+
static ADDRESS_MAP_START( atvtrack_main_map, AS_PROGRAM, 64, atvtrack_state )
AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem")
- AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(area1_r, area1_w)
+ AM_RANGE(0x00020000, 0x00020007) AM_READWRITE(control_r, control_w) // control registers
+// AM_RANGE(0x00020040, 0x0002007f) // audio DAC buffer
AM_RANGE(0x14000000, 0x14000007) AM_READWRITE(area2_r, area2_w) // data
AM_RANGE(0x14100000, 0x14100007) AM_READWRITE(area3_r, area3_w) // command
AM_RANGE(0x14200000, 0x14200007) AM_READWRITE(area4_r, area4_w) // address
- AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM
+ AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( atvtrack_main_port, AS_IO, 64, atvtrack_state )
AM_RANGE(0x00, 0x1f) AM_READWRITE(ioport_r, ioport_w)
ADDRESS_MAP_END
+// Smashing Drive
+
+static ADDRESS_MAP_START( smashdrv_main_map, AS_PROGRAM, 64, smashdrv_state )
+ AM_RANGE(0x00000000, 0x03ffffff) AM_ROM
+ AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM
+ AM_RANGE(0x10000000, 0x100003ff) AM_RAM AM_SHARE("sharedmem")
+ AM_RANGE(0x10000400, 0x10000407) AM_READWRITE(control_r, control_w) // control registers
+
+// 0x10000400 - 0x1000043F control registers
+// 0x10000440 - 0x1000047F Audio DAC buffer
+ AM_RANGE(0x14000000, 0x143fffff) AM_ROM AM_REGION("data", 0)
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( smashdrv_main_port, AS_IO, 64, smashdrv_state )
+ AM_RANGE(0x00, 0x1f) AM_READWRITE(ioport_r, ioport_w)
+ADDRESS_MAP_END
+
+// Sub CPU (same for both games)
+
static ADDRESS_MAP_START( atvtrack_sub_map, AS_PROGRAM, 64, atvtrack_state )
AM_RANGE(0x00000000, 0x000003ff) AM_RAM AM_SHARE("sharedmem")
AM_RANGE(0x0c000000, 0x0cffffff) AM_RAM
+// 0x14000000 - 0x1400xxxx GPU registers
+ AM_RANGE(0x18000000, 0x19ffffff) AM_RAM
+// 0x18000000 - 0x19FFFFFF GPU RAM (32MB)
ADDRESS_MAP_END
static ADDRESS_MAP_START( atvtrack_sub_port, AS_IO, 64, atvtrack_state )
@@ -427,9 +512,16 @@ static MACHINE_CONFIG_START( atvtrack, atvtrack_state )
MCFG_SCREEN_UPDATE_DRIVER(atvtrack_state, screen_update_atvtrack)
MCFG_PALETTE_ADD("palette", 0x1000)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED_CLASS( smashdrv, atvtrack, smashdrv_state )
+ MCFG_CPU_MODIFY("maincpu")
+ MCFG_CPU_PROGRAM_MAP(smashdrv_main_map)
+ MCFG_CPU_IO_MAP(smashdrv_main_port)
MACHINE_CONFIG_END
+
ROM_START( atvtrack )
ROM_REGION( 0x4200000, "maincpu", ROMREGION_ERASEFF) // NAND roms, contain additional data hence the sizes
ROM_LOAD32_BYTE("15.bin", 0x0000000, 0x1080000, CRC(84eaede7) SHA1(6e6230165c3bb35e49c660dfd0d07c132ed89e6a) )
@@ -489,15 +581,18 @@ REF 010131
*/
ROM_START( smashdrv )
- ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF)
+ ROM_REGION64_LE( 0x0400000, "data", ROMREGION_ERASEFF)
ROM_LOAD("prg.ic23", 0x0000000, 0x0400000, CRC(5cc6d3ac) SHA1(0c8426774212d891796b59c95b8c70f64db5b67a) )
- ROM_LOAD("sdra.ic15", 0x1000000, 0x1000000, CRC(cf702287) SHA1(84cd83c339831deff15fe5fcc353e0b596667500) )
- ROM_LOAD("sdrb.ic14", 0x2000000, 0x1000000, CRC(39b76f0e) SHA1(529943b6075925e5f72c6e966796e04b2c33686c) )
- ROM_LOAD("sdrc.ic20", 0x3000000, 0x1000000, CRC(c9021dd7) SHA1(1d08aab433614810af858a0fc5d7f03c7b782237) )
+
+ ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASEFF)
+ ROM_LOAD32_WORD("sdra.ic15", 0x00000000, 0x01000000, CRC(cf702287) SHA1(84cd83c339831deff15fe5fcc353e0b596667500) )
+ ROM_LOAD32_WORD("sdrb.ic14", 0x00000002, 0x01000000, CRC(39b76f0e) SHA1(529943b6075925e5f72c6e966796e04b2c33686c) )
+ ROM_LOAD32_WORD("sdrc.ic20", 0x02000000, 0x01000000, CRC(c9021dd7) SHA1(1d08aab433614810af858a0fc5d7f03c7b782237) )
+ // ic21 unpopulated
ROM_END
GAME( 2002, atvtrack, 0, atvtrack, atvtrack, driver_device, 0, ROT0, "Gaelco", "ATV Track (set 1)", GAME_NOT_WORKING | GAME_NO_SOUND )
GAME( 2002, atvtracka, atvtrack, atvtrack, atvtrack, driver_device, 0, ROT0, "Gaelco", "ATV Track (set 2)", GAME_NOT_WORKING | GAME_NO_SOUND )
-// not the same HW, but has dual SH4 at least
-GAME( 2000, smashdrv, 0, atvtrack, atvtrack, driver_device, 0, ROT0, "Gaelco", "Smashing Drive", GAME_NOT_WORKING | GAME_NO_SOUND )
+// almost identical PCB, FlashROM mapping and master registers addresses different
+GAME( 2000, smashdrv, 0, smashdrv, atvtrack, driver_device, 0, ROT0, "Gaelco", "Smashing Drive", GAME_NOT_WORKING | GAME_NO_SOUND )
diff --git a/src/mame/drivers/bagman.c b/src/mame/drivers/bagman.c
index fb662795fe9..39d036e6eeb 100644
--- a/src/mame/drivers/bagman.c
+++ b/src/mame/drivers/bagman.c
@@ -281,7 +281,7 @@ static INPUT_PORTS_START( botanici )
PORT_MODIFY("P2") // only seems to have 2 coin slots
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // this must be ACTIVE_HIGH or the game fails after you complete a level, protection?
PORT_MODIFY("DSW") // dipswitches are a bit messy on this set
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:3")
diff --git a/src/mame/drivers/bfm_sc4h.c b/src/mame/drivers/bfm_sc4h.c
index 5c22299759b..dca31706d5a 100644
--- a/src/mame/drivers/bfm_sc4h.c
+++ b/src/mame/drivers/bfm_sc4h.c
@@ -584,7 +584,7 @@ UINT16 sc4_state::bfm_sc4_68307_portb_r(address_space &space, bool dedicated, UI
else
{
// generating certain interrupts expects the bit 0x8000 to be set here
- // but it's set ot dedicated i/o, not general purpose, source?
+ // but it's set to dedicated i/o, not general purpose, source?
return 0x8040;
}
}
diff --git a/src/mame/drivers/bionicc.c b/src/mame/drivers/bionicc.c
index f206df9c369..f27fb6fc548 100644
--- a/src/mame/drivers/bionicc.c
+++ b/src/mame/drivers/bionicc.c
@@ -366,8 +366,10 @@ static MACHINE_CONFIG_START( bionicc, bionicc_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bionicc)
- MCFG_PALETTE_ADD("palette", 1024)
+ MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
+
+ MCFG_PALETTE_ADD("palette", 1024)
MCFG_BUFFERED_SPRITERAM16_ADD("spriteram")
diff --git a/src/mame/drivers/bottom9.c b/src/mame/drivers/bottom9.c
index 78087d893db..bd9dea8c939 100644
--- a/src/mame/drivers/bottom9.c
+++ b/src/mame/drivers/bottom9.c
@@ -367,7 +367,7 @@ ROM_START( bottom9 )
ROM_LOAD32_BYTE( "891e09d", 0x40002, 0x10000, CRC(4e1335e6) SHA1(b892ab40a41978a89658ea2e7aabe9b073430b5d) )
ROM_LOAD32_BYTE( "891e09b", 0x40003, 0x10000, CRC(b6f914fb) SHA1(e95f3e899c2ead15ef8a529dbc67e8f4a0f88bdd) )
- ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
+ ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_LOAD32_BYTE( "891e06e", 0x00000, 0x10000, CRC(0b04db1c) SHA1(0beae7bb8da49379915c0253ce03091eb71a58b5) ) /* sprites */
ROM_LOAD32_BYTE( "891e06a", 0x00001, 0x10000, CRC(5ee37327) SHA1(f63ddaf63af06ea5421b0361315940582ef57922) )
ROM_LOAD32_BYTE( "891e05e", 0x00002, 0x10000, CRC(b356e729) SHA1(2cda591415b0f139fdb1f80c349d432bb0579d8e) )
@@ -424,7 +424,7 @@ ROM_START( bottom9n )
ROM_LOAD32_BYTE( "891e09d", 0x40002, 0x10000, CRC(4e1335e6) SHA1(b892ab40a41978a89658ea2e7aabe9b073430b5d) )
ROM_LOAD32_BYTE( "891e09b", 0x40003, 0x10000, CRC(b6f914fb) SHA1(e95f3e899c2ead15ef8a529dbc67e8f4a0f88bdd) )
- ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( dont dispose as the program can read them, 0 ) */
+ ROM_REGION( 0x100000, "k051960", 0 ) /* graphics ( don't dispose as the program can read them, 0 ) */
ROM_LOAD32_BYTE( "891e06e", 0x00000, 0x10000, CRC(0b04db1c) SHA1(0beae7bb8da49379915c0253ce03091eb71a58b5) ) /* sprites */
ROM_LOAD32_BYTE( "891e06a", 0x00001, 0x10000, CRC(5ee37327) SHA1(f63ddaf63af06ea5421b0361315940582ef57922) )
ROM_LOAD32_BYTE( "891e05e", 0x80002, 0x10000, CRC(b356e729) SHA1(2cda591415b0f139fdb1f80c349d432bb0579d8e) )
diff --git a/src/mame/drivers/champbas.c b/src/mame/drivers/champbas.c
index bafc9314fc6..57c3602e309 100644
--- a/src/mame/drivers/champbas.c
+++ b/src/mame/drivers/champbas.c
@@ -320,7 +320,7 @@ static ADDRESS_MAP_START( exctsccr_main_map, AS_PROGRAM, 8, champbas_state )
AM_RANGE(0xa002, 0xa002) AM_WRITE(champbas_gfxbank_w)
AM_RANGE(0xa003, 0xa003) AM_WRITE(champbas_flipscreen_w)
AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w)
- AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but i dont need it */
+ AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but I don't need it */
AM_RANGE(0xa040, 0xa06f) AM_WRITEONLY AM_SHARE("spriteram") /* Sprite pos */
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_byte_w)
diff --git a/src/mame/drivers/chihiro.c b/src/mame/drivers/chihiro.c
index 74a7b0441f7..b0d72287739 100644
--- a/src/mame/drivers/chihiro.c
+++ b/src/mame/drivers/chihiro.c
@@ -370,18 +370,12 @@ Thanks to Alex, Mr Mudkips, and Philip Burke for this info.
#include "debug/debugcmd.h"
#include "debug/debugcpu.h"
#include "osdcore.h"
+#include "includes/chihiro.h"
#define LOG_PCI
//#define LOG_OHCI
-//#define LOG_NV2A
//#define LOG_BASEBOARD
-class nv2a_renderer; // forw. dec.
-struct nvidia_object_data
-{
- nv2a_renderer *data;
-};
-
class chihiro_state : public driver_device
{
public:
@@ -391,30 +385,30 @@ public:
debug_irq_active(false),
m_maincpu(*this, "maincpu") { }
- DECLARE_READ32_MEMBER( geforce_r );
- DECLARE_WRITE32_MEMBER( geforce_w );
- DECLARE_READ32_MEMBER( usbctrl_r );
- DECLARE_WRITE32_MEMBER( usbctrl_w );
- DECLARE_READ32_MEMBER( smbus_r );
- DECLARE_WRITE32_MEMBER( smbus_w );
- DECLARE_READ32_MEMBER( mediaboard_r );
- DECLARE_WRITE32_MEMBER( mediaboard_w );
- DECLARE_READ32_MEMBER( audio_apu_r );
- DECLARE_WRITE32_MEMBER( audio_apu_w );
- DECLARE_READ32_MEMBER( audio_ac93_r );
- DECLARE_WRITE32_MEMBER( audio_ac93_w );
- DECLARE_READ32_MEMBER( dummy_r );
- DECLARE_WRITE32_MEMBER( dummy_w );
-
- void smbus_register_device(int address,int (*handler)(chihiro_state &chs,int command,int rw,int data));
- int smbus_pic16lc(int command,int rw,int data);
- int smbus_cx25871(int command,int rw,int data);
- int smbus_eeprom(int command,int rw,int data);
- void baseboard_ide_event(int type,UINT8 *read,UINT8 *write);
+ DECLARE_READ32_MEMBER(geforce_r);
+ DECLARE_WRITE32_MEMBER(geforce_w);
+ DECLARE_READ32_MEMBER(usbctrl_r);
+ DECLARE_WRITE32_MEMBER(usbctrl_w);
+ DECLARE_READ32_MEMBER(smbus_r);
+ DECLARE_WRITE32_MEMBER(smbus_w);
+ DECLARE_READ32_MEMBER(mediaboard_r);
+ DECLARE_WRITE32_MEMBER(mediaboard_w);
+ DECLARE_READ32_MEMBER(audio_apu_r);
+ DECLARE_WRITE32_MEMBER(audio_apu_w);
+ DECLARE_READ32_MEMBER(audio_ac93_r);
+ DECLARE_WRITE32_MEMBER(audio_ac93_w);
+ DECLARE_READ32_MEMBER(dummy_r);
+ DECLARE_WRITE32_MEMBER(dummy_w);
+
+ void smbus_register_device(int address, int(*handler)(chihiro_state &chs, int command, int rw, int data));
+ int smbus_pic16lc(int command, int rw, int data);
+ int smbus_cx25871(int command, int rw, int data);
+ int smbus_eeprom(int command, int rw, int data);
+ void baseboard_ide_event(int type, UINT8 *read, UINT8 *write);
UINT8 *baseboard_ide_dimmboard(UINT32 lba);
- void dword_write_le(UINT8 *addr,UINT32 d);
- void word_write_le(UINT8 *addr,UINT16 d);
- void debug_generate_irq(int irq,bool active);
+ void dword_write_le(UINT8 *addr, UINT32 d);
+ void word_write_le(UINT8 *addr, UINT16 d);
+ void debug_generate_irq(int irq, bool active);
void vblank_callback(screen_device &screen, bool state);
UINT32 screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
@@ -440,11 +434,11 @@ public:
int data;
int command;
int rw;
- int (*devices[128])(chihiro_state &chs,int command,int rw,int data);
- UINT32 words[256/4];
+ int(*devices[128])(chihiro_state &chs, int command, int rw, int data);
+ UINT32 words[256 / 4];
} smbusst;
struct apu_state {
- UINT32 memory[0x60000/4];
+ UINT32 memory[0x60000 / 4];
UINT32 gpdsp_sgaddress; // global processor scatter-gather
UINT32 gpdsp_sgblocks;
UINT32 gpdsp_address;
@@ -465,8 +459,8 @@ public:
address_space *space;
} apust;
struct ac97_state {
- UINT32 mixer_regs[0x80/4];
- UINT32 controller_regs[0x38/4];
+ UINT32 mixer_regs[0x80 / 4];
+ UINT32 controller_regs[0x38 / 4];
} ac97st;
UINT8 pic16lc_buffer[0xff];
nv2a_renderer *nvidia_nv2a;
@@ -478,892 +472,6 @@ public:
required_device<cpu_device> m_maincpu;
};
-/*
- * geforce 3d (NV2A) vertex program disassembler
- */
-class vertex_program_disassembler {
- static const char *srctypes[];
- static const char *scaops[];
- static const int scapar2[];
- static const char *vecops[];
- static const int vecpar2[];
- static const char *vecouts[];
- static const char compchar[];
- int o[6];
- int state;
-
- struct sourcefields
- {
- int Sign;
- int SwizzleX;
- int SwizzleY;
- int SwizzleZ;
- int SwizzleW;
- int TempIndex;
- int ParameterType;
- };
-
- struct fields
- {
- int ScaOperation;
- int VecOperation;
- int SourceConstantIndex;
- int InputIndex;
- sourcefields src[3];
- int VecTempWriteMask;
- int VecTempIndex;
- int ScaTempWriteMask;
- int OutputWriteMask;
- int OutputSelect;
- int OutputIndex;
- int MultiplexerControl;
- int Usea0x;
- int EndOfProgram;
- };
- fields f;
-
- void decodefields(unsigned int *dwords, int offset, fields &decoded);
- int disassemble_mask(int mask, char *s);
- int disassemble_swizzle(sourcefields f, char *s);
- int disassemble_source(sourcefields f, fields fi, char *s);
- int disassemble_output(fields f, char *s);
- int output_types(fields f, int *o);
-public:
- vertex_program_disassembler() { state = 0; }
- int disassemble(unsigned int *instruction, char *line);
-};
-
-const char *vertex_program_disassembler::srctypes[] = { "??", "Rn", "Vn", "Cn" };
-const char *vertex_program_disassembler::scaops[] = { "NOP", "IMV", "RCP", "RCC", "RSQ", "EXP", "LOG", "LIT", "???", "???", "???", "???", "???", "???", "???", "???", "???" };
-const int vertex_program_disassembler::scapar2[] = { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-const char *vertex_program_disassembler::vecops[] = { "NOP", "MOV", "MUL", "ADD", "MAD", "DP3", "DPH", "DP4", "DST", "MIN", "MAX", "SLT", "SGE", "ARL", "???", "???", "???" };
-const int vertex_program_disassembler::vecpar2[] = { 0, 4, 6, 5, 7, 6, 6, 6, 6, 6, 6, 6, 6, 4, 0, 0, 0 };
-const char *vertex_program_disassembler::vecouts[] = { "oPos", "???", "???", "oD0", "oD1", "oFog", "oPts", "oB0", "oB1", "oT0", "oT1", "oT2", "oT3" };
-const char vertex_program_disassembler::compchar[] = { 'x', 'y', 'z', 'w' };
-
-/*
-Each vertex program instruction is a 128 bit word made of the fields:
-d f
-w b i
-o i e
-r t l
-d s d
-+-+-----+-------
-|0|31-0 |not used
-+-+-----+-------
-| |31-29|not used
-| +-----+-------
-| |28-25|scalar operation
-| +-----+-------
-| |24-21|vectorial operation
-| +-----+-------
-| |20-13|index for source constant C[]
-| +-----+-------
-| |12-9 |input vector index
-| +-----+-------
-|1| 8 |parameter A:sign
-| +-----+-------
-| | 7-6 |parameter A:swizzle x
-| +-----+-------
-| | 5-4 |parameter A:swizzle y
-| +-----+-------
-| | 3-2 |parameter A:swizzle z
-| +-----+-------
-| | 1-0 |parameter A:swizzle w
-|-+-----+-------
-| |31-28|parameter A:parameter Rn index
-| +-----+-------
-| |27-26|parameter A:input type 1:Rn 2:Vn 3:C[n]
-| +-----+-------
-| | 25 |parameter B:sign
-| +-----+-------
-| |24-23|parameter B:swizzle x
-| +-----+-------
-| |22-21|parameter B:swizzle y
-| +-----+-------
-| |20-19|parameter B:swizzle z
-| +-----+-------
-|2|18-17|parameter B:swizzle w
-| +-----+-------
-| |16-13|parameter B:parameter Rn index
-| +-----+-------
-| |12-11|parameter B:input type 1:Rn 2:Vn 3:C[n]
-| +-----+-------
-| | 10 |parameter C:sign
-| +-----+-------
-| | 9-8 |parameter C:swizzle x
-| +-----+-------
-| | 7-6 |parameter C:swizzle y
-| +-----+-------
-| | 5-4 |parameter C:swizzle z
-| +-----+-------
-| | 3-2 |parameter C:swizzle w
-| +-----+-------
-| | 1-0 |
-|-+ |parameter C:parameter Rn index
-| |31-30|
-| +-----+-------
-| |29-28|parameter C:input type 1:Rn 2:Vn 3:C[n]
-| +-----+-------
-| |27-24|output Rn mask from vectorial operation
-| +-----+-------
-| |23-20|output Rn index from vectorial operation
-| +-----+-------
-| |19-16|output Rn mask from scalar operation
-| +-----+-------
-|3|15-12|output vector write mask
-| +-----+-------
-| | 11 |1:output is output vector 0:output is constant C[]
-| +-----+-------
-| |10-3 |output vector/constant index
-| +-----+-------
-| | 2 |0:output Rn from vectorial operation 1:output Rn from scalar operation
-| +-----+-------
-| | 1 |1:add a0x to index for source constant C[]
-| +-----+-------
-| | 0 |1:end of program
-+-+-----+-------
-Each vertex program instruction can generate up to three destination values using up to three source values.
-The first possible destination is to Rn from a vectorial operation.
-The second possible destination is to a vertex shader output or C[n] from a vectorial or scalar operation.
-The third possible destination is to Rn from a scalar operation.
-*/
-void vertex_program_disassembler::decodefields(unsigned int *dwords, int offset, fields &decoded)
-{
- unsigned int srcbits[3];
- int a;
-
- srcbits[0] = ((dwords[1 + offset] & 0x1ff) << 6) | (dwords[2 + offset] >> 26);
- srcbits[1] = (dwords[2 + offset] >> 11) & 0x7fff;
- srcbits[2] = ((dwords[2 + offset] & 0x7ff) << 4) | (dwords[3 + offset] >> 28);
- decoded.ScaOperation = (int)(dwords[1 + offset] >> 25) & 0xf;
- decoded.VecOperation = (int)(dwords[1 + offset] >> 21) & 0xf;
- decoded.SourceConstantIndex = (int)(dwords[1 + offset] >> 13) & 0xff;
- decoded.InputIndex = (int)(dwords[1 + offset] >> 9) & 0xf;
- for (a = 0; a < 3; a++)
- {
- decoded.src[a].Sign = (int)(srcbits[a] >> 14) & 1;
- decoded.src[a].SwizzleX = (int)(srcbits[a] >> 12) & 3;
- decoded.src[a].SwizzleY = (int)(srcbits[a] >> 10) & 3;
- decoded.src[a].SwizzleZ = (int)(srcbits[a] >> 8) & 3;
- decoded.src[a].SwizzleW = (int)(srcbits[a] >> 6) & 3;
- decoded.src[a].TempIndex = (int)(srcbits[a] >> 2) & 0xf;
- decoded.src[a].ParameterType = (int)(srcbits[a] >> 0) & 3;
- }
-
- decoded.VecTempWriteMask = (int)(dwords[3 + offset] >> 24) & 0xf;
- decoded.VecTempIndex = (int)(dwords[3 + offset] >> 20) & 0xf;
- decoded.ScaTempWriteMask = (int)(dwords[3 + offset] >> 16) & 0xf;
- decoded.OutputWriteMask = (int)(dwords[3 + offset] >> 12) & 0xf;
- decoded.OutputSelect = (int)(dwords[3 + offset] >> 11) & 0x1;
- decoded.OutputIndex = (int)(dwords[3 + offset] >> 3) & 0xff;
- decoded.MultiplexerControl = (int)(dwords[3 + offset] >> 2) & 0x1;
- decoded.Usea0x = (int)(dwords[3 + offset] >> 1) & 0x1;
- decoded.EndOfProgram = (int)(dwords[3 + offset] >> 0) & 0x1;
-}
-
-int vertex_program_disassembler::disassemble_mask(int mask, char *s)
-{
- int l;
-
- *s = 0;
- if (mask == 15)
- return 0;
- s[0] = '.';
- l = 1;
- if ((mask & 8) != 0) {
- s[l] = 'x';
- l++;
- }
- if ((mask & 4) != 0){
- s[l] = 'y';
- l++;
- }
- if ((mask & 2) != 0){
- s[l] = 'z';
- l++;
- }
- if ((mask & 1) != 0){
- s[l] = 'w';
- l++;
- }
- s[l] = 0;
- return l;
-}
-
-int vertex_program_disassembler::disassemble_swizzle(sourcefields f, char *s)
-{
- int t, l;
-
- t = 4;
- if (f.SwizzleW == 3)
- {
- t = t - 1;
- if (f.SwizzleZ == 2)
- {
- t = t - 1;
- if (f.SwizzleY == 1)
- {
- t = t - 1;
- if (f.SwizzleX == 0)
- {
- t = t - 1;
- }
- }
- }
- }
- *s = 0;
- if (t == 0)
- return 0;
- s[0] = '.';
- l = 1;
- if (t > 0)
- {
- s[l] = compchar[f.SwizzleX];
- l++;
- }
- if (t > 1)
- {
- s[l] = compchar[f.SwizzleY];
- l++;
- }
- if (t > 2)
- {
- s[l] = compchar[f.SwizzleZ];
- l++;
- }
- if (t > 3)
- {
- s[l] = compchar[f.SwizzleW];
- l++;
- }
- s[l] = 0;
- return l;
-}
-
-int vertex_program_disassembler::disassemble_source(sourcefields f, fields fi, char *s)
-{
- int l;
-
- if (f.ParameterType == 0) {
- strcpy(s, ",???");
- return 4;
- }
- l = 0;
- if (f.Sign != 0) {
- s[l] = '-';
- l++;
- }
- if (f.ParameterType == 1) {
- s[l] = 'r';
- l = l + 1 + sprintf(s + l + 1, "%d", f.TempIndex);
- }
- else if (f.ParameterType == 2){
- s[l] = 'v';
- l = l + 1 + sprintf(s + l + 1, "%d", fi.InputIndex);
- }
- else
- {
- if (fi.Usea0x != 0)
- {
- if (fi.SourceConstantIndex >= 96) {
- strcpy(s + l, "c[");
- l = l + 2;
- l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
- strcpy(s + l, "+a0.x]");
- l = l + 6;
- }
- else {
- strcpy(s + l, "c[a0.x");
- l = l + 6;
- l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
- s[l] = ']';
- l++;
- }
- }
- else {
- strcpy(s + l, "c[");
- l = l + 2;
- l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
- s[l] = ']';
- l++;
- }
- }
- l = l + disassemble_swizzle(f, s + l);
- s[l] = 0;
- return l;
-}
-
-int vertex_program_disassembler::disassemble_output(fields f, char *s)
-{
- int l;
-
- if (f.OutputSelect == 1) {
- strcpy(s, vecouts[f.OutputIndex]);
- return strlen(s);
- }
- else {
- strcpy(s, "c[");
- l = 2;
- l = l + sprintf(s + l, "%d", f.OutputIndex - 96);
- s[l] = ']';
- l++;
- }
- s[l] = 0;
- return l;
-}
-
-int vertex_program_disassembler::output_types(fields f, int *o)
-{
- o[0] = o[1] = o[2] = o[3] = o[4] = o[5] = 0;
- if ((f.VecOperation > 0) && (f.VecTempWriteMask != 0))
- o[0] = 1;
- if ((f.VecOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 0))
- o[1] = 1;
- if ((f.ScaOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 1))
- o[2] = 1;
- if ((f.ScaOperation > 0) && (f.ScaTempWriteMask != 0))
- o[3] = 1;
- if (f.VecOperation == 13)
- o[4] = 1;
- if (f.EndOfProgram == 1)
- o[5] = 1;
- return o[0] + o[1] + o[2] + o[3] + o[4] + o[5];
-}
-
-int vertex_program_disassembler::disassemble(unsigned int *instruction, char *line)
-{
- int b, p;
- char *c;
-
- if (state == 0) {
- decodefields(instruction, 0, f);
- output_types(f, o);
- state = 1;
- }
- if (o[0] != 0)
- {
- o[0] = 0;
- c = line;
- strcpy(c, vecops[f.VecOperation]);
- c = c + strlen(c);
- strcpy(c, " r");
- c = c + 2;
- c = c + sprintf(c, "%d", f.VecTempIndex);
- c = c + disassemble_mask(f.VecTempWriteMask, c);
- b = 0;
- for (p = 4; p != 0; p = p >> 1)
- {
- if ((vecpar2[f.VecOperation] & p) != 0) {
- c[0] = ',';
- c++;
- c = c + disassemble_source(f.src[b], f, c);
- }
- b++;
- }
- *c = 0;
- return 1;
- }
- if (o[1] != 0)
- {
- o[1] = 0;
- c = line;
- strcpy(c, vecops[f.VecOperation]);
- c = c + strlen(c);
- *c = ' ';
- c++;
- c = c + disassemble_output(f, c);
- c = c + disassemble_mask(f.OutputWriteMask, c);
- b = 0;
- for (p = 4; p != 0; p = p >> 1)
- {
- if ((vecpar2[f.VecOperation] & p) != 0) {
- *c = ',';
- c++;
- c = c + disassemble_source(f.src[b], f, c);
- }
- b++;
- }
- *c = 0;
- return 1;
- }
- if (o[2] != 0)
- {
- o[2] = 0;
- c = line;
- strcpy(c, scaops[f.ScaOperation]);
- c = c + strlen(c);
- *c = ' ';
- c++;
- c = c + disassemble_output(f, c);
- c = c + disassemble_mask(f.OutputWriteMask, c);
- b = 0;
- for (p = 4; p != 0; p = p >> 1)
- {
- if ((scapar2[f.ScaOperation] & p) != 0) {
- *c = ',';
- c++;
- c = c + disassemble_source(f.src[b], f, c);
- }
- b++;
- }
- *c = 0;
- return 1;
- }
- if (o[3] != 0)
- {
- if (f.VecOperation > 0)
- b = 1;
- else
- b = f.VecTempIndex;
- o[3] = 0;
- c = line;
- strcpy(c, scaops[f.ScaOperation]);
- c = c + strlen(c);
- strcpy(c, " r");
- c = c + 2;
- c = c + sprintf(c, "%d", b);
- c = c + disassemble_mask(f.ScaTempWriteMask, c);
- b = 0;
- for (p = 4; p != 0; p = p >> 1)
- {
- if ((scapar2[f.ScaOperation] & p) != 0) {
- *c = ',';
- c++;
- c = c + disassemble_source(f.src[b], f, c);
- }
- b++;
- }
- *c = 0;
- return 1;
- }
- if (o[4] != 0)
- {
- o[4] = 0;
- c = line;
- c = c + sprintf(c, "MOV a0.x,");
- c = c + disassemble_source(f.src[0], f, c);
- *c = 0;
- return 1;
- }
- if (o[5] != 0)
- {
- o[5] = 0;
- strcpy(line, "END");
- return 1;
- }
- state = 0;
- return 0;
-}
-
-/*
- * geforce 3d (NV2A) accellerator
- */
-/* very simplified view
-there is a set of context objects
-
-context objects are stored in RAMIN
-each context object is identified by an handle stored in RAMHT
-
-each context object can be assigned to a channel
-to assign you give to the channel an handle for the object
-
-offset in ramht=(((((handle >> 11) xor handle) >> 11) xor handle) & 0x7ff)*8
-offset in ramht contains the handle itself
-offset in ramht+4 contains in the lower 16 bits the offset in RAMIN divided by 16
-
-objects have methods used to do drawing
-most methods set parameters, others actually draw
-*/
-class nv2a_renderer : public poly_manager<float, nvidia_object_data, 12, 8192>
-{
-public:
- nv2a_renderer(running_machine &machine) : poly_manager<float, nvidia_object_data, 12, 8192>(machine)
- {
- memset(channel,0,sizeof(channel));
- memset(pfifo,0,sizeof(pfifo));
- memset(pcrtc,0,sizeof(pcrtc));
- memset(pmc,0,sizeof(pmc));
- memset(ramin,0,sizeof(ramin));
- computedilated();
- fb.allocate(640,480);
- objectdata=&(object_data_alloc());
- objectdata->data=this;
- combiner.used=0;
- combiner.lock=osd_lock_alloc();
- enabled_vertex_attributes=0;
- indexesleft_count = 0;
- vertex_pipeline = 4;
- alpha_test_enabled = false;
- alpha_reference = 0;
- alpha_func = nv2a_renderer::ALWAYS;
- blending_enabled = false;
- blend_equation = nv2a_renderer::FUNC_ADD;
- blend_color = 0;
- blend_function_destination = nv2a_renderer::ZERO;
- blend_function_source = nv2a_renderer::ONE;
- logical_operation_enabled = false;
- logical_operation = nv2a_renderer::COPY;
- debug_grab_texttype = -1;
- debug_grab_textfile = NULL;
- memset(vertex_attribute_words, 0, sizeof(vertex_attribute_words));
- memset(vertex_attribute_offset, 0, sizeof(vertex_attribute_offset));
- }
- DECLARE_READ32_MEMBER( geforce_r );
- DECLARE_WRITE32_MEMBER( geforce_w );
- void vblank_callback(screen_device &screen, bool state);
- UINT32 screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
-
- void render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
- void render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
- void render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid);
-
- int geforce_commandkind(UINT32 word);
- UINT32 geforce_object_offset(UINT32 handle);
- void geforce_read_dma_object(UINT32 handle,UINT32 &offset,UINT32 &size);
- void geforce_exec_method(address_space &space,UINT32 channel,UINT32 subchannel,UINT32 method,UINT32 address,int &countlen);
- UINT32 texture_get_texel(int number,int x,int y);
- void write_pixel(int x, int y, UINT32 color);
- void combiner_initialize_registers(UINT32 argb8[6]);
- void combiner_initialize_stage(int stage_number);
- void combiner_initialize_final();
- void combiner_map_input(int stage_number); // map combiner registers to variables A..D
- void combiner_map_output(int stage_number); // map combiner calculation results to combiner registers
- void combiner_map_final_input(); // map final combiner registers to variables A..F
- void combiner_final_output(); // generate final combiner output
- float combiner_map_input_select(int code,int index); // get component index in register code
- float *combiner_map_input_select3(int code); // get pointer to register code
- float *combiner_map_output_select3(int code); // get pointer to register code for output
- float combiner_map_input_function(int code,float value); // apply input mapping function code to value
- void combiner_map_input_function3(int code,float *data); // apply input mapping function code to data
- void combiner_function_AB(float result[4]);
- void combiner_function_AdotB(float result[4]);
- void combiner_function_CD(float result[4]);
- void combiner_function_CdotD(float result[4]);
- void combiner_function_ABmuxCD(float result[4]);
- void combiner_function_ABsumCD(float result[4]);
- void combiner_compute_rgb_outputs(int index);
- void combiner_compute_a_outputs(int index);
- void combiner_argb8_float(UINT32 color,float reg[4]);
- UINT32 combiner_float_argb8(float reg[4]);
- UINT32 dilate0(UINT32 value,int bits);
- UINT32 dilate1(UINT32 value,int bits);
- void computedilated(void);
- void putpixtex(int xp,int yp,int up,int vp);
- int toggle_register_combiners_usage();
- void debug_grab_texture(int type, const char *filename);
- void debug_grab_vertex_program_slot(int slot, UINT32 *instruction);
- void savestate_items();
-
- struct vertex {
- union {
- float fv[4];
- UINT32 iv[4];
- } attribute[16];
- };
- int read_vertices_0x1810(address_space & space, vertex *destination, int offset, int limit);
- int read_vertices_0x1800(address_space & space, vertex *destination, UINT32 address, int limit);
- int read_vertices_0x1818(address_space & space, vertex *destination, UINT32 address, int limit);
- void convert_vertices_poly(vertex *source, vertex_t *destination, int count);
-
- struct {
- UINT32 regs[0x80/4];
- struct {
- UINT32 objhandle;
- UINT32 objclass;
- UINT32 method[0x2000/4];
- } object;
- } channel[32][8];
- UINT32 pfifo[0x2000/4];
- UINT32 pcrtc[0x1000/4];
- UINT32 pmc[0x1000/4];
- UINT32 ramin[0x100000/4];
- UINT32 dma_offset[2];
- UINT32 dma_size[2];
- UINT32 vertexbuffer_address[16];
- int vertexbuffer_stride[16];
- struct {
- int enabled;
- int sizeu;
- int sizev;
- int sizew;
- int dilate;
- int format;
- int rectangle_pitch;
- void *buffer;
- } texture[4];
- int primitives_count;
- int indexesleft_count;
- int indexesleft_first;
- UINT32 indexesleft[8];
- struct {
- float variable_A[4]; // 0=R 1=G 2=B 3=A
- float variable_B[4];
- float variable_C[4];
- float variable_D[4];
- float variable_E[4];
- float variable_F[4];
- float variable_G;
- float variable_EF[4];
- float variable_sumclamp[4];
- float function_RGBop1[4]; // 0=R 1=G 2=B
- float function_RGBop2[4];
- float function_RGBop3[4];
- float function_Aop1;
- float function_Aop2;
- float function_Aop3;
- float register_primarycolor[4]; // rw
- float register_secondarycolor[4];
- float register_texture0color[4];
- float register_texture1color[4];
- float register_texture2color[4];
- float register_texture3color[4];
- float register_color0[4];
- float register_color1[4];
- float register_spare0[4];
- float register_spare1[4];
- float register_fogcolor[4]; // ro
- float register_zero[4];
- float output[4];
- struct {
- float register_constantcolor0[4];
- float register_constantcolor1[4];
- int mapin_aA_input;
- int mapin_aA_component;
- int mapin_aA_mapping;
- int mapin_aB_input;
- int mapin_aB_component;
- int mapin_aB_mapping;
- int mapin_aC_input;
- int mapin_aC_component;
- int mapin_aC_mapping;
- int mapin_aD_input;
- int mapin_aD_component;
- int mapin_aD_mapping;
- int mapin_rgbA_input;
- int mapin_rgbA_component;
- int mapin_rgbA_mapping;
- int mapin_rgbB_input;
- int mapin_rgbB_component;
- int mapin_rgbB_mapping;
- int mapin_rgbC_input;
- int mapin_rgbC_component;
- int mapin_rgbC_mapping;
- int mapin_rgbD_input;
- int mapin_rgbD_component;
- int mapin_rgbD_mapping;
- int mapout_aCD_output;
- int mapout_aAB_output;
- int mapout_aSUM_output;
- int mapout_aCD_dotproduct;
- int mapout_aAB_dotproduct;
- int mapout_a_muxsum;
- int mapout_a_bias;
- int mapout_a_scale;
- int mapout_rgbCD_output;
- int mapout_rgbAB_output;
- int mapout_rgbSUM_output;
- int mapout_rgbCD_dotproduct;
- int mapout_rgbAB_dotproduct;
- int mapout_rgb_muxsum;
- int mapout_rgb_bias;
- int mapout_rgb_scale;
- } stage[8];
- struct {
- float register_constantcolor0[4];
- float register_constantcolor1[4];
- int color_sum_clamp;
- int mapin_rgbA_input;
- int mapin_rgbA_component;
- int mapin_rgbA_mapping;
- int mapin_rgbB_input;
- int mapin_rgbB_component;
- int mapin_rgbB_mapping;
- int mapin_rgbC_input;
- int mapin_rgbC_component;
- int mapin_rgbC_mapping;
- int mapin_rgbD_input;
- int mapin_rgbD_component;
- int mapin_rgbD_mapping;
- int mapin_rgbE_input;
- int mapin_rgbE_component;
- int mapin_rgbE_mapping;
- int mapin_rgbF_input;
- int mapin_rgbF_component;
- int mapin_rgbF_mapping;
- int mapin_aG_input;
- int mapin_aG_component;
- int mapin_aG_mapping;
- } final;
- int stages;
- int used;
- osd_lock *lock;
- } combiner;
- bool alpha_test_enabled;
- int alpha_func;
- int alpha_reference;
- bool blending_enabled;
- int blend_equation;
- int blend_function_source;
- int blend_function_destination;
- UINT32 blend_color;
- bool logical_operation_enabled;
- int logical_operation;
- struct {
- float modelview[16];
- float modelview_inverse[16];
- float projection[16];
- float translate[4];
- float scale[4];
- } matrix;
- struct {
- UINT32 instruction[1024];
- int instructions;
- int upload_instruction;
- int start_instruction;
- float parameter[1024];
- int upload_parameter;
- } vertexprogram;
- int vertex_pipeline;
- int enabled_vertex_attributes;
- int vertex_attribute_words[16];
- int vertex_attribute_offset[16];
- bitmap_rgb32 fb;
- UINT32 dilated0[16][2048];
- UINT32 dilated1[16][2048];
- int dilatechose[256];
- nvidia_object_data *objectdata;
- int debug_grab_texttype;
- char *debug_grab_textfile;
-
- enum NV2A_BEGIN_END {
- STOP=0,
- POINTS=1,
- LINES=2,
- LINE_LOOP=3,
- LINE_STRIP=4,
- TRIANGLES=5,
- TRIANGLE_STRIP=6,
- TRIANGLE_FAN=7,
- QUADS=8,
- QUAD_STRIP=9,
- POLYGON=10
- };
- enum NV2A_VERTEX_ATTR {
- POS=0,
- WEIGHT=1,
- NORMAL=2,
- COLOR0=3,
- COLOR1=4,
- FOG=5,
- TEX0=9,
- TEX1=10,
- TEX2=11,
- TEX3=12
- };
- enum NV2A_VTXBUF_TYPE {
- FLOAT=2,
- UBYTE=4,
- USHORT=5
- };
- enum NV2A_TEX_FORMAT {
- L8=0x0,
- I8=0x1,
- A1R5G5B5=0x2,
- A4R4G4B4=0x4,
- R5G6B5=0x5,
- A8R8G8B8=0x6,
- X8R8G8B8=0x7,
- INDEX8=0xb,
- DXT1=0xc,
- DXT3=0xe,
- DXT5=0xf,
- A1R5G5B5_RECT=0x10,
- R5G6B5_RECT=0x11,
- A8R8G8B8_RECT=0x12,
- L8_RECT=0x13,
- DSDT8_RECT=0x17,
- A8L8=0x1a,
- I8_RECT=0x1b,
- A4R4G4B4_RECT=0x1d,
- R8G8B8_RECT=0x1e,
- A8L8_RECT=0x20,
- Z24=0x2a,
- Z24_RECT=0x2b,
- Z16=0x2c,
- Z16_RECT=0x2d,
- DSDT8=0x28,
- HILO16=0x33,
- HILO16_RECT=0x36,
- HILO8=0x44,
- SIGNED_HILO8=0x45,
- HILO8_RECT=0x46,
- SIGNED_HILO8_RECT=0x47
- };
- enum NV2A_LOGIC_OP {
- CLEAR=0x1500,
- AND=0x1501,
- AND_REVERSE=0x1502,
- COPY=0x1503,
- AND_INVERTED=0x1504,
- NOOP=0x1505,
- XOR=0x1506,
- OR=0x1507,
- NOR=0x1508,
- EQUIV=0x1509,
- INVERT=0x150a,
- OR_REVERSE=0x150b,
- COPY_INVERTED=0x150c,
- OR_INVERTED=0x150d,
- NAND=0x150e,
- SET=0x150f
- };
- enum NV2A_BLEND_EQUATION {
- FUNC_ADD=0x8006,
- MIN=0x8007,
- MAX=0x8008,
- FUNC_SUBTRACT=0x800a,
- FUNC_REVERSE_SUBTRACT=0x80b
- };
- enum NV2A_BLEND_FACTOR {
- ZERO=0x0000,
- ONE=0x0001,
- SRC_COLOR=0x0300,
- ONE_MINUS_SRC_COLOR=0x0301,
- SRC_ALPHA=0x0302,
- ONE_MINUS_SRC_ALPHA=0x0303,
- DST_ALPHA=0x0304,
- ONE_MINUS_DST_ALPHA=0x0305,
- DST_COLOR=0x0306,
- ONE_MINUS_DST_COLOR=0x0307,
- SRC_ALPHA_SATURATE=0x0308,
- CONSTANT_COLOR=0x8001,
- ONE_MINUS_CONSTANT_COLOR=0x8002,
- CONSTANT_ALPHA=0x8003,
- ONE_MINUS_CONSTANT_ALPHA=0x8004
- };
- enum NV2A_COMPARISON_OP {
- NEVER=0x0200,
- LESS=0x0201,
- EQUAL=0x0202,
- LEQUAL=0x0203,
- GREATER=0x0204,
- NOTEQUAL=0x0205,
- GEQUAL=0x0206,
- ALWAYS=0x0207
- };
- enum NV2A_STENCIL_OP {
- ZEROOP=0x0000,
- INVERTOP=0x150a,
- KEEP=0x1e00,
- REPLACE=0x1e01,
- INCR=0x1e02,
- DECR=0x1e03,
- INCR_WRAP=0x8507,
- DECR_WRAP=0x8508
- };
-};
-
/* jamtable instructions for Chihiro (different from console)
St. Instr. Comment
0x01 POKEPCI PCICONF[OP2] := OP1
@@ -1380,107 +488,107 @@ St. Instr. Comment
*/
/* jamtable disassembler */
-static void jamtable_disasm(running_machine &machine, address_space &space,UINT32 address,UINT32 size) // 0xff000080 == fff00080
+static void jamtable_disasm(running_machine &machine, address_space &space, UINT32 address, UINT32 size) // 0xff000080 == fff00080
{
- offs_t base,addr;
- UINT32 opcode,op1,op2;
+ offs_t base, addr;
+ UINT32 opcode, op1, op2;
char sop1[16];
char sop2[16];
char pcrel[16];
- addr=(offs_t)address;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&addr))
+ addr = (offs_t)address;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &addr))
{
- debug_console_printf(machine,"Address is unmapped.\n");
+ debug_console_printf(machine, "Address is unmapped.\n");
return;
}
while (1)
{
- base=addr;
- opcode=space.read_byte(addr);
+ base = addr;
+ opcode = space.read_byte(addr);
addr++;
- op1=space.read_dword_unaligned(addr);
- addr+=4;
- op2=space.read_dword_unaligned(addr);
- addr+=4;
+ op1 = space.read_dword_unaligned(addr);
+ addr += 4;
+ op2 = space.read_dword_unaligned(addr);
+ addr += 4;
if (opcode == 0xe1)
{
- opcode=op2 & 255;
- op2=op1;
+ opcode = op2 & 255;
+ op2 = op1;
//op1=edi;
- sprintf(sop2,"%08X",op2);
- sprintf(sop1,"ACC");
- sprintf(pcrel,"PC+ACC");
+ sprintf(sop2, "%08X", op2);
+ sprintf(sop1, "ACC");
+ sprintf(pcrel, "PC+ACC");
}
else
{
- sprintf(sop2,"%08X",op2);
- sprintf(sop1,"%08X",op1);
- sprintf(pcrel,"%08X",base+9+op1);
+ sprintf(sop2, "%08X", op2);
+ sprintf(sop1, "%08X", op1);
+ sprintf(pcrel, "%08X", base + 9 + op1);
}
- debug_console_printf(machine,"%08X ",base);
+ debug_console_printf(machine, "%08X ", base);
// dl=instr ebx=par1 eax=par2
switch (opcode)
{
- case 0x01:
- // if ((op2 & 0xff) == 0x880) op1=op1 & 0xfffffffd
- // out cf8,op2
- // out cfc,op1
- // out cf8,0
- // cf8 (CONFIG_ADDRESS) format:
- // 31 30 24 23 16 15 11 10 8 7 2 1 0
- // +-+----------+------------+---------------+-----------------+-----------------+-+-+
- // | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0|
- // +-+----------+------------+---------------+-----------------+-----------------+-+-+
- // 31 - Enable bit
- debug_console_printf(machine,"POKEPCI PCICONF[%s]=%s\n",sop2,sop1);
- break;
- case 0x02:
- debug_console_printf(machine,"OUTB PORT[%s]=%s\n",sop2,sop1);
- break;
- case 0x03:
- debug_console_printf(machine,"POKE MEM[%s]=%s\n",sop2,sop1);
- break;
- case 0x04:
- debug_console_printf(machine,"BNE IF ACC != %s THEN PC=%s\n",sop2,pcrel);
- break;
- case 0x05:
- // out cf8,op2
- // in acc,cfc
- debug_console_printf(machine,"PEEKPCI ACC=PCICONF[%s]\n",sop2);
- break;
- case 0x06:
- debug_console_printf(machine,"AND/OR ACC=(ACC & %s) | %s\n",sop2,sop1);
- break;
- case 0x07:
- debug_console_printf(machine,"BRA PC=%s\n",pcrel);
- break;
- case 0x08:
- debug_console_printf(machine,"INB ACC=PORT[%s]\n",sop2);
- break;
- case 0x09:
- debug_console_printf(machine,"PEEK ACC=MEM[%s]\n",sop2);
- break;
- case 0xee:
- debug_console_printf(machine,"END\n");
- break;
- default:
- debug_console_printf(machine,"NOP ????\n");
- break;
+ case 0x01:
+ // if ((op2 & 0xff) == 0x880) op1=op1 & 0xfffffffd
+ // out cf8,op2
+ // out cfc,op1
+ // out cf8,0
+ // cf8 (CONFIG_ADDRESS) format:
+ // 31 30 24 23 16 15 11 10 8 7 2 1 0
+ // +-+----------+------------+---------------+-----------------+-----------------+-+-+
+ // | | Reserved | Bus Number | Device Number | Function Number | Register Number |0|0|
+ // +-+----------+------------+---------------+-----------------+-----------------+-+-+
+ // 31 - Enable bit
+ debug_console_printf(machine, "POKEPCI PCICONF[%s]=%s\n", sop2, sop1);
+ break;
+ case 0x02:
+ debug_console_printf(machine, "OUTB PORT[%s]=%s\n", sop2, sop1);
+ break;
+ case 0x03:
+ debug_console_printf(machine, "POKE MEM[%s]=%s\n", sop2, sop1);
+ break;
+ case 0x04:
+ debug_console_printf(machine, "BNE IF ACC != %s THEN PC=%s\n", sop2, pcrel);
+ break;
+ case 0x05:
+ // out cf8,op2
+ // in acc,cfc
+ debug_console_printf(machine, "PEEKPCI ACC=PCICONF[%s]\n", sop2);
+ break;
+ case 0x06:
+ debug_console_printf(machine, "AND/OR ACC=(ACC & %s) | %s\n", sop2, sop1);
+ break;
+ case 0x07:
+ debug_console_printf(machine, "BRA PC=%s\n", pcrel);
+ break;
+ case 0x08:
+ debug_console_printf(machine, "INB ACC=PORT[%s]\n", sop2);
+ break;
+ case 0x09:
+ debug_console_printf(machine, "PEEK ACC=MEM[%s]\n", sop2);
+ break;
+ case 0xee:
+ debug_console_printf(machine, "END\n");
+ break;
+ default:
+ debug_console_printf(machine, "NOP ????\n");
+ break;
}
if (opcode == 0xee)
break;
if (size <= 9)
break;
- size-=9;
+ size -= 9;
}
}
static void jamtable_disasm_command(running_machine &machine, int ref, int params, const char **param)
{
chihiro_state *state = machine.driver_data<chihiro_state>();
- address_space &space=state->m_maincpu->space();
- UINT64 addr,size;
+ address_space &space = state->m_maincpu->space();
+ UINT64 addr, size;
if (params < 2)
return;
@@ -1494,47 +602,47 @@ static void jamtable_disasm_command(running_machine &machine, int ref, int param
static void dump_string_command(running_machine &machine, int ref, int params, const char **param)
{
chihiro_state *state = machine.driver_data<chihiro_state>();
- address_space &space=state->m_maincpu->space();
+ address_space &space = state->m_maincpu->space();
UINT64 addr;
offs_t address;
- UINT32 length,maximumlength;
+ UINT32 length, maximumlength;
offs_t buffer;
if (params < 1)
return;
if (!debug_command_parameter_number(machine, param[0], &addr))
return;
- address=(offs_t)addr;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ address = (offs_t)addr;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
{
- debug_console_printf(machine,"Address is unmapped.\n");
+ debug_console_printf(machine, "Address is unmapped.\n");
return;
}
- length=space.read_word_unaligned(address);
- maximumlength=space.read_word_unaligned(address+2);
- buffer=space.read_dword_unaligned(address+4);
- debug_console_printf(machine,"Length %d word\n",length);
- debug_console_printf(machine,"MaximumLength %d word\n",maximumlength);
- debug_console_printf(machine,"Buffer %08X byte* ",buffer);
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&buffer))
+ length = space.read_word_unaligned(address);
+ maximumlength = space.read_word_unaligned(address + 2);
+ buffer = space.read_dword_unaligned(address + 4);
+ debug_console_printf(machine, "Length %d word\n", length);
+ debug_console_printf(machine, "MaximumLength %d word\n", maximumlength);
+ debug_console_printf(machine, "Buffer %08X byte* ", buffer);
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &buffer))
{
- debug_console_printf(machine,"\nBuffer is unmapped.\n");
+ debug_console_printf(machine, "\nBuffer is unmapped.\n");
return;
}
if (length > 256)
- length=256;
- for (int a=0;a < length;a++)
+ length = 256;
+ for (int a = 0; a < length; a++)
{
- UINT8 c=space.read_byte(buffer+a);
- debug_console_printf(machine,"%c",c);
+ UINT8 c = space.read_byte(buffer + a);
+ debug_console_printf(machine, "%c", c);
}
- debug_console_printf(machine,"\n");
+ debug_console_printf(machine, "\n");
}
static void dump_process_command(running_machine &machine, int ref, int params, const char **param)
{
chihiro_state *state = machine.driver_data<chihiro_state>();
- address_space &space=state->m_maincpu->space();
+ address_space &space = state->m_maincpu->space();
UINT64 addr;
offs_t address;
@@ -1542,66 +650,66 @@ static void dump_process_command(running_machine &machine, int ref, int params,
return;
if (!debug_command_parameter_number(machine, param[0], &addr))
return;
- address=(offs_t)addr;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ address = (offs_t)addr;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
{
- debug_console_printf(machine,"Address is unmapped.\n");
+ debug_console_printf(machine, "Address is unmapped.\n");
return;
}
- debug_console_printf(machine,"ReadyListHead {%08X,%08X} _LIST_ENTRY\n",space.read_dword_unaligned(address),space.read_dword_unaligned(address+4));
- debug_console_printf(machine,"ThreadListHead {%08X,%08X} _LIST_ENTRY\n",space.read_dword_unaligned(address+8),space.read_dword_unaligned(address+12));
- debug_console_printf(machine,"StackCount %d dword\n",space.read_dword_unaligned(address+16));
- debug_console_printf(machine,"ThreadQuantum %d dword\n",space.read_dword_unaligned(address+20));
- debug_console_printf(machine,"BasePriority %d byte\n",space.read_byte(address+24));
- debug_console_printf(machine,"DisableBoost %d byte\n",space.read_byte(address+25));
- debug_console_printf(machine,"DisableQuantum %d byte\n",space.read_byte(address+26));
- debug_console_printf(machine,"_padding %d byte\n",space.read_byte(address+27));
+ debug_console_printf(machine, "ReadyListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address), space.read_dword_unaligned(address + 4));
+ debug_console_printf(machine, "ThreadListHead {%08X,%08X} _LIST_ENTRY\n", space.read_dword_unaligned(address + 8), space.read_dword_unaligned(address + 12));
+ debug_console_printf(machine, "StackCount %d dword\n", space.read_dword_unaligned(address + 16));
+ debug_console_printf(machine, "ThreadQuantum %d dword\n", space.read_dword_unaligned(address + 20));
+ debug_console_printf(machine, "BasePriority %d byte\n", space.read_byte(address + 24));
+ debug_console_printf(machine, "DisableBoost %d byte\n", space.read_byte(address + 25));
+ debug_console_printf(machine, "DisableQuantum %d byte\n", space.read_byte(address + 26));
+ debug_console_printf(machine, "_padding %d byte\n", space.read_byte(address + 27));
}
static void dump_list_command(running_machine &machine, int ref, int params, const char **param)
{
chihiro_state *state = machine.driver_data<chihiro_state>();
- address_space &space=state->m_maincpu->space();
- UINT64 addr,offs,start,old;
- offs_t address,offset;
+ address_space &space = state->m_maincpu->space();
+ UINT64 addr, offs, start, old;
+ offs_t address, offset;
if (params < 1)
return;
if (!debug_command_parameter_number(machine, param[0], &addr))
return;
- offs=0;
- offset=0;
+ offs = 0;
+ offset = 0;
if (params >= 2)
{
if (!debug_command_parameter_number(machine, param[1], &offs))
return;
- offset=(offs_t)offs;
+ offset = (offs_t)offs;
}
- start=addr;
- address=(offs_t)addr;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ start = addr;
+ address = (offs_t)addr;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
{
- debug_console_printf(machine,"Address is unmapped.\n");
+ debug_console_printf(machine, "Address is unmapped.\n");
return;
}
if (params >= 2)
- debug_console_printf(machine,"Entry Object\n");
+ debug_console_printf(machine, "Entry Object\n");
else
- debug_console_printf(machine,"Entry\n");
- for (int num=0;num < 32;num++)
+ debug_console_printf(machine, "Entry\n");
+ for (int num = 0; num < 32; num++)
{
if (params >= 2)
- debug_console_printf(machine,"%08X %08X\n",(UINT32)addr,(offs_t)addr-offset);
+ debug_console_printf(machine, "%08X %08X\n", (UINT32)addr, (offs_t)addr - offset);
else
- debug_console_printf(machine,"%08X\n",(UINT32)addr);
- old=addr;
- addr=space.read_dword_unaligned(address);
+ debug_console_printf(machine, "%08X\n", (UINT32)addr);
+ old = addr;
+ addr = space.read_dword_unaligned(address);
if (addr == start)
break;
if (addr == old)
break;
- address=(offs_t)addr;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ address = (offs_t)addr;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
break;
}
}
@@ -1609,42 +717,42 @@ static void dump_list_command(running_machine &machine, int ref, int params, con
static void curthread_command(running_machine &machine, int ref, int params, const char **param)
{
chihiro_state *state = machine.driver_data<chihiro_state>();
- address_space &space=state->m_maincpu->space();
+ address_space &space = state->m_maincpu->space();
UINT64 fsbase;
- UINT32 kthrd,topstack,tlsdata;
+ UINT32 kthrd, topstack, tlsdata;
offs_t address;
fsbase = state->m_maincpu->state_int(44);
- address=(offs_t)fsbase+0x28;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ address = (offs_t)fsbase + 0x28;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
{
- debug_console_printf(machine,"Address is unmapped.\n");
+ debug_console_printf(machine, "Address is unmapped.\n");
return;
}
- kthrd=space.read_dword_unaligned(address);
- debug_console_printf(machine,"Current thread is %08X\n",kthrd);
- address=(offs_t)kthrd+0x1c;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ kthrd = space.read_dword_unaligned(address);
+ debug_console_printf(machine, "Current thread is %08X\n", kthrd);
+ address = (offs_t)kthrd + 0x1c;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
return;
- topstack=space.read_dword_unaligned(address);
- debug_console_printf(machine,"Current thread stack top is %08X\n",topstack);
- address=(offs_t)kthrd+0x28;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ topstack = space.read_dword_unaligned(address);
+ debug_console_printf(machine, "Current thread stack top is %08X\n", topstack);
+ address = (offs_t)kthrd + 0x28;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
return;
- tlsdata=space.read_dword_unaligned(address);
+ tlsdata = space.read_dword_unaligned(address);
if (tlsdata == 0)
- address=(offs_t)topstack-0x210-8;
+ address = (offs_t)topstack - 0x210 - 8;
else
- address=(offs_t)tlsdata-8;
- if (!debug_cpu_translate(space,TRANSLATE_READ_DEBUG,&address))
+ address = (offs_t)tlsdata - 8;
+ if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &address))
return;
- debug_console_printf(machine,"Current thread function is %08X\n",space.read_dword_unaligned(address));
+ debug_console_printf(machine, "Current thread function is %08X\n", space.read_dword_unaligned(address));
}
static void generate_irq_command(running_machine &machine, int ref, int params, const char **param)
{
UINT64 irq;
- chihiro_state *chst=machine.driver_data<chihiro_state>();
+ chihiro_state *chst = machine.driver_data<chihiro_state>();
if (params < 1)
return;
@@ -1654,19 +762,19 @@ static void generate_irq_command(running_machine &machine, int ref, int params,
return;
if (irq == 2)
return;
- chst->debug_generate_irq((int)irq,true);
+ chst->debug_generate_irq((int)irq, true);
}
static void nv2a_combiners_command(running_machine &machine, int ref, int params, const char **param)
{
int en;
- chihiro_state *chst=machine.driver_data<chihiro_state>();
- en=chst->nvidia_nv2a->toggle_register_combiners_usage();
+ chihiro_state *chst = machine.driver_data<chihiro_state>();
+ en = chst->nvidia_nv2a->toggle_register_combiners_usage();
if (en != 0)
- debug_console_printf(machine,"Register combiners enabled\n");
+ debug_console_printf(machine, "Register combiners enabled\n");
else
- debug_console_printf(machine,"Register combiners disabled\n");
+ debug_console_printf(machine, "Register combiners disabled\n");
}
static void grab_texture_command(running_machine &machine, int ref, int params, const char **param)
@@ -1680,7 +788,7 @@ static void grab_texture_command(running_machine &machine, int ref, int params,
return;
if ((param[1][0] == 0) || (strlen(param[1]) > 127))
return;
- chst->nvidia_nv2a->debug_grab_texture((int)type,param[1]);
+ chst->nvidia_nv2a->debug_grab_texture((int)type, param[1]);
}
static void grab_vprog_command(running_machine &machine, int ref, int params, const char **param)
@@ -1728,10 +836,11 @@ static void vprogdis_command(running_machine &machine, int ref, int params, cons
if (!debug_cpu_translate(space, TRANSLATE_READ_DEBUG, &addr))
return;
instruction[0] = space.read_dword_unaligned(address);
- instruction[1] = space.read_dword_unaligned(address+4);
- instruction[2] = space.read_dword_unaligned(address+8);
- instruction[3] = space.read_dword_unaligned(address+12);
- } else
+ instruction[1] = space.read_dword_unaligned(address + 4);
+ instruction[2] = space.read_dword_unaligned(address + 8);
+ instruction[3] = space.read_dword_unaligned(address + 12);
+ }
+ else
chst->nvidia_nv2a->debug_grab_vertex_program_slot((int)address, instruction);
while (vd.disassemble(instruction, line) != 0)
debug_console_printf(machine, "%s\n", line);
@@ -1745,38 +854,38 @@ static void vprogdis_command(running_machine &machine, int ref, int params, cons
static void help_command(running_machine &machine, int ref, int params, const char **param)
{
- debug_console_printf(machine,"Available Chihiro commands:\n");
- debug_console_printf(machine," chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n");
- debug_console_printf(machine," chihiro dump_string,<address> -- Dump _STRING object at <address>\n");
- debug_console_printf(machine," chihiro dump_process,<address> -- Dump _PROCESS object at <address>\n");
- debug_console_printf(machine," chihiro dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n");
- debug_console_printf(machine," chihiro curthread -- Print information about current thread\n");
- debug_console_printf(machine," chihiro irq,<number> -- Generate interrupt with irq number 0-15\n");
- debug_console_printf(machine," chihiro nv2a_combiners -- Toggle use of register combiners\n");
- debug_console_printf(machine," chihiro grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n");
- debug_console_printf(machine," chihiro grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n");
- debug_console_printf(machine," chihiro vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n");
- debug_console_printf(machine," chihiro help -- this list\n");
+ debug_console_printf(machine, "Available Chihiro commands:\n");
+ debug_console_printf(machine, " chihiro jamdis,<start>,<size> -- Disassemble <size> bytes of JamTable instructions starting at <start>\n");
+ debug_console_printf(machine, " chihiro dump_string,<address> -- Dump _STRING object at <address>\n");
+ debug_console_printf(machine, " chihiro dump_process,<address> -- Dump _PROCESS object at <address>\n");
+ debug_console_printf(machine, " chihiro dump_list,<address>[,<offset>] -- Dump _LIST_ENTRY chain starting at <address>\n");
+ debug_console_printf(machine, " chihiro curthread -- Print information about current thread\n");
+ debug_console_printf(machine, " chihiro irq,<number> -- Generate interrupt with irq number 0-15\n");
+ debug_console_printf(machine, " chihiro nv2a_combiners -- Toggle use of register combiners\n");
+ debug_console_printf(machine, " chihiro grab_texture,<type>,<filename> -- Save to <filename> the next used texture of type <type>\n");
+ debug_console_printf(machine, " chihiro grab_vprog,<filename> -- save current vertex program instruction slots to <filename>\n");
+ debug_console_printf(machine, " chihiro vprogdis,<address>,<length>[,<type>] -- disassemble <lenght> vertex program instructions at <address> of <type>\n");
+ debug_console_printf(machine, " chihiro help -- this list\n");
}
static void chihiro_debug_commands(running_machine &machine, int ref, int params, const char **param)
{
if (params < 1)
return;
- if (strcmp("jamdis",param[0]) == 0)
- jamtable_disasm_command(machine,ref,params-1,param+1);
- else if (strcmp("dump_string",param[0]) == 0)
- dump_string_command(machine,ref,params-1,param+1);
- else if (strcmp("dump_process",param[0]) == 0)
- dump_process_command(machine,ref,params-1,param+1);
- else if (strcmp("dump_list",param[0]) == 0)
- dump_list_command(machine,ref,params-1,param+1);
- else if (strcmp("curthread",param[0]) == 0)
- curthread_command(machine,ref,params-1,param+1);
- else if (strcmp("irq",param[0]) == 0)
- generate_irq_command(machine,ref,params-1,param+1);
- else if (strcmp("nv2a_combiners",param[0]) == 0)
- nv2a_combiners_command(machine,ref,params-1,param+1);
+ if (strcmp("jamdis", param[0]) == 0)
+ jamtable_disasm_command(machine, ref, params - 1, param + 1);
+ else if (strcmp("dump_string", param[0]) == 0)
+ dump_string_command(machine, ref, params - 1, param + 1);
+ else if (strcmp("dump_process", param[0]) == 0)
+ dump_process_command(machine, ref, params - 1, param + 1);
+ else if (strcmp("dump_list", param[0]) == 0)
+ dump_list_command(machine, ref, params - 1, param + 1);
+ else if (strcmp("curthread", param[0]) == 0)
+ curthread_command(machine, ref, params - 1, param + 1);
+ else if (strcmp("irq", param[0]) == 0)
+ generate_irq_command(machine, ref, params - 1, param + 1);
+ else if (strcmp("nv2a_combiners", param[0]) == 0)
+ nv2a_combiners_command(machine, ref, params - 1, param + 1);
else if (strcmp("grab_texture", param[0]) == 0)
grab_texture_command(machine, ref, params - 1, param + 1);
else if (strcmp("grab_vprog", param[0]) == 0)
@@ -1784,2355 +893,23 @@ static void chihiro_debug_commands(running_machine &machine, int ref, int params
else if (strcmp("vprogdis", param[0]) == 0)
vprogdis_command(machine, ref, params - 1, param + 1);
else
- help_command(machine,ref,params-1,param+1);
-}
-
-/*
- * Graphics
- */
-
-UINT32 nv2a_renderer::dilate0(UINT32 value,int bits) // dilate first "bits" bits in "value"
-{
- UINT32 x,m1,m2,m3;
- int a;
-
- x = value;
- for (a=0;a < bits;a++)
- {
- m2 = 1 << (a << 1);
- m1 = m2 - 1;
- m3 = (~m1) << 1;
- x = (x & m1) + (x & m2) + ((x & m3) << 1);
- }
- return x;
-}
-
-UINT32 nv2a_renderer::dilate1(UINT32 value,int bits) // dilate first "bits" bits in "value"
-{
- UINT32 x,m1,m2,m3;
- int a;
-
- x = value;
- for (a=0;a < bits;a++)
- {
- m2 = 1 << (a << 1);
- m1 = m2 - 1;
- m3 = (~m1) << 1;
- x = (x & m1) + ((x & m2) << 1) + ((x & m3) << 1);
- }
- return x;
-}
-
-void nv2a_renderer::computedilated(void)
-{
- int a,b;
-
- for (b=0;b < 16;b++)
- for (a=0;a < 2048;a++) {
- dilated0[b][a]=dilate0(a,b);
- dilated1[b][a]=dilate1(a,b);
- }
- for (b=0;b < 16;b++)
- for (a=0;a < 16;a++)
- dilatechose[(b << 4) + a]=(a < b ? a : b);
-}
-
-int nv2a_renderer::geforce_commandkind(UINT32 word)
-{
- if ((word & 0x00000003) == 0x00000002)
- return 7; // call
- if ((word & 0x00000003) == 0x00000001)
- return 6; // jump
- if ((word & 0xE0030003) == 0x40000000)
- return 5; // non increasing
- if ((word & 0xE0000003) == 0x20000000)
- return 4; // old jump
- if ((word & 0xFFFF0003) == 0x00030000)
- return 3; // long non icreasing
- if ((word & 0xFFFFFFFF) == 0x00020000)
- return 2; // return
- if ((word & 0xFFFF0003) == 0x00010000)
- return 1; // sli conditional
- if ((word & 0xE0030003) == 0x00000000)
- return 0; // increasing
- return -1;
-}
-
-UINT32 nv2a_renderer::geforce_object_offset(UINT32 handle)
-{
- UINT32 h=((((handle >> 11) ^ handle) >> 11) ^ handle) & 0x7ff;
- UINT32 o=(pfifo[0x210/4] & 0x1f) << 8; // or 12 ?
- UINT32 e=o+h*8; // at 0xfd000000+0x00700000
- UINT32 w;
-
- if (ramin[e/4] != handle)
- e=0;
- w=ramin[e/4+1];
- return (w & 0xffff)*0x10;
-}
-
-void nv2a_renderer::geforce_read_dma_object(UINT32 handle,UINT32 &offset,UINT32 &size)
-{
- //UINT32 objclass,pt_present,pt_linear,access,target,rorw;
- UINT32 dma_adjust,dma_frame;
- UINT32 o=geforce_object_offset(handle);
-
- o=o/4;
- //objclass=ramin[o] & 0xfff;
- //pt_present=(ramin[o] >> 12) & 1;
- //pt_linear=(ramin[o] >> 13) & 1;
- //access=(ramin[o] >> 14) & 3;
- //target=(ramin[o] >> 16) & 3;
- dma_adjust=(ramin[o] >> 20) & 0xfff;
- size=ramin[o+1];
- //rorw=ramin[o+2] & 1;
- dma_frame=ramin[o+2] & 0xfffff000;
- offset=dma_frame+dma_adjust;
-}
-
-/*void myline(bitmap_rgb32 &bmp,float x1,float y1,float x2,float y2)
-{
- int xx1,yy1,xx2,yy2;
-
- xx1=x1;
- xx2=x2;
- yy1=y1;
- yy2=y2;
- if (xx1 == xx2) {
- if (yy1 > yy2) {
- int t=yy1;
- yy1=yy2;
- yy2=t;
- }
- for (int y=yy1;y <= yy2;y++)
- *((UINT32 *)bmp.raw_pixptr(y,xx1))= -1;
- } else if (yy1 == yy2) {
- if (xx1 > xx2) {
- int t=xx1;
- xx1=xx2;
- xx2=t;
- }
- for (int x=xx1;x <= xx2;x++)
- *((UINT32 *)bmp.raw_pixptr(yy1,x))= -1;
- }
-}*/
-
-inline UINT32 convert_a4r4g4b4_a8r8g8b8(UINT32 a4r4g4b4)
-{
- UINT32 a8r8g8b8;
- int ca,cr,cg,cb;
-
- cb=pal4bit(a4r4g4b4 & 0x000f);
- cg=pal4bit((a4r4g4b4 & 0x00f0) >> 4);
- cr=pal4bit((a4r4g4b4 & 0x0f00) >> 8);
- ca=pal4bit((a4r4g4b4 & 0xf000) >> 12);
- a8r8g8b8=(ca<<24)|(cr<<16)|(cg<<8)|(cb); // color converted to 8 bits per component
- return a8r8g8b8;
-}
-
-inline UINT32 convert_a1r5g5b5_a8r8g8b8(UINT32 a1r5g5b5)
-{
- UINT32 a8r8g8b8;
- int ca,cr,cg,cb;
-
- cb=pal5bit(a1r5g5b5 & 0x001f);
- cg=pal5bit((a1r5g5b5 & 0x03e0) >> 5);
- cr=pal5bit((a1r5g5b5 & 0x7c00) >> 10);
- ca=a1r5g5b5 & 0x8000 ? 0xff : 0;
- a8r8g8b8=(ca<<24)|(cr<<16)|(cg<<8)|(cb); // color converted to 8 bits per component
- return a8r8g8b8;
-}
-
-inline UINT32 convert_r5g6b5_r8g8b8(UINT32 r5g6b5)
-{
- UINT32 r8g8b8;
- int cr,cg,cb;
-
- cb=pal5bit(r5g6b5 & 0x001f);
- cg=pal6bit((r5g6b5 & 0x07e0) >> 5);
- cr=pal5bit((r5g6b5 & 0xf800) >> 11);
- r8g8b8=(cr<<16)|(cg<<8)|(cb); // color converted to 8 bits per component
- return r8g8b8;
-}
-
-UINT32 nv2a_renderer::texture_get_texel(int number,int x,int y)
-{
- UINT32 to, s, c, sa, ca;
- UINT32 a4r4g4b4, a1r5g5b5, r5g6b5;
- int bx, by;
- int color0, color1, color0m2, color1m2, alpha0, alpha1;
- UINT32 codes;
- UINT64 alphas;
- int cr, cg, cb;
-
- // force to [0,size-1]
- x = (unsigned int)x & (texture[number].sizeu - 1);
- y = (unsigned int)y & (texture[number].sizev - 1);
- switch (texture[number].format) {
- case A8R8G8B8:
- to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
- return *(((UINT32 *)texture[number].buffer) + to); // get texel color
- case DXT1:
- bx = x >> 2;
- by = y >> 2;
- x = x & 3;
- y = y & 3;
- to = bx + by*(texture[number].sizeu >> 2);
- color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 0);
- color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 1);
- codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 1);
- s = (y << 3) + (x << 1);
- c = (codes >> s) & 3;
- c = c + (color0 > color1 ? 0 : 4);
- color0m2 = color0 << 1;
- color1m2 = color1 << 1;
- switch (c) {
- case 0:
- return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
- case 1:
- return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
- case 2:
- cb = pal5bit(((color0m2 & 0x003e) + (color1 & 0x001f)) / 3);
- cg = pal6bit(((color0m2 & 0x0fc0) + (color1 & 0x07e0)) / 3 >> 5);
- cr = pal5bit(((color0m2 & 0x1f000) + color1) / 3 >> 11);
- return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
- case 3:
- cb = pal5bit(((color1m2 & 0x003e) + (color0 & 0x001f)) / 3);
- cg = pal6bit(((color1m2 & 0x0fc0) + (color0 & 0x07e0)) / 3 >> 5);
- cr = pal5bit(((color1m2 & 0x1f000) + color0) / 3 >> 11);
- return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
- case 4:
- return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
- case 5:
- return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
- case 6:
- cb = pal5bit(((color0 & 0x001f) + (color1 & 0x001f)) / 2);
- cg = pal6bit(((color0 & 0x07e0) + (color1 & 0x07e0)) / 2 >> 5);
- cr = pal5bit(((color0 & 0xf800) + (color1 & 0xf800)) / 2 >> 11);
- return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
- default:
- return 0xff000000;
- }
- case DXT3:
- bx = x >> 2;
- by = y >> 2;
- x = x & 3;
- y = y & 3;
- to = (bx + by*(texture[number].sizeu >> 2)) << 1;
- color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
- color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
- codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
- alphas = *(((UINT64 *)texture[number].buffer) + to);
- s = (y << 3) + (x << 1);
- sa = ((y << 2) + x) << 2;
- c = (codes >> s) & 3;
- ca = (alphas >> sa) & 15;
- switch (c) {
- case 0:
- return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color0);
- case 1:
- return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color1);
- case 2:
- cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
- cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
- cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
- return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
- default:
- cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
- cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
- cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
- return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
- }
- case A4R4G4B4:
- to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
- a4r4g4b4 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
- return convert_a4r4g4b4_a8r8g8b8(a4r4g4b4);
- case A1R5G5B5:
- to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
- a1r5g5b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
- return convert_a1r5g5b5_a8r8g8b8(a1r5g5b5);
- case R5G6B5:
- to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
- r5g6b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
- return 0xff000000 + convert_r5g6b5_r8g8b8(r5g6b5);
- case R8G8B8_RECT:
- to = texture[number].rectangle_pitch*y + (x << 2);
- return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
- case A8R8G8B8_RECT:
- to = texture[number].rectangle_pitch*y + (x << 2);
- return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
- case DXT5:
- bx = x >> 2;
- by = y >> 2;
- x = x & 3;
- y = y & 3;
- to = (bx + by*(texture[number].sizeu >> 2)) << 1;
- color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
- color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
- codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
- alpha0 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 0);
- alpha1 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 1);
- alphas = *(((UINT64 *)texture[number].buffer) + to);
- s = (y << 3) + (x << 1);
- sa = ((y << 2) + x) * 3;
- c = (codes >> s) & 3;
- ca = (alphas >> sa) & 7;
- ca = ca + (alpha0 > alpha1 ? 0 : 8);
- switch (ca) {
- case 0:
- ca = alpha0;
- break;
- case 1:
- ca = alpha1;
- break;
- case 2:
- ca = (6 * alpha0 + 1 * alpha1) / 7;
- break;
- case 3:
- ca = (5 * alpha0 + 2 * alpha1) / 7;
- break;
- case 4:
- ca = (4 * alpha0 + 3 * alpha1) / 7;
- break;
- case 5:
- ca = (3 * alpha0 + 4 * alpha1) / 7;
- break;
- case 6:
- ca = (2 * alpha0 + 5 * alpha1) / 7;
- break;
- case 7:
- ca = (1 * alpha0 + 6 * alpha1) / 7;
- break;
- case 8:
- ca = alpha0;
- break;
- case 9:
- ca = alpha1;
- break;
- case 10:
- ca = (4 * alpha0 + 1 * alpha1) / 5;
- break;
- case 11:
- ca = (3 * alpha0 + 2 * alpha1) / 5;
- break;
- case 12:
- ca = (2 * alpha0 + 3 * alpha1) / 5;
- break;
- case 13:
- ca = (1 * alpha0 + 4 * alpha1) / 5;
- break;
- case 14:
- ca = 0;
- break;
- case 15:
- ca = 255;
- break;
- }
- switch (c) {
- case 0:
- return (ca << 24) + convert_r5g6b5_r8g8b8(color0);
- case 1:
- return (ca << 24) + convert_r5g6b5_r8g8b8(color1);
- case 2:
- cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
- cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
- cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
- return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
- default:
- cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
- cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
- cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
- return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
- }
- default:
- return 0xff00ff00;
- }
-}
-
-void nv2a_renderer::write_pixel(int x, int y, UINT32 color)
-{
- void *addr;
- UINT32 fbcolor;
- UINT32 c[4], fb[4], s[4], d[4], cc[4];
-
- addr = this->fb.raw_pixptr(y, x);
- fbcolor = *((UINT32 *)addr);
- c[3] = color >> 24;
- c[2] = (color >> 16) & 255;
- c[1] = (color >> 8) & 255;
- c[0] = color & 255;
- fb[3] = fbcolor >> 24;
- fb[2] = (fbcolor >> 16) & 255;
- fb[1] = (fbcolor >> 8) & 255;
- fb[0] = fbcolor & 255;
- cc[3] = blend_color >> 24;
- cc[2] = (blend_color >> 16) & 255;
- cc[1] = (blend_color >> 8) & 255;
- cc[0] = blend_color & 255;
- // ownership test and scissor test not done
- // alpha test
- if (alpha_test_enabled) {
- switch (alpha_func) {
- case nv2a_renderer::NEVER:
- return;
- case nv2a_renderer::ALWAYS:
- default:
- break;
- case nv2a_renderer::LESS:
- if (c[3] >= alpha_reference)
- return;
- break;
- case nv2a_renderer::LEQUAL:
- if (c[3] > alpha_reference)
- return;
- break;
- case nv2a_renderer::EQUAL:
- if (c[3] != alpha_reference)
- return;
- break;
- case nv2a_renderer::GEQUAL:
- if (c[3] < alpha_reference)
- return;
- break;
- case nv2a_renderer::GREATER:
- if (c[3] <= alpha_reference)
- return;
- break;
- case nv2a_renderer::NOTEQUAL:
- if (c[3] == alpha_reference)
- return;
- break;
- }
- }
- // stencil test not done
- // depth buffer test not done
- // blending
- if (blending_enabled) {
- switch (blend_function_source) {
- case nv2a_renderer::ZERO:
- s[3] = s[2] = s[1] = s[0] = 0;
- break;
- case nv2a_renderer::ONE:
- default:
- s[3] = s[2] = s[1] = s[0] = 255;
- break;
- case nv2a_renderer::DST_COLOR:
- s[3] = fb[3];
- s[2] = fb[2];
- s[1] = fb[1];
- s[0] = fb[0];
- break;
- case nv2a_renderer::ONE_MINUS_DST_COLOR:
- s[3] = fb[3] ^ 255;
- s[2] = fb[2] ^ 255;
- s[1] = fb[1] ^ 255;
- s[0] = fb[0] ^ 255;
- break;
- case nv2a_renderer::SRC_ALPHA:
- s[3] = s[2] = s[1] = s[0] = c[3];
- break;
- case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
- s[3] = s[2] = s[1] = s[0] = c[3] ^ 255;
- break;
- case nv2a_renderer::DST_ALPHA:
- s[3] = s[2] = s[1] = s[0] = fb[3];
- break;
- case nv2a_renderer::ONE_MINUS_DST_ALPHA:
- s[3] = s[2] = s[1] = s[0] = fb[3] ^ 255;
- break;
- case nv2a_renderer::CONSTANT_COLOR:
- s[3] = cc[3];
- s[2] = cc[2];
- s[1] = cc[1];
- s[0] = cc[0];
- break;
- case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
- s[3] = cc[3] ^ 255;
- s[2] = cc[2] ^ 255;
- s[1] = cc[1] ^ 255;
- s[0] = cc[0] ^ 255;
- break;
- case nv2a_renderer::CONSTANT_ALPHA:
- s[3] = s[2] = s[1] = s[0] = cc[3];
- break;
- case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
- s[3] = s[2] = s[1] = s[0] = cc[3] ^ 255;
- break;
- case nv2a_renderer::SRC_ALPHA_SATURATE:
- s[3] = 255;
- if (c[3] < (fb[3] ^ 255))
- s[2] = c[3];
- else
- s[2] = fb[3];
- s[1] = s[0] = s[2];
- break;
- }
- switch (blend_function_destination) {
- case nv2a_renderer::ZERO:
- default:
- d[3] = d[2] = d[1] = d[0] = 0;
- break;
- case nv2a_renderer::ONE:
- d[3] = d[2] = d[1] = d[0] = 255;
- break;
- case nv2a_renderer::SRC_COLOR:
- d[3] = c[3];
- d[2] = c[2];
- d[1] = c[1];
- d[0] = c[0];
- break;
- case nv2a_renderer::ONE_MINUS_SRC_COLOR:
- d[3] = c[3] ^ 255;
- d[2] = c[2] ^ 255;
- d[1] = c[1] ^ 255;
- d[0] = c[0] ^ 255;
- break;
- case nv2a_renderer::SRC_ALPHA:
- d[3] = d[2] = d[1] = d[0] = c[3];
- break;
- case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
- d[3] = d[2] = d[1] = d[0] = c[3] ^ 255;
- break;
- case nv2a_renderer::DST_ALPHA:
- d[3] = d[2] = d[1] = d[0] = fb[3];
- break;
- case nv2a_renderer::ONE_MINUS_DST_ALPHA:
- d[3] = d[2] = d[1] = d[0] = fb[3] ^ 255;
- break;
- case nv2a_renderer::CONSTANT_COLOR:
- d[3] = cc[3];
- d[2] = cc[2];
- d[1] = cc[1];
- d[0] = cc[0];
- break;
- case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
- d[3] = cc[3] ^ 255;
- d[2] = cc[2] ^ 255;
- d[1] = cc[1] ^ 255;
- d[0] = cc[0] ^ 255;
- break;
- case nv2a_renderer::CONSTANT_ALPHA:
- d[3] = d[2] = d[1] = d[0] = cc[3];
- break;
- case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
- d[3] = d[2] = d[1] = d[0] = cc[3] ^ 255;
- break;
- }
- switch (blend_equation) {
- case nv2a_renderer::FUNC_ADD:
- c[3] = (c[3]*s[3] + fb[3]*d[3]) / 255;
- if (c[3] > 255)
- c[3] = 255;
- c[2] = (c[2]*s[2] + fb[2]*d[2]) / 255;
- if (c[2] > 255)
- c[2] = 255;
- c[1] = (c[1]*s[1] + fb[1]*d[1]) / 255;
- if (c[1] > 255)
- c[1] = 255;
- c[0] = (c[0]*s[0] + fb[0]*d[0]) / 255;
- if (c[0] > 255)
- c[0] = 255;
- break;
- case nv2a_renderer::FUNC_SUBTRACT:
- c[3] = (c[3]*s[3] - fb[3]*d[3]) / 255;
- if (c[3] < 0)
- c[3] = 255;
- c[2] = (c[2]*s[2] - fb[2]*d[2]) / 255;
- if (c[2] < 0)
- c[2] = 255;
- c[1] = (c[1]*s[1] - fb[1]*d[1]) / 255;
- if (c[1] < 0)
- c[1] = 255;
- c[0] = (c[0]*s[0] - fb[0]*d[0]) / 255;
- if (c[0] < 0)
- c[0] = 255;
- break;
- case nv2a_renderer::FUNC_REVERSE_SUBTRACT:
- c[3] = (fb[3] * d[3] - c[3] * s[3]) / 255;
- if (c[3] < 0)
- c[3] = 255;
- c[2] = (fb[2] * d[2] - c[2] * s[2]) / 255;
- if (c[2] < 0)
- c[2] = 255;
- c[1] = (fb[1] * d[1] - c[1] * s[1]) / 255;
- if (c[1] < 0)
- c[1] = 255;
- c[0] = (fb[0] * d[0] - c[0] * s[0]) / 255;
- if (c[0] < 0)
- c[0] = 255;
- break;
- case nv2a_renderer::MIN:
- c[3] = s[3];
- if (d[3] < c[3])
- c[3] = d[3];
- c[2] = s[2];
- if (d[2] < c[2])
- c[2] = d[2];
- c[1] = s[1];
- if (d[1] < c[1])
- c[1] = d[1];
- c[0] = s[0];
- if (d[0] < c[0])
- c[0] = d[0];
- break;
- case nv2a_renderer::MAX:
- c[3] = s[3];
- if (d[3] > c[3])
- c[3] = d[3];
- c[2] = s[2];
- if (d[2] > c[2])
- c[2] = d[2];
- c[1] = s[1];
- if (d[1] > c[1])
- c[1] = d[1];
- c[0] = s[0];
- if (d[0] > c[0])
- c[0] = d[0];
- break;
- }
- }
- // dithering not done
- // logical operation
- if (logical_operation_enabled) {
- switch (logical_operation) {
- case nv2a_renderer::CLEAR:
- c[3] = 0;
- c[2] = 0;
- c[1] = 0;
- c[0] = 0;
- break;
- case nv2a_renderer::AND:
- c[3] = c[3] & fb[3];
- c[2] = c[2] & fb[2];
- c[1] = c[1] & fb[1];
- c[0] = c[0] & fb[0];
- break;
- case nv2a_renderer::AND_REVERSE:
- c[3] = c[3] & (fb[3] ^ 255);
- c[2] = c[2] & (fb[2] ^ 255);
- c[1] = c[1] & (fb[1] ^ 255);
- c[0] = c[0] & (fb[0] ^ 255);
- break;
- case nv2a_renderer::COPY:
- default:
- break;
- case nv2a_renderer::AND_INVERTED:
- c[3] = (c[3] ^ 255) & fb[3];
- c[2] = (c[2] ^ 255) & fb[2];
- c[1] = (c[1] ^ 255) & fb[1];
- c[0] = (c[0] ^ 255) & fb[0];
- break;
- case nv2a_renderer::NOOP:
- c[3] = fb[3];
- c[2] = fb[2];
- c[1] = fb[1];
- c[0] = fb[0];
- break;
- case nv2a_renderer::XOR:
- c[3] = c[3] ^ fb[3];
- c[2] = c[2] ^ fb[2];
- c[1] = c[1] ^ fb[1];
- c[0] = c[0] ^ fb[0];
- break;
- case nv2a_renderer::OR:
- c[3] = c[3] | fb[3];
- c[2] = c[2] | fb[2];
- c[1] = c[1] | fb[1];
- c[0] = c[0] | fb[0];
- break;
- case nv2a_renderer::NOR:
- c[3] = (c[3] | fb[3]) ^ 255;
- c[2] = (c[2] | fb[2]) ^ 255;
- c[1] = (c[1] | fb[1]) ^ 255;
- c[0] = (c[0] | fb[0]) ^ 255;
- break;
- case nv2a_renderer::EQUIV:
- c[3] = (c[3] ^ fb[3]) ^ 255;
- c[2] = (c[2] ^ fb[2]) ^ 255;
- c[1] = (c[1] ^ fb[1]) ^ 255;
- c[0] = (c[0] ^ fb[0]) ^ 255;
- break;
- case nv2a_renderer::INVERT:
- c[3] = fb[3] ^ 255;
- c[2] = fb[2] ^ 255;
- c[1] = fb[1] ^ 255;
- c[0] = fb[0] ^ 255;
- break;
- case nv2a_renderer::OR_REVERSE:
- c[3] = c[3] | (fb[3] ^ 255);
- c[2] = c[2] | (fb[2] ^ 255);
- c[1] = c[1] | (fb[1] ^ 255);
- c[0] = c[0] | (fb[0] ^ 255);
- break;
- case nv2a_renderer::COPY_INVERTED:
- c[3] = c[3] ^ 255;
- c[2] = c[2] ^ 255;
- c[1] = c[1] ^ 255;
- c[0] = c[0] ^ 255;
- break;
- case nv2a_renderer::OR_INVERTED:
- c[3] = (c[3] ^ 255) | fb[3];
- c[2] = (c[2] ^ 255) | fb[2];
- c[1] = (c[1] ^ 255) | fb[1];
- c[0] = (c[0] ^ 255) | fb[0];
- break;
- case nv2a_renderer::NAND:
- c[3] = (c[3] & fb[3]) ^ 255;
- c[2] = (c[2] & fb[2]) ^ 255;
- c[1] = (c[1] & fb[1]) ^ 255;
- c[0] = (c[0] & fb[0]) ^ 255;
- break;
- case nv2a_renderer::SET:
- c[3] = 255;
- c[2] = 255;
- c[1] = 255;
- c[0] = 255;
- break;
- }
- }
- fbcolor = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0];
- *((UINT32 *)addr) = fbcolor;
-}
-
-void nv2a_renderer::render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
-{
- int x;
-
- x=extent.stopx-extent.startx-1; // number of pixels to draw
- while (x >= 0) {
- UINT32 a8r8g8b8;
- int ca,cr,cg,cb;
- int xp=extent.startx+x; // x coordinate of current pixel
-
- cb=(extent.param[0].start+(float)x*extent.param[0].dpdx);
- cg=(extent.param[1].start+(float)x*extent.param[1].dpdx);
- cr=(extent.param[2].start+(float)x*extent.param[2].dpdx);
- ca=(extent.param[3].start+(float)x*extent.param[3].dpdx);
- a8r8g8b8=(ca << 24)+(cr << 16)+(cg << 8)+cb; // pixel color obtained by interpolating the colors of the vertices
- write_pixel(xp, scanline, a8r8g8b8);
- x--;
- }
-}
-
-void nv2a_renderer::render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
-{
- int x;
- UINT32 a8r8g8b8;
-
- if (!objectdata.data->texture[0].enabled) {
- return;
- }
- x=extent.stopx-extent.startx-1;
- while (x >= 0) {
- int up,vp;
- int xp=extent.startx+x; // x coordinate of current pixel
-
- up=(extent.param[4].start+(float)x*extent.param[4].dpdx)*(float)(objectdata.data->texture[0].sizeu-1); // x coordinate of texel in texture
- vp=extent.param[5].start*(float)(objectdata.data->texture[0].sizev-1); // y coordinate of texel in texture
- a8r8g8b8=texture_get_texel(0, up, vp);
- write_pixel(xp, scanline, a8r8g8b8);
- x--;
- }
-}
-
-void nv2a_renderer::render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
-{
- int x,xp;
- int up,vp;
- int ca,cr,cg,cb;
- UINT32 color[6];
- UINT32 a8r8g8b8;
- int n;//,m,i,j,k;
-
- color[0] = color[1] = color[2] = color[3] = color[4] = color[5] = 0;
-
- osd_lock_acquire(combiner.lock); // needed since multithreading is not supported yet
- x=extent.stopx-extent.startx-1; // number of pixels to draw
- while (x >= 0) {
- xp=extent.startx+x;
- // 1: fetch data
- // 1.1: interpolated color from vertices
- cb=(extent.param[0].start+(float)x*extent.param[0].dpdx);
- cg=(extent.param[1].start+(float)x*extent.param[1].dpdx);
- cr=(extent.param[2].start+(float)x*extent.param[2].dpdx);
- ca=(extent.param[3].start+(float)x*extent.param[3].dpdx);
- color[0]=(ca << 24)+(cr << 16)+(cg << 8)+cb; // pixel color obtained by interpolating the colors of the vertices
- color[1]=0; // lighting not yet
- // 1.2: color for each of the 4 possible textures
- for (n=0;n < 4;n++) {
- if (texture[n].enabled) {
- up=(extent.param[4+n*2].start+(float)x*extent.param[4+n*2].dpdx)*(float)(objectdata.data->texture[n].sizeu-1);
- vp=extent.param[5+n*2].start*(float)(objectdata.data->texture[n].sizev-1);
- color[n+2]=texture_get_texel(n, up, vp);
- }
- }
- // 2: compute
- // 2.1: initialize
- combiner_initialize_registers(color);
- // 2.2: general cmbiner stages
- for (n=0;n < combiner.stages;n++) {
- // 2.2.1 initialize
- combiner_initialize_stage(n);
- // 2.2.2 map inputs
- combiner_map_input(n);
- // 2.2.3 compute possible outputs
- combiner_compute_rgb_outputs(n);
- combiner_compute_a_outputs(n);
- // 2.2.4 map outputs to registers
- combiner_map_output(n);
- }
- // 2.3: final cmbiner stage
- combiner_initialize_final();
- combiner_map_final_input();
- combiner_final_output();
- a8r8g8b8=combiner_float_argb8(combiner.output);
- // 3: write pixel
- write_pixel(xp, scanline, a8r8g8b8);
- x--;
- }
- osd_lock_release(combiner.lock);
+ help_command(machine, ref, params - 1, param + 1);
}
-#if 0
-const char *rc_mapping_str[]={
- "UNSIGNED_IDENTITY",
- "UNSIGNED_INVERT",
- "EXPAND_NORMAL",
- "EXPAND_NEGATE",
- "HALF_BIAS_NORMAL",
- "HALF_BIAS_NEGATE",
- "SIGNED_IDENTITY",
- "SIGNED_NEGATE"
-};
-
-const char *rc_usage_rgb_str[]={
- "RGB",
- "ALPHA"
-};
-
-const char *rc_usage_alpha_str[]={
- "BLUE",
- "ALPHA"
-};
-
-const char *rc_variable_str[]={
- "ZERO",
- "CONSTANT_COLOR0",
- "CONSTANT_COLOR1",
- "FOG",
- "PRIMARY_COLOR",
- "SECONDARY_COLOR",
- "???",
- "???",
- "TEXTURE0",
- "TEXTURE1",
- "TEXTURE2",
- "TEXTURE3",
- "SPARE0",
- "SPARE1",
- "SPARE0_PLUS_SECONDARY_COLOR",
- "E_TIMES_F"
-};
-
-const char *rc_bias_str[]={
- "NONE",
- "BIAS_BY_NEGATIVE_ONE_HALF"
-};
-
-const char *rc_scale_str[]={
- "NONE",
- "SCALE_BY_TWO",
- "SCALE_BY_FOUR",
- "SCALE_BY_ONE_HALF"
-};
-
-/* Dump the current setup of the register combiners */
-void dumpcombiners(UINT32 *m)
-{
- int a,b,n,v;
-
- n=m[0x1e60/4] & 0xf;
- printf("Combiners active: %d\n\r",n);
- for (a=0;a < n;a++) {
- printf("Combiner %d\n\r",a+1);
- printf(" RC_IN_ALPHA %08X\n\r",m[0x0260/4+a]);
- for (b=24;b >= 0;b=b-8) {
- v=(m[0x0260/4+a] >> b) & 0xf;
- printf(" %c_INPUT %s\n\r",'A'+3-b/8,rc_variable_str[v]);
- v=(m[0x0260/4+a] >> (b+4)) & 1;
- printf(" %c_COMPONENT_USAGE %s\n\r",'A'+3-b/8,rc_usage_alpha_str[v]);
- v=(m[0x0260/4+a] >> (b+5)) & 7;
- printf(" %c_MAPPING %s\n\r",'A'+3-b/8,rc_mapping_str[v]);
- }
- printf(" RC_IN_RGB %08X\n\r",m[0x0ac0/4+a]);
- for (b=24;b >= 0;b=b-8) {
- v=(m[0x0ac0/4+a] >> b) & 0xf;
- printf(" %c_INPUT %s\n\r",'A'+3-b/8,rc_variable_str[v]);
- v=(m[0x0ac0/4+a] >> (b+4)) & 1;
- printf(" %c_COMPONENT_USAGE %s\n\r",'A'+3-b/8,rc_usage_rgb_str[v]);
- v=(m[0x0ac0/4+a] >> (b+5)) & 7;
- printf(" %c_MAPPING %s\n\r",'A'+3-b/8,rc_mapping_str[v]);
- }
- printf(" RC_OUT_ALPHA %08X\n\r",m[0x0aa0/4+a]);
- v=m[0x0aa0/4+a] & 0xf;
- printf(" CD_OUTPUT %s\n\r",rc_variable_str[v]);
- v=(m[0x0aa0/4+a] >> 4) & 0xf;
- printf(" AB_OUTPUT %s\n\r",rc_variable_str[v]);
- v=(m[0x0aa0/4+a] >> 8) & 0xf;
- printf(" SUM_OUTPUT %s\n\r",rc_variable_str[v]);
- v=(m[0x0aa0/4+a] >> 12) & 1;
- printf(" CD_DOT_PRODUCT %d\n\r",v);
- v=(m[0x0aa0/4+a] >> 13) & 1;
- printf(" AB_DOT_PRODUCT %d\n\r",v);
- v=(m[0x0aa0/4+a] >> 14) & 1;
- printf(" MUX_SUM %d\n\r",v);
- v=(m[0x0aa0/4+a] >> 15) & 1;
- printf(" BIAS %s\n\r",rc_bias_str[v]);
- v=(m[0x0aa0/4+a] >> 16) & 3;
- printf(" SCALE %s\n\r",rc_scale_str[v]);
- //v=(m[0x0aa0/4+a] >> 27) & 7;
- printf(" RC_OUT_RGB %08X\n\r",m[0x1e40/4+a]);
- v=m[0x1e40/4+a] & 0xf;
- printf(" CD_OUTPUT %s\n\r",rc_variable_str[v]);
- v=(m[0x1e40/4+a] >> 4) & 0xf;
- printf(" AB_OUTPUT %s\n\r",rc_variable_str[v]);
- v=(m[0x1e40/4+a] >> 8) & 0xf;
- printf(" SUM_OUTPUT %s\n\r",rc_variable_str[v]);
- v=(m[0x1e40/4+a] >> 12) & 1;
- printf(" CD_DOT_PRODUCT %d\n\r",v);
- v=(m[0x1e40/4+a] >> 13) & 1;
- printf(" AB_DOT_PRODUCT %d\n\r",v);
- v=(m[0x1e40/4+a] >> 14) & 1;
- printf(" MUX_SUM %d\n\r",v);
- v=(m[0x1e40/4+a] >> 15) & 1;
- printf(" BIAS %s\n\r",rc_bias_str[v]);
- v=(m[0x1e40/4+a] >> 16) & 3;
- printf(" SCALE %s\n\r",rc_scale_str[v]);
- //v=(m[0x1e40/4+a] >> 27) & 7;
- printf("\n\r");
- }
- printf("Combiner final %08X %08X\n\r",m[0x0288/4],m[0x028c/4]);
- for (a=24;a >= 0;a=a-8) {
- n=(m[0x0288/4] >> a) & 0xf;
- printf(" %c_INPUT %s\n\r",'A'+3-a/8,rc_variable_str[n]);
- n=(m[0x0288/4] >> (a+4)) & 1;
- printf(" %c_COMPONENT_USAGE %s\n\r",'A'+3-a/8,rc_usage_rgb_str[n]);
- n=(m[0x0288/4] >> (a+5)) & 7;
- printf(" %c_MAPPING %s\n\r",'A'+3-a/8,rc_mapping_str[n]);
- }
- for (a=24;a >= 8;a=a-8) {
- n=(m[0x028c/4] >> a) & 0xf;
- printf(" %c_INPUT %s\n\r",'E'+3-a/8,rc_variable_str[n]);
- n=(m[0x028c/4] >> (a+4)) & 1;
- printf(" %c_COMPONENT_USAGE %s\n\r",'E'+3-a/8,rc_usage_rgb_str[n]);
- n=(m[0x028c/4] >> (a+5)) & 7;
- printf(" %c_MAPPING %s\n\r",'E'+3-a/8,rc_mapping_str[n]);
- }
- n=(m[0x028c/4] >> 7) & 1;
- printf(" color sum clamp: %d\n\r",n);
-}
-#endif
-
-/* Read vertices data from system memory. Method 0x1810 */
-int nv2a_renderer::read_vertices_0x1810(address_space & space, vertex *destination, int offset, int limit)
-{
- UINT32 m, u;
-
- for (m = 0; m < limit; m++) {
- destination[m].attribute[0].iv[0] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 0);
- destination[m].attribute[0].iv[1] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 4);
- destination[m].attribute[0].iv[2] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 8);
- destination[m].attribute[0].iv[3] = space.read_dword(vertexbuffer_address[0] + (m + offset)*vertexbuffer_stride[0] + 12);
- destination[m].attribute[3].iv[0] = space.read_dword(vertexbuffer_address[3] + (m + offset)*vertexbuffer_stride[3] + 0); // color
- for (u = 0; u < 4; u++) {
- destination[m].attribute[9 + u].iv[0] = space.read_dword(vertexbuffer_address[9 + u] + (m + offset)*vertexbuffer_stride[9 + u] + 0);
- destination[m].attribute[9 + u].iv[1] = space.read_dword(vertexbuffer_address[9 + u] + (m + offset)*vertexbuffer_stride[9 + u] + 4);
- }
- }
- return m;
-}
-
-/* Read vertices data from system memory. Method 0x1800 */
-int nv2a_renderer::read_vertices_0x1800(address_space & space, vertex *destination, UINT32 address, int limit)
-{
- UINT32 data;
- UINT32 m, u, i, c;
-
- c = 0;
- for (m = 0; m < limit; m++) {
- if (indexesleft_count == 0) {
- data = space.read_dword(address);
- i = (indexesleft_first + indexesleft_count) & 7;
- indexesleft[i] = data & 0xffff;
- indexesleft[(i + 1) & 7] = (data >> 16) & 0xffff;
- indexesleft_count = indexesleft_count + 2;
- address += 4;
- c++;
- }
- destination[m].attribute[0].iv[0] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 0);
- destination[m].attribute[0].iv[1] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 4);
- destination[m].attribute[0].iv[2] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 8);
- destination[m].attribute[0].iv[3] = space.read_dword(vertexbuffer_address[0] + indexesleft[indexesleft_first] * vertexbuffer_stride[0] + 12);
- destination[m].attribute[3].iv[0] = space.read_dword(vertexbuffer_address[3] + indexesleft[indexesleft_first] * vertexbuffer_stride[3] + 0); // color
- for (u = 0; u < 4; u++) {
- destination[m].attribute[9 + u].iv[0] = space.read_dword(vertexbuffer_address[9 + u] + indexesleft[indexesleft_first] * vertexbuffer_stride[9 + u] + 0);
- destination[m].attribute[9 + u].iv[1] = space.read_dword(vertexbuffer_address[9 + u] + indexesleft[indexesleft_first] * vertexbuffer_stride[9 + u] + 4);
- }
- indexesleft_first = (indexesleft_first + 1) & 7;
- indexesleft_count--;
- }
- return (int)c;
-}
-
-/* Read vertices data from system memory. Method 0x1818 */
-int nv2a_renderer::read_vertices_0x1818(address_space & space, vertex *destination, UINT32 address, int limit)
-{
- UINT32 m, u, vwords;
-
- vwords = vertex_attribute_words[15] + vertex_attribute_offset[15];
- for (m = 0; m < limit; m++) {
- destination[m].attribute[0].iv[0] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 0);
- destination[m].attribute[0].iv[1] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 4);
- destination[m].attribute[0].iv[2] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 8);
- destination[m].attribute[0].iv[3] = space.read_dword(address + vertex_attribute_offset[0] * 4 + 12);
- destination[m].attribute[3].iv[0] = space.read_dword(address + vertex_attribute_offset[3] * 4 + 0); // color
- for (u = 0; u < 4; u++) {
- destination[m].attribute[9 + u].iv[0] = space.read_dword(address + vertex_attribute_offset[9 + u] * 4 + 0);
- destination[m].attribute[9 + u].iv[1] = space.read_dword(address + vertex_attribute_offset[9 + u] * 4 + 4);
- }
- address = address + vwords * 4;
- }
- return (int)(m*vwords);
-}
-
-void nv2a_renderer::convert_vertices_poly(vertex *source, vertex_t *destination, int count)
-{
- int m, u;
-
- for (m = 0; m < count; m++) {
- destination[m].x = source[m].attribute[0].fv[0];
- destination[m].y = source[m].attribute[0].fv[1];
- u = source[m].attribute[3].iv[0];
- destination[m].p[0] = u & 0xff; // b
- destination[m].p[1] = (u & 0xff00) >> 8; // g
- destination[m].p[2] = (u & 0xff0000) >> 16; // r
- destination[m].p[3] = (u & 0xff000000) >> 24; // a
- for (u = 0; u < 4; u++) {
- destination[m].p[4 + u * 2] = 0;
- destination[m].p[5 + u * 2] = 0;
- if (texture[u].enabled) {
- destination[m].p[4 + u * 2] = source[m].attribute[9 + u].fv[0];
- destination[m].p[5 + u * 2] = source[m].attribute[9 + u].fv[1];
- }
- }
- }
-}
-
-void nv2a_renderer::geforce_exec_method(address_space & space,UINT32 chanel,UINT32 subchannel,UINT32 method,UINT32 address,int &countlen)
-{
- UINT32 maddress;
- UINT32 data;
-
- maddress=method*4;
- data=space.read_dword(address);
- channel[chanel][subchannel].object.method[method]=data;
- if (maddress == 0x17fc) {
- indexesleft_count = 0;
- indexesleft_first = 0;
- primitives_count = 0;
- countlen--;
- }
- if (maddress == 0x1810) {
- // draw vertices
- int offset,count,type;
- UINT32 n;
- render_delegate renderspans;
-
- offset=data & 0xffffff;
- count=(data >> 24) & 0xff;
- type=channel[chanel][subchannel].object.method[0x17fc/4];
- if (((channel[chanel][subchannel].object.method[0x1e60/4] & 7) > 0) && (combiner.used != 0)) {
- renderspans=render_delegate(FUNC(nv2a_renderer::render_register_combiners),this);
- } else if (texture[0].enabled) {
- renderspans=render_delegate(FUNC(nv2a_renderer::render_texture_simple),this);
- } else
- renderspans=render_delegate(FUNC(nv2a_renderer::render_color),this);
-#ifdef LOG_NV2A
- printf("vertex %d %d %d\n\r",type,offset,count);
-#endif
- if (type == nv2a_renderer::QUADS) {
- for (n = 0; n <= count; n += 4) {
- vertex vert[4];
- vertex_t xy[4];
-
- read_vertices_0x1810(space, vert, n+offset, 4);
- convert_vertices_poly(vert, xy, 4);
- render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
- }
- wait();
- } else if (type == nv2a_renderer::TRIANGLE_STRIP) {
- vertex vert[4];
- vertex_t xy[4];
-
- read_vertices_0x1810(space, vert, offset, 2);
- convert_vertices_poly(vert, xy, 2);
- count = count - 2;
- offset = offset + 2;
- for (n = 0; n <= count; n++) {
- read_vertices_0x1810(space, vert + ((n+2) & 3), offset + n, 1);
- convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
- render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1)+n) & 3], xy[((~n & 1)+n) & 3], xy[(2+n) & 3]);
- }
- wait();
- } else {
- logerror("Unsupported primitive %d for method 0x1810\n",type);
- }
- countlen--;
- }
- if (maddress == 0x1800) {
- UINT32 type, n;
- render_delegate renderspans;
-
- // vertices are selected from the vertex buffer using an array of indexes
- // each dword after 1800 contains two 16 bit index values to select the vartices
- type = channel[chanel][subchannel].object.method[0x17fc / 4];
- if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
- renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
- }
- else if (texture[0].enabled) {
- renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
- }
- else
- renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
-#ifdef LOG_NV2A
- printf("vertex %d %d %d\n\r", type, offset, count);
-#endif
- if (type == nv2a_renderer::QUADS) {
- while (1) {
- vertex vert[4];
- vertex_t xy[4];
- int c;
-
- if ((countlen * 2 + indexesleft_count) < 4)
- break;
- c=read_vertices_0x1800(space, vert, address, 4);
- address = address + c*4;
- countlen = countlen - c;
- convert_vertices_poly(vert, xy, 4);
- render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
- }
- while (countlen > 0) {
- data = space.read_dword(address);
- n = (indexesleft_first + indexesleft_count) & 7;
- indexesleft[n] = data & 0xffff;
- indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
- indexesleft_count = indexesleft_count + 2;
- address += 4;
- countlen--;
- }
- wait();
- }
- else if (type == nv2a_renderer::TRIANGLES) {
- while (1) {
- vertex vert[3];
- vertex_t xy[3];
- int c;
-
- if ((countlen * 2 + indexesleft_count) < 3)
- break;
- c = read_vertices_0x1800(space, vert, address, 3);
- address = address + c * 4;
- countlen = countlen - c;
- convert_vertices_poly(vert, xy, 3);
- render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv
- }
- while (countlen > 0) {
- data = space.read_dword(address);
- n = (indexesleft_first + indexesleft_count) & 7;
- indexesleft[n] = data & 0xffff;
- indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
- indexesleft_count = indexesleft_count + 2;
- address += 4;
- countlen--;
- }
- wait();
- }
- else if (type == nv2a_renderer::TRIANGLE_STRIP) {
- if ((countlen * 2 + indexesleft_count) >= 3) {
- vertex vert[4];
- vertex_t xy[4];
- int c, count;
-
- c = read_vertices_0x1800(space, vert, address, 2);
- convert_vertices_poly(vert, xy, 2);
- address = address + c * 4;
- countlen = countlen - c;
- count = countlen * 2 + indexesleft_count;
- for (n = 0; n < count; n++) { // <=
- c = read_vertices_0x1800(space, vert + ((n + 2) & 3), address, 1);
- address = address + c * 4;
- countlen = countlen - c;
- convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
- render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
- }
- }
- while (countlen > 0) {
- data = space.read_dword(address);
- n = (indexesleft_first + indexesleft_count) & 7;
- indexesleft[n] = data & 0xffff;
- indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
- indexesleft_count = indexesleft_count + 2;
- address += 4;
- countlen--;
- }
- wait();
- }
- else {
- logerror("Unsupported primitive %d for method 0x1800\n", type);
- countlen = 0;
- }
- }
- if (maddress == 0x1818) {
- int n;
- int type;
- render_delegate renderspans;
-
- if (((channel[chanel][subchannel].object.method[0x1e60/4] & 7) > 0) && (combiner.used != 0)) {
- renderspans=render_delegate(FUNC(nv2a_renderer::render_register_combiners),this);
- } else if (texture[0].enabled) {
- renderspans=render_delegate(FUNC(nv2a_renderer::render_texture_simple),this);
- } else
- renderspans=render_delegate(FUNC(nv2a_renderer::render_color),this);
- // vertices are taken from the next words, not from a vertex buffer
- // first send primitive type with 17fc
- // then countlen number of dwords with 1818
- // end with 17fc primitive type 0
- // at 1760 16 words specify the vertex format:for each possible vertex attribute the number of components (0=not present) and type of each
- type=channel[chanel][subchannel].object.method[0x17fc/4];
- if (type == nv2a_renderer::TRIANGLE_FAN) {
- vertex vert[3];
- vertex_t xy[3];
- int c;
-
- c=read_vertices_0x1818(space, vert, address, 2);
- convert_vertices_poly(vert, xy, 2);
- countlen = countlen - c;
- if (countlen < 0) {
- logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
- countlen = 0;
- return;
- }
- address = address + c * 4;
- for (n = 1; countlen > 0; n++) {
- c=read_vertices_0x1818(space, vert + ((n & 1) + 1), address, 1);
- countlen = countlen - c;
- if (countlen < 0) {
- logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
- countlen = 0;
- break;
- }
- address = address + c * 4;
- convert_vertices_poly(vert + ((n & 1) + 1), xy + ((n & 1) + 1), 1);
- render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[(~n & 1) + 1], xy[(n & 1) + 1]);
- }
- wait();
- } else if (type == nv2a_renderer::TRIANGLE_STRIP) {
- vertex vert[4];
- vertex_t xy[4];
- int c;
-
- c=read_vertices_0x1818(space, vert, address, 2);
- convert_vertices_poly(vert, xy, 2);
- countlen = countlen - c;
- if (countlen < 0) {
- logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
- countlen = 0;
- return;
- }
- address = address + c * 4;
- for (n = 0;countlen > 0; n++) {
- c=read_vertices_0x1818(space, vert + ((n + 2) & 3), address, 1);
- convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
- countlen = countlen - c;
- if (countlen < 0) {
- logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
- countlen = 0;
- break;
- }
- address = address + c * 4;
- render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
- }
- wait();
- } else if (type == nv2a_renderer::QUADS) {
- while (countlen > 0) {
- vertex vert[4];
- vertex_t xy[4];
- int c;
-
- c = read_vertices_0x1818(space, vert, address, 4);
- convert_vertices_poly(vert, xy, 4);
- countlen = countlen - c;
- if (countlen < 0) {
- logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
- countlen = 0;
- break;
- }
- address = address + c * 4;
- render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
- }
- wait();
- } else if (type == nv2a_renderer::QUAD_STRIP) {
- vertex vert[4];
- vertex_t xy[4];
- int c;
-
- c=read_vertices_0x1818(space, vert, address, 2);
- convert_vertices_poly(vert, xy, 2);
- countlen = countlen - c;
- if (countlen < 0) {
- logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
- countlen = 0;
- return;
- }
- address = address + c * 4;
- for (n = 0; countlen > 0; n+=2) {
- c = read_vertices_0x1818(space, vert + ((n + 2) & 3), address + ((n + 2) & 3), 2);
- convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 2);
- countlen = countlen - c;
- if (countlen < 0) {
- logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
- countlen = 0;
- return;
- }
- address = address + c * 4;
- render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[n & 3], xy[(n + 1) & 3], xy[(n + 2) & 3]);
- render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[(n + 2) & 3], xy[(n + 1) & 3], xy[(n + 3) & 3]);
- }
- wait();
- } else {
- logerror("Unsupported primitive %d for method 0x1818\n",type);
- countlen = 0;
- }
- }
- if ((maddress >= 0x1720) && (maddress < 0x1760)) {
- int bit = method - 0x1720 / 4;
-
- if (data & 0x80000000)
- vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[1];
- else
- vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[0];
- }
- if ((maddress >= 0x1760) && (maddress < 0x17A0)) {
- int bit=method-0x1760/4;
-
- vertexbuffer_stride[bit] = (data >> 8) & 255;
- //vertexbuffer_kind[n]=tmp & 15;
- //vertexbuffer_size[n]=(tmp >> 4) & 15;
- data = data & 255;
- switch (data & 15) {
- case 0:
- vertex_attribute_words[bit]=(((data >> 4) + 3) & 15) >> 2;
- break;
- case nv2a_renderer::FLOAT:
- vertex_attribute_words[bit]=(data >> 4);
- break;
- case nv2a_renderer::UBYTE:
- vertex_attribute_words[bit]=(((data >> 4) + 3) & 15) >> 2;
- break;
- case nv2a_renderer::USHORT:
- vertex_attribute_words[bit]=(((data >> 4) + 1) & 15) >> 1;
- break;
- default:
- vertex_attribute_words[bit]=0;
- }
- if (data > 15)
- enabled_vertex_attributes |= (1 << bit);
- else
- enabled_vertex_attributes &= ~(1 << bit);
- for (int n = bit+1; n < 16; n++) {
- if ((enabled_vertex_attributes & (1 << (n - 1))) != 0)
- vertex_attribute_offset[n] = vertex_attribute_offset[n - 1] + vertex_attribute_words[n - 1];
- else
- vertex_attribute_offset[n] = vertex_attribute_offset[n - 1];
- }
- countlen--;
- }
- if ((maddress == 0x1d6c) || (maddress == 0x1d70) || (maddress == 0x1a4))
- countlen--;
- if (maddress == 0x019c) {
- geforce_read_dma_object(data, dma_offset[0], dma_size[0]);
- }
- if (maddress == 0x01a0) {
- geforce_read_dma_object(data, dma_offset[1], dma_size[1]);
- }
- if (maddress == 0x1d70) {
- // with 1d70 write the value at offest [1d6c] inside dma object [1a4]
- UINT32 offset,base;
- UINT32 dmahand,dmaoff,smasiz;
-
- offset=channel[chanel][subchannel].object.method[0x1d6c/4];
- dmahand=channel[chanel][subchannel].object.method[0x1a4/4];
- geforce_read_dma_object(dmahand,dmaoff,smasiz);
- base=dmaoff;
- space.write_dword(base+offset,data);
- countlen--;
- }
- if (maddress == 0x1d94) {
- // possible buffers: color, depth, stencil, and accumulation
- // clear framebuffer
- if (data & 0xf0) {
- // clear colors
- UINT32 color=channel[chanel][subchannel].object.method[0x1d90/4];
- fb.fill(color);
- //printf("clearscreen\n\r");
- }
- if (data & 0x03) {
- // clear stencil+zbuffer
- }
- countlen--;
- }
- if (maddress == 0x0300) {
- alpha_test_enabled = data != 0;
- }
- if (maddress == 0x033c) {
- alpha_func = data;
- }
- if (maddress == 0x0340) {
- alpha_reference = data;
- }
- if (maddress == 0x0304) {
- if (logical_operation_enabled)
- blending_enabled = false;
- else
- blending_enabled = data != 0;
- }
- if (maddress == 0x0344) {
- blend_function_source = data;
- }
- if (maddress == 0x0348) {
- blend_function_destination = data;
- }
- if (maddress == 0x034c) {
- blend_color = data;
- }
- if (maddress == 0x0350) {
- blend_equation = data;
- }
- if (maddress == 0x0d40) {
- if (data != 0)
- blending_enabled = false;
- else
- blending_enabled = channel[chanel][subchannel].object.method[0x0304 / 4] != 0;
- logical_operation_enabled = data != 0;
- }
- if (maddress == 0x0d44) {
- logical_operation = data;
- }
- // Texture Units
- if ((maddress >= 0x1b00) && (maddress < 0x1c00)) {
- int unit;//,off;
-
- unit=(maddress >> 6) & 3;
- //off=maddress & 0xc0;
- maddress=maddress & ~0xc0;
- if (maddress == 0x1b00) {
- UINT32 offset;//,base;
- //UINT32 dmahand,dmaoff,dmasiz;
-
- offset=data;
- texture[unit].buffer=space.get_read_ptr(offset);
- /*if (dma0 != 0) {
- dmahand=channel[channel][subchannel].object.method[0x184/4];
- geforce_read_dma_object(dmahand,dmaoff,smasiz);
- } else if (dma1 != 0) {
- dmahand=channel[channel][subchannel].object.method[0x188/4];
- geforce_read_dma_object(dmahand,dmaoff,smasiz);
- }*/
- }
- if (maddress == 0x1b04) {
- //int dma0,dma1,cubic,noborder,dims,mipmap;
- int basesizeu,basesizev,basesizew,format;
-
- //dma0=(data >> 0) & 1;
- //dma1=(data >> 1) & 1;
- //cubic=(data >> 2) & 1;
- //noborder=(data >> 3) & 1;
- //dims=(data >> 4) & 15;
- //mipmap=(data >> 19) & 1;
- format=(data >> 8) & 255;
- basesizeu=(data >> 20) & 15;
- basesizev=(data >> 24) & 15;
- basesizew=(data >> 28) & 15;
- texture[unit].sizeu=1 << basesizeu;
- texture[unit].sizev=1 << basesizev;
- texture[unit].sizew=1 << basesizew;
- texture[unit].dilate=dilatechose[(basesizeu << 4)+basesizev];
- texture[unit].format=format;
- if (debug_grab_texttype == format) {
- FILE *f;
- int written;
-
- debug_grab_texttype = -1;
- f = fopen(debug_grab_textfile, "wb");
- if (f) {
- written=(int)fwrite(texture[unit].buffer, texture[unit].sizeu*texture[unit].sizev*4, 1, f);
- fclose(f);
- logerror("Written %d bytes of texture to specified file\n", written);
- } else
- logerror("Unable to save texture to specified file\n");
- }
- }
- if (maddress == 0x1b0c) {
- // enable texture
- int enable;
-
- enable=(data >> 30) & 1;
- texture[unit].enabled=enable;
- }
- if (maddress == 0x1b10) {
- texture[unit].rectangle_pitch=data >> 16;
- }
- countlen--;
- }
- // modelview matrix
- if ((maddress >= 0x0480) && (maddress < 0x04c0)) {
- maddress = (maddress - 0x0480) / 4;
- *(UINT32 *)(&matrix.modelview[maddress]) = data;
- countlen--;
- }
- // inverse modelview matrix
- if ((maddress >= 0x0580) && (maddress < 0x05c0)) {
- maddress = (maddress - 0x0580) / 4;
- *(UINT32 *)(&matrix.modelview_inverse[maddress]) = data;
- countlen--;
- }
- // projection matrix
- if ((maddress >= 0x0680) && (maddress < 0x06c0)) {
- maddress = (maddress - 0x0680) / 4;
- *(UINT32 *)(&matrix.projection[maddress]) = data;
- countlen--;
- }
- // viewport translate
- if ((maddress >= 0x0a20) && (maddress < 0x0a30)) {
- maddress = (maddress - 0x0a20) / 4;
- *(UINT32 *)(&matrix.translate[maddress]) = data;
- countlen--;
- }
- // viewport scale
- if ((maddress >= 0x0af0) && (maddress < 0x0b00)) {
- maddress = (maddress - 0x0af0) / 4;
- *(UINT32 *)(&matrix.scale[maddress]) = data;
- countlen--;
- }
- // Vertex program (shader)
- if (maddress == 0x1e94) {
- /*if (data == 2)
- logerror("Enabled vertex program\n");
- else if (data == 4)
- logerror("Enabled fixed function pipeline\n");
- else if (data == 6)
- logerror("Enabled both fixed function pipeline and vertex program ?\n");
- else
- logerror("Unknown value %d to method 0x1e94\n",data);*/
- vertex_pipeline = data & 6;
- countlen--;
- }
- if (maddress == 0x1e9c) {
- //logerror("VP_UPLOAD_FROM_ID %d\n",data);
- vertexprogram.upload_instruction=data*4;
- countlen--;
- }
- if (maddress == 0x1ea0) {
- //logerror("VP_START_FROM_ID %d\n",data);
- vertexprogram.instructions=vertexprogram.upload_instruction/4;
- vertexprogram.start_instruction = data * 4;
- countlen--;
- }
- if (maddress == 0x1ea4) {
- //logerror("VP_UPLOAD_CONST_ID %d\n",data);
- vertexprogram.upload_parameter=data*4;
- countlen--;
- }
- if ((maddress >= 0x0b00) && (maddress < 0x0b80)) {
- //logerror("VP_UPLOAD_INST\n");
- if (vertexprogram.upload_instruction < 1024)
- vertexprogram.instruction[vertexprogram.upload_instruction]=data;
- else
- logerror("Need to increase size of vertexprogram.instruction to %d\n\r", vertexprogram.upload_parameter);
- vertexprogram.upload_instruction++;
- }
- if ((maddress >= 0x0b80) && (maddress < 0x0c00)) {
- //logerror("VP_UPLOAD_CONST\n");
- if (vertexprogram.upload_parameter < 1024)
- *(UINT32 *)(&vertexprogram.parameter[vertexprogram.upload_parameter]) = data;
- else
- logerror("Need to increase size of vertexprogram.parameter to %d\n\r", vertexprogram.upload_parameter);
- vertexprogram.upload_parameter++;
- }
- // Register combiners
- if (maddress == 0x1e60) {
- combiner.stages=data & 15;
- countlen--;
- }
- if (maddress == 0x0288) {
- combiner.final.mapin_rgbD_input=data & 15;
- combiner.final.mapin_rgbD_component=(data >> 4) & 1;
- combiner.final.mapin_rgbD_mapping=(data >> 5) & 7;
- combiner.final.mapin_rgbC_input=(data >> 8) & 15;
- combiner.final.mapin_rgbC_component=(data >> 12) & 1;
- combiner.final.mapin_rgbC_mapping=(data >> 13) & 7;
- combiner.final.mapin_rgbB_input=(data >> 16) & 15;
- combiner.final.mapin_rgbB_component=(data >> 20) & 1;
- combiner.final.mapin_rgbB_mapping=(data >> 21) & 7;
- combiner.final.mapin_rgbA_input=(data >> 24) & 15;
- combiner.final.mapin_rgbA_component=(data >> 28) & 1;
- combiner.final.mapin_rgbA_mapping=(data >> 29) & 7;
- countlen--;
- }
- if (maddress == 0x028c) {
- combiner.final.color_sum_clamp=(data >> 7) & 1;
- combiner.final.mapin_aG_input=(data >> 8) & 15;
- combiner.final.mapin_aG_component=(data >> 12) & 1;
- combiner.final.mapin_aG_mapping=(data >> 13) & 7;
- combiner.final.mapin_rgbF_input=(data >> 16) & 15;
- combiner.final.mapin_rgbF_component=(data >> 20) & 1;
- combiner.final.mapin_rgbF_mapping=(data >> 21) & 7;
- combiner.final.mapin_rgbE_input=(data >> 24) & 15;
- combiner.final.mapin_rgbE_component=(data >> 28) & 1;
- combiner.final.mapin_rgbE_mapping=(data >> 29) & 7;
- countlen--;
- }
- if (maddress == 0x1e20) {
- combiner_argb8_float(data,combiner.final.register_constantcolor0);
- countlen--;
- }
- if (maddress == 0x1e24) {
- combiner_argb8_float(data,combiner.final.register_constantcolor1);
- countlen--;
- }
- if ((maddress >= 0x0260) && (maddress < 0x0280)) {
- int n;
-
- n=(maddress-0x0260) >> 2;
- combiner.stage[n].mapin_aD_input=data & 15;
- combiner.stage[n].mapin_aD_component=(data >> 4) & 1;
- combiner.stage[n].mapin_aD_mapping=(data >> 5) & 7;
- combiner.stage[n].mapin_aC_input=(data >> 8) & 15;
- combiner.stage[n].mapin_aC_component=(data >> 12) & 1;
- combiner.stage[n].mapin_aC_mapping=(data >> 13) & 7;
- combiner.stage[n].mapin_aB_input=(data >> 16) & 15;
- combiner.stage[n].mapin_aB_component=(data >> 20) & 1;
- combiner.stage[n].mapin_aB_mapping=(data >> 21) & 7;
- combiner.stage[n].mapin_aA_input=(data >> 24) & 15;
- combiner.stage[n].mapin_aA_component=(data >> 28) & 1;
- combiner.stage[n].mapin_aA_mapping=(data >> 29) & 7;
- countlen--;
- }
- if ((maddress >= 0x0ac0) && (maddress < 0x0ae0)) {
- int n;
-
- n=(maddress-0x0ac0) >> 2;
- combiner.stage[n].mapin_rgbD_input=data & 15;
- combiner.stage[n].mapin_rgbD_component=(data >> 4) & 1;
- combiner.stage[n].mapin_rgbD_mapping=(data >> 5) & 7;
- combiner.stage[n].mapin_rgbC_input=(data >> 8) & 15;
- combiner.stage[n].mapin_rgbC_component=(data >> 12) & 1;
- combiner.stage[n].mapin_rgbC_mapping=(data >> 13) & 7;
- combiner.stage[n].mapin_rgbB_input=(data >> 16) & 15;
- combiner.stage[n].mapin_rgbB_component=(data >> 20) & 1;
- combiner.stage[n].mapin_rgbB_mapping=(data >> 21) & 7;
- combiner.stage[n].mapin_rgbA_input=(data >> 24) & 15;
- combiner.stage[n].mapin_rgbA_component=(data >> 28) & 1;
- combiner.stage[n].mapin_rgbA_mapping=(data >> 29) & 7;
- countlen--;
- }
- if ((maddress >= 0x0a60) && (maddress < 0x0a80)) {
- int n;
-
- n=(maddress-0x0a60) >> 2;
- combiner_argb8_float(data,combiner.stage[n].register_constantcolor0);
- countlen--;
- }
- if ((maddress >= 0x0a80) && (maddress < 0x0aa0)) {
- int n;
-
- n=(maddress-0x0a80) >> 2;
- combiner_argb8_float(data,combiner.stage[n].register_constantcolor1);
- countlen--;
- }
- if ((maddress >= 0x0aa0) && (maddress < 0x0ac0)) {
- int n;
-
- n=(maddress-0x0aa0) >> 2;
- combiner.stage[n].mapout_aCD_output=data & 15;
- combiner.stage[n].mapout_aAB_output=(data >> 4) & 15;
- combiner.stage[n].mapout_aSUM_output=(data >> 8) & 15;
- combiner.stage[n].mapout_aCD_dotproduct=(data >> 12) & 1;
- combiner.stage[n].mapout_aAB_dotproduct=(data >> 13) & 1;
- combiner.stage[n].mapout_a_muxsum=(data >> 14) & 1;
- combiner.stage[n].mapout_a_bias=(data >> 15) & 1;
- combiner.stage[n].mapout_a_scale=(data >> 16) & 3;
- //combiner.=(data >> 27) & 7;
- countlen--;
- }
- if ((maddress >= 0x1e40) && (maddress < 0x1e60)) {
- int n;
-
- n=(maddress-0x1e40) >> 2;
- combiner.stage[n].mapout_rgbCD_output=data & 15;
- combiner.stage[n].mapout_rgbAB_output=(data >> 4) & 15;
- combiner.stage[n].mapout_rgbSUM_output=(data >> 8) & 15;
- combiner.stage[n].mapout_rgbCD_dotproduct=(data >> 12) & 1;
- combiner.stage[n].mapout_rgbAB_dotproduct=(data >> 13) & 1;
- combiner.stage[n].mapout_rgb_muxsum=(data >> 14) & 1;
- combiner.stage[n].mapout_rgb_bias=(data >> 15) & 1;
- combiner.stage[n].mapout_rgb_scale=(data >> 16) & 3;
- //combiner.=(data >> 27) & 7;
- countlen--;
- }
-}
-
-int nv2a_renderer::toggle_register_combiners_usage()
-{
- combiner.used=1-combiner.used;
- return combiner.used;
-}
-
-void nv2a_renderer::debug_grab_texture(int type, const char *filename)
-{
- debug_grab_texttype = type;
- if (debug_grab_textfile == NULL)
- debug_grab_textfile = (char *)malloc(128);
- strncpy(debug_grab_textfile, filename, 127);
-}
-
-void nv2a_renderer::debug_grab_vertex_program_slot(int slot, UINT32 *instruction)
-{
- if (slot >= 1024 / 4)
- return;
- instruction[0] = vertexprogram.instruction[slot * 4 + 0];
- instruction[1] = vertexprogram.instruction[slot * 4 + 1];
- instruction[2] = vertexprogram.instruction[slot * 4 + 2];
- instruction[3] = vertexprogram.instruction[slot * 4 + 3];
-}
-
-void nv2a_renderer::savestate_items()
-{
-}
-
-void nv2a_renderer::combiner_argb8_float(UINT32 color,float reg[4])
-{
- reg[0]=(float)(color & 0xff)/255.0;
- reg[1]=(float)((color >> 8) & 0xff)/255.0;
- reg[2]=(float)((color >> 16) & 0xff)/255.0;
- reg[3]=(float)((color >> 24) & 0xff)/255.0;
-}
-
-UINT32 nv2a_renderer::combiner_float_argb8(float reg[4])
-{
- UINT32 r,g,b,a;
-
- a=reg[3]*255.0;
- b=reg[2]*255.0;
- g=reg[1]*255.0;
- r=reg[0]*255.0;
- return (a << 24) | (r << 16) | (g << 8) | b;
-}
-
-float nv2a_renderer::combiner_map_input_select(int code,int index)
-{
- switch (code) {
- case 0:
- default:
- return combiner.register_zero[index];
- case 1:
- return combiner.register_color0[index];
- case 2:
- return combiner.register_color1[index];
- case 3:
- return combiner.register_fogcolor[index];
- case 4:
- return combiner.register_primarycolor[index];
- case 5:
- return combiner.register_secondarycolor[index];
- case 8:
- return combiner.register_texture0color[index];
- case 9:
- return combiner.register_texture1color[index];
- case 10:
- return combiner.register_texture2color[index];
- case 11:
- return combiner.register_texture3color[index];
- case 12:
- return combiner.register_spare0[index];
- case 13:
- return combiner.register_spare1[index];
- case 14:
- return combiner.variable_sumclamp[index];
- case 15:
- return combiner.variable_EF[index];
- }
-
- // never executed
- //return 0;
-}
-
-float *nv2a_renderer::combiner_map_input_select3(int code)
-{
- switch (code) {
- case 0:
- default:
- return combiner.register_zero;
- case 1:
- return combiner.register_color0;
- case 2:
- return combiner.register_color1;
- case 3:
- return combiner.register_fogcolor;
- case 4:
- return combiner.register_primarycolor;
- case 5:
- return combiner.register_secondarycolor;
- case 8:
- return combiner.register_texture0color;
- case 9:
- return combiner.register_texture1color;
- case 10:
- return combiner.register_texture2color;
- case 11:
- return combiner.register_texture3color;
- case 12:
- return combiner.register_spare0;
- case 13:
- return combiner.register_spare1;
- case 14:
- return combiner.variable_sumclamp;
- case 15:
- return combiner.variable_EF;
- }
-
- // never executed
- //return 0;
-}
-
-float *nv2a_renderer::combiner_map_output_select3(int code)
-{
- switch (code) {
- case 0:
- return 0;
- case 1:
- return 0;
- case 2:
- return 0;
- case 3:
- return 0;
- case 4:
- return combiner.register_primarycolor;
- case 5:
- return combiner.register_secondarycolor;
- case 8:
- return combiner.register_texture0color;
- case 9:
- return combiner.register_texture1color;
- case 10:
- return combiner.register_texture2color;
- case 11:
- return combiner.register_texture3color;
- case 12:
- return combiner.register_spare0;
- case 13:
- return combiner.register_spare1;
- case 14:
- return 0;
- case 15:
- default:
- return 0;
- }
-}
-
-float nv2a_renderer::combiner_map_input_function(int code,float value)
-{
- float t;
-
- switch (code) {
- case 0:
- return MAX(0.0,value);
- case 1:
- t=MAX(value, 0.0);
- return 1.0 - MIN(t, 1.0);
- case 2:
- return 2.0 * MAX(0.0, value) - 1.0;
- case 3:
- return -2.0 * MAX(0.0, value) + 1.0;
- case 4:
- return MAX(0.0, value) - 0.5;
- case 5:
- return -MAX(0.0, value) + 0.5;
- case 6:
- return value;
- case 7:
- default:
- return -value;
- }
-
- // never executed
- //return 0;
-}
-
-void nv2a_renderer::combiner_map_input_function3(int code,float *data)
-{
- float t;
-
- switch (code) {
- case 0:
- data[0]=MAX(0.0,data[0]);
- data[1]=MAX(0.0,data[1]);
- data[2]=MAX(0.0,data[2]);
- break;
- case 1:
- t=MAX(data[0], 0.0);
- data[0]=1.0 - MIN(t, 1.0);
- t=MAX(data[1], 0.0);
- data[1]=1.0 - MIN(t, 1.0);
- t=MAX(data[2], 0.0);
- data[2]=1.0 - MIN(t, 1.0);
- break;
- case 2:
- data[0]=2.0 * MAX(0.0, data[0]) - 1.0;
- data[1]=2.0 * MAX(0.0, data[1]) - 1.0;
- data[2]=2.0 * MAX(0.0, data[2]) - 1.0;
- break;
- case 3:
- data[0]=-2.0 * MAX(0.0, data[0]) + 1.0;
- data[1]=-2.0 * MAX(0.0, data[1]) + 1.0;
- data[2]=-2.0 * MAX(0.0, data[2]) + 1.0;
- break;
- case 4:
- data[0]=MAX(0.0, data[0]) - 0.5;
- data[1]=MAX(0.0, data[1]) - 0.5;
- data[2]=MAX(0.0, data[2]) - 0.5;
- break;
- case 5:
- data[0]=-MAX(0.0, data[0]) + 0.5;
- data[1]=-MAX(0.0, data[1]) + 0.5;
- data[2]=-MAX(0.0, data[2]) + 0.5;
- break;
- case 6:
- return;
- case 7:
- default:
- data[0]=-data[0];
- data[1]=-data[1];
- data[2]=-data[2];
- break;
- }
-}
-
-void nv2a_renderer::combiner_initialize_registers(UINT32 argb8[6])
-{
- combiner_argb8_float(argb8[0],combiner.register_primarycolor);
- combiner_argb8_float(argb8[1],combiner.register_secondarycolor);
- combiner_argb8_float(argb8[2],combiner.register_texture0color);
- combiner_argb8_float(argb8[3],combiner.register_texture1color);
- combiner_argb8_float(argb8[4],combiner.register_texture2color);
- combiner_argb8_float(argb8[5],combiner.register_texture3color);
- combiner.register_spare0[3]=combiner.register_texture0color[3];
- combiner.register_zero[0]=combiner.register_zero[1]=combiner.register_zero[2]=combiner.register_zero[3]=0;
-}
-
-void nv2a_renderer::combiner_initialize_stage(int stage_number)
-{
- int n=stage_number;
-
- // put register_constantcolor0 in register_color0
- combiner.register_color0[0]=combiner.stage[n].register_constantcolor0[0];
- combiner.register_color0[1]=combiner.stage[n].register_constantcolor0[1];
- combiner.register_color0[2]=combiner.stage[n].register_constantcolor0[2];
- combiner.register_color0[3]=combiner.stage[n].register_constantcolor0[3];
- // put register_constantcolor1 in register_color1
- combiner.register_color1[0]=combiner.stage[n].register_constantcolor1[0];
- combiner.register_color1[1]=combiner.stage[n].register_constantcolor1[1];
- combiner.register_color1[2]=combiner.stage[n].register_constantcolor1[2];
- combiner.register_color1[3]=combiner.stage[n].register_constantcolor1[3];
-}
-
-void nv2a_renderer::combiner_initialize_final()
-{
- // put register_constantcolor0 in register_color0
- combiner.register_color0[0]=combiner.final.register_constantcolor0[0];
- combiner.register_color0[1]=combiner.final.register_constantcolor0[1];
- combiner.register_color0[2]=combiner.final.register_constantcolor0[2];
- combiner.register_color0[3]=combiner.final.register_constantcolor0[3];
- // put register_constantcolor1 in register_color1
- combiner.register_color1[0]=combiner.final.register_constantcolor1[0];
- combiner.register_color1[1]=combiner.final.register_constantcolor1[1];
- combiner.register_color1[2]=combiner.final.register_constantcolor1[2];
- combiner.register_color1[3]=combiner.final.register_constantcolor1[3];
-}
-
-void nv2a_renderer::combiner_map_input(int stage_number)
-{
- int n=stage_number;
- int c,d,i;
- float v,*pv;
-
- // A
- v=combiner_map_input_select(combiner.stage[n].mapin_aA_input,2+combiner.stage[n].mapin_aA_component);
- combiner.variable_A[3]=combiner_map_input_function(combiner.stage[n].mapin_aA_mapping,v);
- // B
- v=combiner_map_input_select(combiner.stage[n].mapin_aB_input,2+combiner.stage[n].mapin_aB_component);
- combiner.variable_B[3]=combiner_map_input_function(combiner.stage[n].mapin_aB_mapping,v);
- // C
- v=combiner_map_input_select(combiner.stage[n].mapin_aC_input,2+combiner.stage[n].mapin_aC_component);
- combiner.variable_C[3]=combiner_map_input_function(combiner.stage[n].mapin_aC_mapping,v);
- // D
- v=combiner_map_input_select(combiner.stage[n].mapin_aD_input,2+combiner.stage[n].mapin_aD_component);
- combiner.variable_D[3]=combiner_map_input_function(combiner.stage[n].mapin_aD_mapping,v);
-
- // A
- pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbA_input);
- c=combiner.stage[n].mapin_rgbA_component*3;
- i=~combiner.stage[n].mapin_rgbA_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_A[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.stage[n].mapin_rgbA_mapping,combiner.variable_A);
- // B
- pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbB_input);
- c=combiner.stage[n].mapin_rgbB_component*3;
- i=~combiner.stage[n].mapin_rgbB_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_B[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.stage[n].mapin_rgbB_mapping,combiner.variable_B);
- // C
- pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbC_input);
- c=combiner.stage[n].mapin_rgbC_component*3;
- i=~combiner.stage[n].mapin_rgbC_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_C[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.stage[n].mapin_rgbC_mapping,combiner.variable_C);
- // D
- pv=combiner_map_input_select3(combiner.stage[n].mapin_rgbD_input);
- c=combiner.stage[n].mapin_rgbD_component*3;
- i=~combiner.stage[n].mapin_rgbD_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_D[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.stage[n].mapin_rgbD_mapping,combiner.variable_D);
-}
-
-void nv2a_renderer::combiner_map_output(int stage_number)
-{
- int n=stage_number;
- float *f;
-
- // rgb
- f=combiner_map_output_select3(combiner.stage[n].mapout_rgbAB_output);
- if (f) {
- f[0]=combiner.function_RGBop1[0];
- f[1]=combiner.function_RGBop1[1];
- f[2]=combiner.function_RGBop1[2];
- }
- f=combiner_map_output_select3(combiner.stage[n].mapout_rgbCD_output);
- if (f) {
- f[0]=combiner.function_RGBop2[0];
- f[1]=combiner.function_RGBop2[1];
- f[2]=combiner.function_RGBop2[2];
- }
- if ((combiner.stage[n].mapout_rgbAB_dotproduct | combiner.stage[n].mapout_rgbCD_dotproduct) == 0) {
- f=combiner_map_output_select3(combiner.stage[n].mapout_rgbSUM_output);
- if (f) {
- f[0]=combiner.function_RGBop3[0];
- f[1]=combiner.function_RGBop3[1];
- f[2]=combiner.function_RGBop3[2];
- }
- }
- // a
- f=combiner_map_output_select3(combiner.stage[n].mapout_aAB_output);
- if (f)
- f[3]=combiner.function_Aop1;
- f=combiner_map_output_select3(combiner.stage[n].mapout_aCD_output);
- if (f)
- f[3]=combiner.function_Aop2;
- f=combiner_map_output_select3(combiner.stage[n].mapout_aSUM_output);
- if (f)
- f[3]=combiner.function_Aop3;
-}
-
-void nv2a_renderer::combiner_map_final_input()
-{
- int i,c,d;
- float *pv;
-
- // E
- pv=combiner_map_input_select3(combiner.final.mapin_rgbE_input);
- c=combiner.final.mapin_rgbE_component*3;
- i=~combiner.final.mapin_rgbE_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_E[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.final.mapin_rgbE_mapping,combiner.variable_E);
- // F
- pv=combiner_map_input_select3(combiner.final.mapin_rgbF_input);
- c=combiner.final.mapin_rgbF_component*3;
- i=~combiner.final.mapin_rgbF_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_F[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.final.mapin_rgbF_mapping,combiner.variable_F);
- // EF
- combiner.variable_EF[0]=combiner.variable_E[0]*combiner.variable_F[0];
- combiner.variable_EF[1]=combiner.variable_E[1]*combiner.variable_F[1];
- combiner.variable_EF[2]=combiner.variable_E[2]*combiner.variable_F[2];
- // sumclamp
- combiner.variable_sumclamp[0]=MAX(0,combiner.register_spare0[0])+MAX(0,combiner.register_secondarycolor[0]);
- combiner.variable_sumclamp[1]=MAX(0,combiner.register_spare0[1])+MAX(0,combiner.register_secondarycolor[1]);
- combiner.variable_sumclamp[2]=MAX(0,combiner.register_spare0[2])+MAX(0,combiner.register_secondarycolor[2]);
- if (combiner.final.color_sum_clamp != 0) {
- combiner.variable_sumclamp[0]=MIN(combiner.variable_sumclamp[0],1.0);
- combiner.variable_sumclamp[1]=MIN(combiner.variable_sumclamp[1],1.0);
- combiner.variable_sumclamp[2]=MIN(combiner.variable_sumclamp[2],1.0);
- }
- // A
- pv=combiner_map_input_select3(combiner.final.mapin_rgbA_input);
- c=combiner.final.mapin_rgbA_component*3;
- i=~combiner.final.mapin_rgbA_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_A[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.final.mapin_rgbA_mapping,combiner.variable_A);
- // B
- pv=combiner_map_input_select3(combiner.final.mapin_rgbB_input);
- c=combiner.final.mapin_rgbB_component*3;
- i=~combiner.final.mapin_rgbB_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_B[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.final.mapin_rgbB_mapping,combiner.variable_B);
- // C
- pv=combiner_map_input_select3(combiner.final.mapin_rgbC_input);
- c=combiner.final.mapin_rgbC_component*3;
- i=~combiner.final.mapin_rgbC_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_C[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.final.mapin_rgbC_mapping,combiner.variable_C);
- // D
- pv=combiner_map_input_select3(combiner.final.mapin_rgbD_input);
- c=combiner.final.mapin_rgbD_component*3;
- i=~combiner.final.mapin_rgbD_component & 1;
- for (d=0;d < 3;d++) {
- combiner.variable_D[d]=pv[c];
- c=c+i;
- }
- combiner_map_input_function3(combiner.final.mapin_rgbD_mapping,combiner.variable_D);
- // G
- combiner.variable_G=combiner_map_input_select(combiner.final.mapin_aG_input,2+combiner.final.mapin_aG_component);
-}
-
-void nv2a_renderer::combiner_final_output()
-{
- // rgb
- combiner.output[0]=combiner.variable_A[0]*combiner.variable_B[0]+(1.0-combiner.variable_A[0])*combiner.variable_C[0]+combiner.variable_D[0];
- combiner.output[1]=combiner.variable_A[1]*combiner.variable_B[1]+(1.0-combiner.variable_A[1])*combiner.variable_C[1]+combiner.variable_D[1];
- combiner.output[2]=combiner.variable_A[2]*combiner.variable_B[2]+(1.0-combiner.variable_A[2])*combiner.variable_C[2]+combiner.variable_D[2];
- combiner.output[0]=MIN(combiner.output[0],1.0);
- combiner.output[1]=MIN(combiner.output[1],1.0);
- combiner.output[2]=MIN(combiner.output[2],1.0);
- // a
- combiner.output[3]=combiner_map_input_function(combiner.final.mapin_aG_mapping,combiner.variable_G);
-}
-
-void nv2a_renderer::combiner_function_AB(float result[4])
-{
- result[0]=combiner.variable_A[0]*combiner.variable_B[0];
- result[1]=combiner.variable_A[1]*combiner.variable_B[1];
- result[2]=combiner.variable_A[2]*combiner.variable_B[2];
-}
-
-void nv2a_renderer::combiner_function_AdotB(float result[4])
-{
- result[0]=combiner.variable_A[0]*combiner.variable_B[0]+combiner.variable_A[1]*combiner.variable_B[1]+combiner.variable_A[2]*combiner.variable_B[2];
- result[1]=result[0];
- result[2]=result[0];
-}
-
-void nv2a_renderer::combiner_function_CD(float result[4])
-{
- result[0]=combiner.variable_C[0]*combiner.variable_D[0];
- result[1]=combiner.variable_C[1]*combiner.variable_D[1];
- result[2]=combiner.variable_C[2]*combiner.variable_D[2];
-}
-
-void nv2a_renderer::combiner_function_CdotD(float result[4])
-{
- result[0]=combiner.variable_C[0]*combiner.variable_D[0]+combiner.variable_C[1]*combiner.variable_D[1]+combiner.variable_C[2]*combiner.variable_D[2];
- result[1]=result[0];
- result[2]=result[0];
-}
-
-void nv2a_renderer::combiner_function_ABmuxCD(float result[4])
-{
- if (combiner.register_spare0[3] >= 0.5)
- combiner_function_AB(result);
- else
- combiner_function_CD(result);
-}
-
-void nv2a_renderer::combiner_function_ABsumCD(float result[4])
-{
- result[0]=combiner.variable_A[0]*combiner.variable_B[0]+combiner.variable_C[0]*combiner.variable_D[0];
- result[1]=combiner.variable_A[1]*combiner.variable_B[1]+combiner.variable_C[1]*combiner.variable_D[1];
- result[2]=combiner.variable_A[2]*combiner.variable_B[2]+combiner.variable_C[2]*combiner.variable_D[2];
-}
-
-void nv2a_renderer::combiner_compute_rgb_outputs(int stage_number)
-{
- int n=stage_number;
- int m;
- float biasrgb,scalergb;
-
- if (combiner.stage[n].mapout_rgb_bias)
- biasrgb= -0.5;
- else
- biasrgb=0;
- switch (combiner.stage[n].mapout_rgb_scale) {
- case 0:
- default:
- scalergb=1.0;
- break;
- case 1:
- scalergb=2.0;
- break;
- case 2:
- scalergb=4.0;
- break;
- case 3:
- scalergb=0.5;
- break;
- }
- if (combiner.stage[n].mapout_rgbAB_dotproduct) {
- m=1;
- combiner_function_AdotB(combiner.function_RGBop1);
- } else {
- m=0;
- combiner_function_AB(combiner.function_RGBop1);
- }
- combiner.function_RGBop1[0]=MAX(MIN((combiner.function_RGBop1[0] + biasrgb) * scalergb, 1.0), -1.0);
- combiner.function_RGBop1[1]=MAX(MIN((combiner.function_RGBop1[1] + biasrgb) * scalergb, 1.0), -1.0);
- combiner.function_RGBop1[2]=MAX(MIN((combiner.function_RGBop1[2] + biasrgb) * scalergb, 1.0), -1.0);
- if (combiner.stage[n].mapout_rgbCD_dotproduct) {
- m=m | 1;
- combiner_function_CdotD(combiner.function_RGBop2);
- } else
- combiner_function_CD(combiner.function_RGBop2);
- combiner.function_RGBop2[0]=MAX(MIN((combiner.function_RGBop2[0] + biasrgb) * scalergb, 1.0), -1.0);
- combiner.function_RGBop2[1]=MAX(MIN((combiner.function_RGBop2[1] + biasrgb) * scalergb, 1.0), -1.0);
- combiner.function_RGBop2[2]=MAX(MIN((combiner.function_RGBop2[2] + biasrgb) * scalergb, 1.0), -1.0);
- if (m == 0) {
- if (combiner.stage[n].mapout_rgb_muxsum)
- combiner_function_ABmuxCD(combiner.function_RGBop3);
- else
- combiner_function_ABsumCD(combiner.function_RGBop3);
- combiner.function_RGBop3[0]=MAX(MIN((combiner.function_RGBop3[0] + biasrgb) * scalergb, 1.0), -1.0);
- combiner.function_RGBop3[1]=MAX(MIN((combiner.function_RGBop3[1] + biasrgb) * scalergb, 1.0), -1.0);
- combiner.function_RGBop3[2]=MAX(MIN((combiner.function_RGBop3[2] + biasrgb) * scalergb, 1.0), -1.0);
- }
-}
-
-void nv2a_renderer::combiner_compute_a_outputs(int stage_number)
-{
- int n=stage_number;
- float biasa,scalea;
-
- if (combiner.stage[n].mapout_a_bias)
- biasa= -0.5;
- else
- biasa=0;
- switch (combiner.stage[n].mapout_a_scale) {
- case 0:
- default:
- scalea=1.0;
- break;
- case 1:
- scalea=2.0;
- break;
- case 2:
- scalea=4.0;
- break;
- case 3:
- scalea=0.5;
- break;
- }
- combiner.function_Aop1=combiner.variable_A[3]*combiner.variable_B[3];
- combiner.function_Aop1=MAX(MIN((combiner.function_Aop1 + biasa) * scalea, 1.0), -1.0);
- combiner.function_Aop2=combiner.variable_C[3]*combiner.variable_D[3];
- combiner.function_Aop2=MAX(MIN((combiner.function_Aop2 + biasa) * scalea, 1.0), -1.0);
- if (combiner.stage[n].mapout_a_muxsum) {
- if (combiner.register_spare0[3] >= 0.5)
- combiner.function_Aop3=combiner.variable_A[3]*combiner.variable_B[3];
- else
- combiner.function_Aop3=combiner.variable_C[3]*combiner.variable_D[3];
- } else
- combiner.function_Aop3=combiner.variable_A[3]*combiner.variable_B[3]+combiner.variable_C[3]*combiner.variable_D[3];
- combiner.function_Aop3=MAX(MIN((combiner.function_Aop3 + biasa) * scalea, 1.0), -1.0);
-}
-
-void nv2a_renderer::vblank_callback(screen_device &screen, bool state)
-{
- chihiro_state *chst=machine().driver_data<chihiro_state>();
-
- //printf("vblank_callback\n\r");
- if (state == true)
- pcrtc[0x100/4] |= 1;
- else
- pcrtc[0x100/4] &= ~1;
- if (pcrtc[0x100/4] & pcrtc[0x140/4])
- pmc[0x100/4] |= 0x1000000;
- else
- pmc[0x100/4] &= ~0x1000000;
- if ((pmc[0x100/4] != 0) && (pmc[0x140/4] != 0)) {
- // send interrupt
- chst->chihiro_devs.pic8259_1->ir3_w(1); // IRQ 3
- } else
- chst->chihiro_devs.pic8259_1->ir3_w(0); // IRQ 3
-}
-
-UINT32 nv2a_renderer::screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- UINT32 *dst=(UINT32 *)bitmap.raw_pixptr(0,0);
- UINT32 *src=(UINT32 *)fb.raw_pixptr(0,0);
-
- //printf("updatescreen\n\r");
- memcpy(dst,src,bitmap.rowbytes()*bitmap.height());
- return 0;
-}
-
-void chihiro_state::debug_generate_irq(int irq,bool active)
+void chihiro_state::debug_generate_irq(int irq, bool active)
{
int state;
if (active)
{
- debug_irq_active=true;
- debug_irq_number=irq;
- state=1;
+ debug_irq_active = true;
+ debug_irq_number = irq;
+ state = 1;
}
else
{
- debug_irq_active=false;
- state=0;
+ debug_irq_active = false;
+ state = 0;
}
switch (irq)
{
@@ -4186,7 +963,10 @@ void chihiro_state::debug_generate_irq(int irq,bool active)
void chihiro_state::vblank_callback(screen_device &screen, bool state)
{
- nvidia_nv2a->vblank_callback(screen,state);
+ if (nvidia_nv2a->vblank_callback(screen, state))
+ chihiro_devs.pic8259_1->ir3_w(1); // IRQ 3
+ else
+ chihiro_devs.pic8259_1->ir3_w(0); // IRQ 3
}
UINT32 chihiro_state::screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
@@ -4194,225 +974,20 @@ UINT32 chihiro_state::screen_update_callback(screen_device &screen, bitmap_rgb32
return nvidia_nv2a->screen_update_callback(screen, bitmap, cliprect);
}
-READ32_MEMBER( nv2a_renderer::geforce_r )
+READ32_MEMBER(chihiro_state::geforce_r)
{
-static int x,ret;
-
- ret=0;
- if (offset == 0x1804f6) {
- x = x ^ 0x08080808;
- ret=x;
- }
- if ((offset >= 0x00101000/4) && (offset < 0x00102000/4)) {
- //logerror("NV_2A: read STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,ret);
- } else if ((offset >= 0x00002000/4) && (offset < 0x00004000/4)) {
- ret=pfifo[offset-0x00002000/4];
- // PFIFO.CACHE1.STATUS or PFIFO.RUNOUT_STATUS
- if ((offset == 0x3214/4) || (offset == 0x2400/4))
- ret=0x10;
- //logerror("NV_2A: read PFIFO[%06X] value %08X\n",offset*4-0x00002000,ret);
- } else if ((offset >= 0x00700000/4) && (offset < 0x00800000/4)) {
- ret=ramin[offset-0x00700000/4];
- //logerror("NV_2A: read PRAMIN[%06X] value %08X\n",offset*4-0x00700000,ret);
- } else if ((offset >= 0x00400000/4) && (offset < 0x00402000/4)) {
- //logerror("NV_2A: read PGRAPH[%06X] value %08X\n",offset*4-0x00400000,ret);
- } else if ((offset >= 0x00600000/4) && (offset < 0x00601000/4)) {
- ret=pcrtc[offset-0x00600000/4];
- //logerror("NV_2A: read PCRTC[%06X] value %08X\n",offset*4-0x00600000,ret);
- } else if ((offset >= 0x00000000/4) && (offset < 0x00001000/4)) {
- ret=pmc[offset-0x00000000/4];
- //logerror("NV_2A: read PMC[%06X] value %08X\n",offset*4-0x00000000,ret);
- } else if ((offset >= 0x00800000/4) && (offset < 0x00900000/4)) {
- // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
- int chanel,subchannel,suboffset;
-
- suboffset=offset-0x00800000/4;
- chanel=(suboffset >> (16-2)) & 31;
- subchannel=(suboffset >> (13-2)) & 7;
- suboffset=suboffset & 0x7ff;
- if (suboffset < 0x80/4)
- ret=channel[chanel][subchannel].regs[suboffset];
- //logerror("NV_2A: read channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,ret);
- return ret;
- } else ;
- //logerror("NV_2A: read at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,ret);
- return ret;
+ return nvidia_nv2a->geforce_r(space, offset, mem_mask);
}
-WRITE32_MEMBER( nv2a_renderer::geforce_w )
+WRITE32_MEMBER(chihiro_state::geforce_w)
{
- if ((offset >= 0x00101000/4) && (offset < 0x00102000/4)) {
- //logerror("NV_2A: write STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,data);
- } else if ((offset >= 0x00002000/4) && (offset < 0x00004000/4)) {
- COMBINE_DATA(pfifo+offset-0x00002000/4);
- //logerror("NV_2A: read PFIFO[%06X]=%08X\n",offset*4-0x00002000,data & mem_mask); // 2210 pfifo ramht & 1f0 << 12
- } else if ((offset >= 0x00700000/4) && (offset < 0x00800000/4)) {
- COMBINE_DATA(ramin+offset-0x00700000/4);
- //logerror("NV_2A: write PRAMIN[%06X]=%08X\n",offset*4-0x00700000,data & mem_mask);
- } else if ((offset >= 0x00400000/4) && (offset < 0x00402000/4)) {
- //logerror("NV_2A: write PGRAPH[%06X]=%08X\n",offset*4-0x00400000,data & mem_mask);
- } else if ((offset >= 0x00600000/4) && (offset < 0x00601000/4)) {
- COMBINE_DATA(pcrtc+offset-0x00600000/4);
- //logerror("NV_2A: write PCRTC[%06X]=%08X\n",offset*4-0x00600000,data & mem_mask);
- } else if ((offset >= 0x00000000/4) && (offset < 0x00001000/4)) {
- COMBINE_DATA(pmc+offset-0x00000000/4);
- //logerror("NV_2A: write PMC[%06X]=%08X\n",offset*4-0x00000000,data & mem_mask);
- } else if ((offset >= 0x00800000/4) && (offset < 0x00900000/4)) {
- // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
- int chanel,subchannel,suboffset;
- int method,count,handle,objclass;
-#ifdef LOG_NV2A
- int subch;
-#endif
-
- suboffset=offset-0x00800000/4;
- chanel=(suboffset >> (16-2)) & 31;
- subchannel=(suboffset >> (13-2)) & 7;
- suboffset=suboffset & 0x7ff;
- //logerror("NV_2A: write channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,data & mem_mask);
- if (suboffset >= 0x80/4)
- return;
- COMBINE_DATA(&channel[chanel][subchannel].regs[suboffset]);
- if ((suboffset == 0x40/4) || (suboffset == 0x44/4)) { // DMA_PUT or DMA_GET
- UINT32 *dmaput,*dmaget;
- UINT32 cmd,cmdtype;
- int countlen;
-
- dmaput=&channel[chanel][subchannel].regs[0x40/4];
- dmaget=&channel[chanel][subchannel].regs[0x44/4];
- //printf("dmaget %08X dmaput %08X\n\r",*dmaget,*dmaput);
- if ((*dmaput == 0x048cf000) && (*dmaget == 0x07f4d000))
- *dmaget = *dmaput;
- while (*dmaget != *dmaput) {
- cmd=space.read_dword(*dmaget);
- *dmaget += 4;
- cmdtype=geforce_commandkind(cmd);
- switch (cmdtype)
- {
- case 6: // jump
-#ifdef LOG_NV2A
- printf("jump dmaget %08X",*dmaget);
-#endif
- *dmaget=cmd & 0xfffffffc;
-#ifdef LOG_NV2A
- printf(" -> %08X\n\r",*dmaget);
-#endif
- break;
- case 0: // increasing method
- method=(cmd >> 2) & 2047; // method*4 is address // if method >= 0x40 send it to assigned object
-#ifdef LOG_NV2A
- subch=(cmd >> 13) & 7;
-#endif
- count=(cmd >> 18) & 2047;
- if ((method == 0) && (count == 1)) {
- handle=space.read_dword(*dmaget);
- handle=geforce_object_offset(handle);
-#ifdef LOG_NV2A
- logerror(" assign to subchannel %d object at %d\n",subch,handle);
-#endif
- channel[chanel][subchannel].object.objhandle=handle;
- handle=ramin[handle/4];
- objclass=handle & 0xff;
- channel[chanel][subchannel].object.objclass=objclass;
- *dmaget += 4;
- } else {
-#ifdef LOG_NV2A
- logerror(" subch. %d method %04x offset %04x count %d\n",subch,method,method*4,count);
-#endif
- while (count > 0) {
- countlen=1;
- geforce_exec_method(space,chanel,subchannel,method,*dmaget,countlen);
- count--;
- method++;
- *dmaget += 4;
- }
- }
- break;
- case 5: // non-increasing method
- method=(cmd >> 2) & 2047;
-#ifdef LOG_NV2A
- subch=(cmd >> 13) & 7;
-#endif
- count=(cmd >> 18) & 2047;
- if ((method == 0) && (count == 1)) {
-#ifdef LOG_NV2A
- logerror(" assign channel %d\n",subch);
-#endif
- handle=space.read_dword(*dmaget);
- handle=geforce_object_offset(handle);
-#ifdef LOG_NV2A
- logerror(" assign to subchannel %d object at %d\n",subch,handle);
-#endif
- channel[chanel][subchannel].object.objhandle=handle;
- handle=ramin[handle/4];
- objclass=handle & 0xff;
- channel[chanel][subchannel].object.objclass=objclass;
- *dmaget += 4;
- } else {
-#ifdef LOG_NV2A
- logerror(" subch. %d method %04x offset %04x count %d\n",subch,method,method*4,count);
-#endif
- while (count > 0) {
- countlen=count;
- geforce_exec_method(space,chanel,subchannel,method,*dmaget,countlen);
- *dmaget += 4*(count-countlen);
- count=countlen;
- }
- }
- break;
- case 3: // long non-increasing method
- method=(cmd >> 2) & 2047;
-#ifdef LOG_NV2A
- subch=(cmd >> 13) & 7;
-#endif
- count=space.read_dword(*dmaget);
- *dmaget += 4;
- if ((method == 0) && (count == 1)) {
- handle=space.read_dword(*dmaget);
- handle=geforce_object_offset(handle);
-#ifdef LOG_NV2A
- logerror(" assign to subchannel %d object at %d\n",subch,handle);
-#endif
- channel[chanel][subchannel].object.objhandle=handle;
- handle=ramin[handle/4];
- objclass=handle & 0xff;
- channel[chanel][subchannel].object.objclass=objclass;
- *dmaget += 4;
- } else {
-#ifdef LOG_NV2A
- logerror(" subch. %d method %04x offset %04x count %d\n",subch,method,method*4,count);
-#endif
- while (count > 0) {
- countlen=count;
- geforce_exec_method(space,chanel,subchannel,method,*dmaget,countlen);
- *dmaget += 4*(count-countlen);
- count=countlen;
- }
- }
- break;
- default:
- logerror(" unimplemented command %08X\n",cmd);
- }
- }
- }
- } else ;
-// logerror("NV_2A: write at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,data);
-}
-
-READ32_MEMBER( chihiro_state::geforce_r )
-{
- return nvidia_nv2a->geforce_r(space,offset,mem_mask);
-}
-
-WRITE32_MEMBER( chihiro_state::geforce_w )
-{
- nvidia_nv2a->geforce_w(space,offset,data,mem_mask);
+ nvidia_nv2a->geforce_w(space, offset, data, mem_mask);
}
static UINT32 geforce_pci_r(device_t *busdevice, device_t *device, int function, int reg, UINT32 mem_mask)
{
#ifdef LOG_PCI
-// logerror(" bus:1 device:NV_2A function:%d register:%d mask:%08X\n",function,reg,mem_mask);
+ // logerror(" bus:1 device:NV_2A function:%d register:%d mask:%08X\n",function,reg,mem_mask);
#endif
return 0;
}
@@ -4420,7 +995,7 @@ static UINT32 geforce_pci_r(device_t *busdevice, device_t *device, int function,
static void geforce_pci_w(device_t *busdevice, device_t *device, int function, int reg, UINT32 data, UINT32 mem_mask)
{
#ifdef LOG_PCI
-// logerror(" bus:1 device:NV_2A function:%d register:%d data:%08X mask:%08X\n",function,reg,data,mem_mask);
+ // logerror(" bus:1 device:NV_2A function:%d register:%d data:%08X mask:%08X\n",function,reg,data,mem_mask);
#endif
}
@@ -4429,7 +1004,7 @@ static void geforce_pci_w(device_t *busdevice, device_t *device, int function, i
*/
#ifdef LOG_OHCI
-static const char *const usbregnames[]={
+static const char *const usbregnames[] = {
"HcRevision",
"HcControl",
"HcCommandStatus",
@@ -4455,55 +1030,55 @@ static const char *const usbregnames[]={
};
#endif
-READ32_MEMBER( chihiro_state::usbctrl_r )
+READ32_MEMBER(chihiro_state::usbctrl_r)
{
if (offset == 0) { /* hack needed until usb (and jvs) is implemented */
if (usbhack_counter == 0) {
- m_maincpu->space(0).write_byte(0x6a79f,0x01);
- m_maincpu->space(0).write_byte(0x6a7a0,0x00);
- m_maincpu->space(0).write_byte(0x6b575,0x00);
- m_maincpu->space(0).write_byte(0x6b576,0x00);
- m_maincpu->space(0).write_byte(0x6b5af,0x75);
- m_maincpu->space(0).write_byte(0x6b78a,0x75);
- m_maincpu->space(0).write_byte(0x6b7ca,0x00);
- m_maincpu->space(0).write_byte(0x6b7b8,0x00);
- m_maincpu->space(0).write_byte(0x8f5b2,0x75);
- m_maincpu->space(0).write_byte(0x79a9e,0x74);
- m_maincpu->space(0).write_byte(0x79b80,0x74);
- m_maincpu->space(0).write_byte(0x79b97,0x74);
+ m_maincpu->space(0).write_byte(0x6a79f, 0x01);
+ m_maincpu->space(0).write_byte(0x6a7a0, 0x00);
+ m_maincpu->space(0).write_byte(0x6b575, 0x00);
+ m_maincpu->space(0).write_byte(0x6b576, 0x00);
+ m_maincpu->space(0).write_byte(0x6b5af, 0x75);
+ m_maincpu->space(0).write_byte(0x6b78a, 0x75);
+ m_maincpu->space(0).write_byte(0x6b7ca, 0x00);
+ m_maincpu->space(0).write_byte(0x6b7b8, 0x00);
+ m_maincpu->space(0).write_byte(0x8f5b2, 0x75);
+ m_maincpu->space(0).write_byte(0x79a9e, 0x74);
+ m_maincpu->space(0).write_byte(0x79b80, 0x74);
+ m_maincpu->space(0).write_byte(0x79b97, 0x74);
}
// after game loaded
if (usbhack_counter == 1) {
- m_maincpu->space(0).write_byte(0x12e4cf,0x01);
- m_maincpu->space(0).write_byte(0x12e4d0,0x00);
- m_maincpu->space(0).write_byte(0x4793e,0x01);
- m_maincpu->space(0).write_byte(0x4793f,0x00);
- m_maincpu->space(0).write_byte(0x47aa3,0x01);
- m_maincpu->space(0).write_byte(0x47aa4,0x00);
- m_maincpu->space(0).write_byte(0x14f2b6,0x84);
- m_maincpu->space(0).write_byte(0x14f2d1,0x75);
- m_maincpu->space(0).write_byte(0x8732f,0x7d);
- m_maincpu->space(0).write_byte(0x87384,0x7d);
- m_maincpu->space(0).write_byte(0x87388,0xeb);
+ m_maincpu->space(0).write_byte(0x12e4cf, 0x01);
+ m_maincpu->space(0).write_byte(0x12e4d0, 0x00);
+ m_maincpu->space(0).write_byte(0x4793e, 0x01);
+ m_maincpu->space(0).write_byte(0x4793f, 0x00);
+ m_maincpu->space(0).write_byte(0x47aa3, 0x01);
+ m_maincpu->space(0).write_byte(0x47aa4, 0x00);
+ m_maincpu->space(0).write_byte(0x14f2b6, 0x84);
+ m_maincpu->space(0).write_byte(0x14f2d1, 0x75);
+ m_maincpu->space(0).write_byte(0x8732f, 0x7d);
+ m_maincpu->space(0).write_byte(0x87384, 0x7d);
+ m_maincpu->space(0).write_byte(0x87388, 0xeb);
}
usbhack_counter++;
}
#ifdef LOG_OHCI
- if (offset >= 0x54/4)
- logerror("usb controller 0 register HcRhPortStatus[%d] read\n",(offset-0x54/4)+1);
+ if (offset >= 0x54 / 4)
+ logerror("usb controller 0 register HcRhPortStatus[%d] read\n", (offset - 0x54 / 4) + 1);
else
- logerror("usb controller 0 register %s read\n",usbregnames[offset]);
+ logerror("usb controller 0 register %s read\n", usbregnames[offset]);
#endif
return 0;
}
-WRITE32_MEMBER( chihiro_state::usbctrl_w )
+WRITE32_MEMBER(chihiro_state::usbctrl_w)
{
#ifdef LOG_OHCI
- if (offset >= 0x54/4)
- logerror("usb controller 0 register HcRhPortStatus[%d] write %08X\n",(offset-0x54/4)+1,data);
+ if (offset >= 0x54 / 4)
+ logerror("usb controller 0 register HcRhPortStatus[%d] write %08X\n", (offset - 0x54 / 4) + 1, data);
else
- logerror("usb controller 0 register %s write %08X\n",usbregnames[offset],data);
+ logerror("usb controller 0 register %s write %08X\n", usbregnames[offset], data);
#endif
}
@@ -4511,34 +1086,34 @@ WRITE32_MEMBER( chihiro_state::usbctrl_w )
* Audio
*/
-READ32_MEMBER( chihiro_state::audio_apu_r )
+READ32_MEMBER(chihiro_state::audio_apu_r)
{
- logerror("Audio_APU: read from %08X mask %08X\n",0xfe800000+offset*4,mem_mask);
- if (offset == 0x20010/4) // some kind of internal counter or state value
- return 0x20+4+8+0x48+0x80;
+ logerror("Audio_APU: read from %08X mask %08X\n", 0xfe800000 + offset * 4, mem_mask);
+ if (offset == 0x20010 / 4) // some kind of internal counter or state value
+ return 0x20 + 4 + 8 + 0x48 + 0x80;
return apust.memory[offset];
}
-WRITE32_MEMBER( chihiro_state::audio_apu_w )
+WRITE32_MEMBER(chihiro_state::audio_apu_w)
{
//UINT32 old;
UINT32 v;
- logerror("Audio_APU: write at %08X mask %08X value %08X\n",0xfe800000+offset*4,mem_mask,data);
+ logerror("Audio_APU: write at %08X mask %08X value %08X\n", 0xfe800000 + offset * 4, mem_mask, data);
//old = apust.memory[offset];
apust.memory[offset] = data;
- if (offset == 0x02040/4) // address of memory area with scatter-gather info (gpdsp scratch dma)
- apust.gpdsp_sgaddress=data;
- if (offset == 0x020d4/4) { // block count (gpdsp)
- apust.gpdsp_sgblocks=data;
- apust.gpdsp_address=apust.space->read_dword(apust.gpdsp_sgaddress); // memory address of first block
+ if (offset == 0x02040 / 4) // address of memory area with scatter-gather info (gpdsp scratch dma)
+ apust.gpdsp_sgaddress = data;
+ if (offset == 0x020d4 / 4) { // block count (gpdsp)
+ apust.gpdsp_sgblocks = data;
+ apust.gpdsp_address = apust.space->read_dword(apust.gpdsp_sgaddress); // memory address of first block
apust.timer->enable();
- apust.timer->adjust(attotime::from_msec(1),0,attotime::from_msec(1));
+ apust.timer->adjust(attotime::from_msec(1), 0, attotime::from_msec(1));
}
if (offset == 0x02048 / 4) // (epdsp scratch dma)
- apust.epdsp_sgaddress=data;
+ apust.epdsp_sgaddress = data;
if (offset == 0x020dc / 4) // (epdsp)
- apust.epdsp_sgblocks=data;
+ apust.epdsp_sgblocks = data;
if (offset == 0x0204c / 4) // address of memory area with information about blocks
apust.unknown_sgaddress = data;
if (offset == 0x020e0 / 4) // block count - 1
@@ -4574,15 +1149,15 @@ WRITE32_MEMBER( chihiro_state::audio_apu_w )
return;
if (offset == 0x20304 / 4) { // format
/*
- bits 28-31 sample format:
- 0 8-bit pcm
- 5 16-bit pcm
- 10 adpcm ?
- 14 24-bit pcm
- 15 32-bit pcm
- bits 16-20 number of channels - 1:
- 0 mono
- 1 stereo
+ bits 28-31 sample format:
+ 0 8-bit pcm
+ 5 16-bit pcm
+ 10 adpcm ?
+ 14 24-bit pcm
+ 15 32-bit pcm
+ bits 16-20 number of channels - 1:
+ 0 mono
+ 1 stereo
*/
return;
}
@@ -4597,11 +1172,11 @@ WRITE32_MEMBER( chihiro_state::audio_apu_w )
if (offset == 0x203a0 / 4) // start offset of data in scatter-gather heap
return;
if (offset == 0x203a4 / 4) { // first sample to play
- apust.voices_position_start[apust.voice_number] = data*1000;
+ apust.voices_position_start[apust.voice_number] = data * 1000;
return;
}
if (offset == 0x203dc / 4) { // last sample to play
- apust.voices_position_end[apust.voice_number] = data*1000;
+ apust.voices_position_end[apust.voice_number] = data * 1000;
return;
}
if (offset == 0x2010c / 4) // voice processor 0 idle 1 not idle ?
@@ -4626,46 +1201,46 @@ WRITE32_MEMBER( chihiro_state::audio_apu_w )
return;
}
-READ32_MEMBER( chihiro_state::audio_ac93_r )
+READ32_MEMBER(chihiro_state::audio_ac93_r)
{
- UINT32 ret=0;
+ UINT32 ret = 0;
- logerror("Audio_AC3: read from %08X mask %08X\n",0xfec00000+offset*4,mem_mask);
- if (offset < 0x80/4)
+ logerror("Audio_AC3: read from %08X mask %08X\n", 0xfec00000 + offset * 4, mem_mask);
+ if (offset < 0x80 / 4)
{
- ret=ac97st.mixer_regs[offset];
+ ret = ac97st.mixer_regs[offset];
}
- if ((offset >= 0x100/4) && (offset <= 0x138/4))
+ if ((offset >= 0x100 / 4) && (offset <= 0x138 / 4))
{
- offset=offset-0x100/4;
- if (offset == 0x18/4)
+ offset = offset - 0x100 / 4;
+ if (offset == 0x18 / 4)
{
ac97st.controller_regs[offset] &= ~0x02000000; // REGRST: register reset
}
- if (offset == 0x30/4)
+ if (offset == 0x30 / 4)
{
ac97st.controller_regs[offset] |= 0x100; // PCRDY: primary codec ready
}
- if (offset == 0x34/4)
+ if (offset == 0x34 / 4)
{
ac97st.controller_regs[offset] &= ~1; // CAS: codec access semaphore
}
- ret=ac97st.controller_regs[offset];
+ ret = ac97st.controller_regs[offset];
}
return ret;
}
-WRITE32_MEMBER( chihiro_state::audio_ac93_w )
+WRITE32_MEMBER(chihiro_state::audio_ac93_w)
{
- logerror("Audio_AC3: write at %08X mask %08X value %08X\n",0xfec00000+offset*4,mem_mask,data);
- if (offset < 0x80/4)
+ logerror("Audio_AC3: write at %08X mask %08X value %08X\n", 0xfec00000 + offset * 4, mem_mask, data);
+ if (offset < 0x80 / 4)
{
- COMBINE_DATA(ac97st.mixer_regs+offset);
+ COMBINE_DATA(ac97st.mixer_regs + offset);
}
- if ((offset >= 0x100/4) && (offset <= 0x138/4))
+ if ((offset >= 0x100 / 4) && (offset <= 0x138 / 4))
{
- offset=offset-0x100/4;
- COMBINE_DATA(ac97st.controller_regs+offset);
+ offset = offset - 0x100 / 4;
+ COMBINE_DATA(ac97st.controller_regs + offset);
}
}
@@ -4676,11 +1251,11 @@ TIMER_CALLBACK_MEMBER(chihiro_state::audio_apu_timer)
UINT64 bv;
UINT32 phys;
- cmd=apust.space->read_dword(apust.gpdsp_address+0x800+0x10);
+ cmd = apust.space->read_dword(apust.gpdsp_address + 0x800 + 0x10);
if (cmd == 3)
- apust.space->write_dword(apust.gpdsp_address+0x800+0x10,0);
+ apust.space->write_dword(apust.gpdsp_address + 0x800 + 0x10, 0);
/*else
- logerror("Audio_APU: unexpected value at address %d\n",apust.gpdsp_address+0x800+0x10);*/
+ logerror("Audio_APU: unexpected value at address %d\n",apust.gpdsp_address+0x800+0x10);*/
for (b = 0; b < 4; b++) {
bv = 1;
for (bb = 0; bb < 64; bb++) {
@@ -4704,7 +1279,7 @@ TIMER_CALLBACK_MEMBER(chihiro_state::audio_apu_timer)
static UINT32 dummy_pci_r(device_t *busdevice, device_t *device, int function, int reg, UINT32 mem_mask)
{
#ifdef LOG_PCI
-// logerror(" bus:0 function:%d register:%d mask:%08X\n",function,reg,mem_mask);
+ // logerror(" bus:0 function:%d register:%d mask:%08X\n",function,reg,mem_mask);
#endif
return 0;
}
@@ -4712,16 +1287,16 @@ static UINT32 dummy_pci_r(device_t *busdevice, device_t *device, int function, i
static void dummy_pci_w(device_t *busdevice, device_t *device, int function, int reg, UINT32 data, UINT32 mem_mask)
{
#ifdef LOG_PCI
- if (reg >= 16) logerror(" bus:0 function:%d register:%d data:%08X mask:%08X\n",function,reg,data,mem_mask);
+ if (reg >= 16) logerror(" bus:0 function:%d register:%d data:%08X mask:%08X\n", function, reg, data, mem_mask);
#endif
}
-READ32_MEMBER( chihiro_state::dummy_r )
+READ32_MEMBER(chihiro_state::dummy_r)
{
return 0;
}
-WRITE32_MEMBER( chihiro_state::dummy_w )
+WRITE32_MEMBER(chihiro_state::dummy_w)
{
}
@@ -4767,7 +1342,7 @@ ide_baseboard_device::ide_baseboard_device(const machine_config &mconfig, const
void ide_baseboard_device::device_start()
{
ata_mass_storage_device::device_start();
- chihirosystem=machine().driver_data<chihiro_state>();
+ chihirosystem = machine().driver_data<chihiro_state>();
// savestates
save_item(NAME(read_buffer));
save_item(NAME(write_buffer));
@@ -4781,9 +1356,9 @@ void ide_baseboard_device::device_reset()
{
if (!m_can_identify_device)
{
- m_num_cylinders=65535;
- m_num_sectors=255;
- m_num_heads=255;
+ m_num_cylinders = 65535;
+ m_num_sectors = 255;
+ m_num_heads = 255;
ide_build_identify_device();
m_can_identify_device = 1;
}
@@ -4798,58 +1373,58 @@ int ide_baseboard_device::read_sector(UINT32 lba, void *buffer)
/*
It assumes there are 4 "partitions", the size of the first one depends on bits 3-0 of io port 40f4:
- Value Size lba
- 0 0x40000-0x8000
- ...
- 4 0x400000-0x8000
+ Value Size lba
+ 0 0x40000-0x8000
+ ...
+ 4 0x400000-0x8000
The size of the second one is always 0x8000 sectors, and is used as a special communication area
This is a list of the partitions in the minimum size case:
- Name Start lba Size lba Size
- \??\mbfs: 0x0 0x38000 112MB
- \??\mbcom: 0x38000 0x8000 16MB
- \??\mbrom0: 0x8000000 0x800 1MB
- \??\mbrom1: 0x8000800 0x800 1MB
+ Name Start lba Size lba Size
+ \??\mbfs: 0x0 0x38000 112MB
+ \??\mbcom: 0x38000 0x8000 16MB
+ \??\mbrom0: 0x8000000 0x800 1MB
+ \??\mbrom1: 0x8000800 0x800 1MB
This is a list of the partitions in the maximum size case:
- Name Start lba Size lba Size
- \??\mbfs: 0x0 0x3f8000 2032MB
- \??\mbcom: 0x3f8000 0x8000 16MB
- \??\mbrom0: 0x8000000 0x800 1MB
- \??\mbrom1: 0x8000800 0x800 1MB
+ Name Start lba Size lba Size
+ \??\mbfs: 0x0 0x3f8000 2032MB
+ \??\mbcom: 0x3f8000 0x8000 16MB
+ \??\mbrom0: 0x8000000 0x800 1MB
+ \??\mbrom1: 0x8000800 0x800 1MB
*/
- logerror("baseboard: read sector lba %08x\n",lba);
+ logerror("baseboard: read sector lba %08x\n", lba);
if (lba >= 0x08000000) {
- off=(lba&0x7ff)*512;
- data=memregion(":others")->base();
- memcpy(buffer,data+off,512);
+ off = (lba & 0x7ff) * 512;
+ data = memregion(":others")->base();
+ memcpy(buffer, data + off, 512);
return 1;
}
if (lba >= 0xf8000) {
- memset(buffer,0,512);
- lba=lba-0xf8000;
+ memset(buffer, 0, 512);
+ lba = lba - 0xf8000;
if (lba == 0x4800)
- memcpy(buffer,read_buffer,0x20);
+ memcpy(buffer, read_buffer, 0x20);
else if (lba == 0x4801)
- memcpy(buffer,write_buffer,0x20);
+ memcpy(buffer, write_buffer, 0x20);
return 1;
}
// in a type 1 chihiro this gets data from the dimm board memory
- data=chihirosystem->baseboard_ide_dimmboard(lba);
+ data = chihirosystem->baseboard_ide_dimmboard(lba);
if (data != NULL)
- memcpy(buffer,data,512);
+ memcpy(buffer, data, 512);
return 1;
}
int ide_baseboard_device::write_sector(UINT32 lba, const void *buffer)
{
- logerror("baseboard: write sector lba %08x\n",lba);
+ logerror("baseboard: write sector lba %08x\n", lba);
if (lba >= 0xf8000) {
- lba=lba-0xf8000;
+ lba = lba - 0xf8000;
if (lba == 0x4800)
- memcpy(read_buffer,buffer,0x20);
+ memcpy(read_buffer, buffer, 0x20);
else if (lba == 0x4801) {
- memcpy(write_buffer,buffer,0x20);
+ memcpy(write_buffer, buffer, 0x20);
// call chihiro driver
- chihirosystem->baseboard_ide_event(3,read_buffer,write_buffer);
+ chihirosystem->baseboard_ide_event(3, read_buffer, write_buffer);
}
}
return 1;
@@ -4859,21 +1434,21 @@ int ide_baseboard_device::write_sector(UINT32 lba, const void *buffer)
* Chihiro Type 1 baseboard
*/
-void chihiro_state::dword_write_le(UINT8 *addr,UINT32 d)
+void chihiro_state::dword_write_le(UINT8 *addr, UINT32 d)
{
- addr[0]=d & 255;
- addr[1]=(d >> 8) & 255;
- addr[2]=(d >> 16) & 255;
- addr[3]=(d >> 24) & 255;
+ addr[0] = d & 255;
+ addr[1] = (d >> 8) & 255;
+ addr[2] = (d >> 16) & 255;
+ addr[3] = (d >> 24) & 255;
}
-void chihiro_state::word_write_le(UINT8 *addr,UINT16 d)
+void chihiro_state::word_write_le(UINT8 *addr, UINT16 d)
{
- addr[0]=d & 255;
- addr[1]=(d >> 8) & 255;
+ addr[0] = d & 255;
+ addr[1] = (d >> 8) & 255;
}
-void chihiro_state::baseboard_ide_event(int type,UINT8 *read_buffer,UINT8 *write_buffer)
+void chihiro_state::baseboard_ide_event(int type, UINT8 *read_buffer, UINT8 *write_buffer)
{
int c;
@@ -4881,44 +1456,44 @@ void chihiro_state::baseboard_ide_event(int type,UINT8 *read_buffer,UINT8 *write
return;
#ifdef LOG_BASEBOARD
logerror("Baseboard sector command:\n");
- for (int a=0;a < 32;a++)
- logerror(" %02X",write_buffer[a]);
+ for (int a = 0; a < 32; a++)
+ logerror(" %02X", write_buffer[a]);
logerror("\n");
#endif
// response
// second word 8001 (8000+counter), first word=first word of written data (command ?), second dword ?
- read_buffer[0]=write_buffer[0];
- read_buffer[1]=write_buffer[1];
- read_buffer[2]=0x01; // write_buffer[2];
- read_buffer[3]=0x80; // write_buffer[3] | 0x80;
- c=write_buffer[2]+(write_buffer[3] << 8); // 0001 0101 0103
+ read_buffer[0] = write_buffer[0];
+ read_buffer[1] = write_buffer[1];
+ read_buffer[2] = 0x01; // write_buffer[2];
+ read_buffer[3] = 0x80; // write_buffer[3] | 0x80;
+ c = write_buffer[2] + (write_buffer[3] << 8); // 0001 0101 0103
switch (c)
{
- case 0x0001:
- // second dword
- dword_write_le(read_buffer+4,0x00f00000); // ?
- break;
- case 0x0100:
- // second dword third dword
- dword_write_le(read_buffer+4,5); // game data loading phase
- dword_write_le(read_buffer+8,0); // completion %
- break;
- case 0x0101:
- // third word fourth word
- word_write_le(read_buffer+4,0xca); // ?
- word_write_le(read_buffer+6,0xcb); // ?
- break;
- case 0x0102:
- // second dword
- dword_write_le(read_buffer+4,0); // bit 16 develop. mode
- break;
- case 0x0103:
- // dwords 1 3 4
- memcpy(read_buffer+4,"-abc-abc12345678",16); // ?
- break;
+ case 0x0001:
+ // second dword
+ dword_write_le(read_buffer + 4, 0x00f00000); // ?
+ break;
+ case 0x0100:
+ // second dword third dword
+ dword_write_le(read_buffer + 4, 5); // game data loading phase
+ dword_write_le(read_buffer + 8, 0); // completion %
+ break;
+ case 0x0101:
+ // third word fourth word
+ word_write_le(read_buffer + 4, 0xca); // ?
+ word_write_le(read_buffer + 6, 0xcb); // ?
+ break;
+ case 0x0102:
+ // second dword
+ dword_write_le(read_buffer + 4, 0); // bit 16 develop. mode
+ break;
+ case 0x0103:
+ // dwords 1 3 4
+ memcpy(read_buffer + 4, "-abc-abc12345678", 16); // ?
+ break;
}
// clear
- write_buffer[0]=write_buffer[1]=write_buffer[2]=write_buffer[3]=0;
+ write_buffer[0] = write_buffer[1] = write_buffer[2] = write_buffer[3] = 0;
// irq 10 active
chihiro_devs.pic8259_2->ir2_w(1);
}
@@ -4927,7 +1502,7 @@ UINT8 *chihiro_state::baseboard_ide_dimmboard(UINT32 lba)
{
// return pointer to memory containing decrypted gdrom data (contains an image of a fatx partition)
if (chihiro_devs.dimmboard != NULL)
- return dimm_board_memory+lba*512;
+ return dimm_board_memory + lba * 512;
return NULL;
}
@@ -4942,7 +1517,7 @@ WRITE_LINE_MEMBER(chihiro_state::chihiro_pic8259_1_set_int_line)
READ8_MEMBER(chihiro_state::get_slave_ack)
{
- if (offset==2) { // IRQ = 2
+ if (offset == 2) { // IRQ = 2
return chihiro_devs.pic8259_2->acknowledge();
}
return 0x00;
@@ -4952,18 +1527,18 @@ IRQ_CALLBACK_MEMBER(chihiro_state::irq_callback)
{
int r = 0;
r = chihiro_devs.pic8259_2->acknowledge();
- if (r==0)
+ if (r == 0)
{
r = chihiro_devs.pic8259_1->acknowledge();
}
if (debug_irq_active)
- debug_generate_irq(debug_irq_number,false);
+ debug_generate_irq(debug_irq_number, false);
return r;
}
WRITE_LINE_MEMBER(chihiro_state::chihiro_pit8254_out0_changed)
{
- if ( chihiro_devs.pic8259_1 )
+ if (chihiro_devs.pic8259_1)
{
chihiro_devs.pic8259_1->ir0_w(state);
}
@@ -4978,41 +1553,42 @@ WRITE_LINE_MEMBER(chihiro_state::chihiro_pit8254_out2_changed)
* SMbus devices
*/
-int smbus_callback_pic16lc(chihiro_state &chs,int command,int rw,int data)
+int smbus_callback_pic16lc(chihiro_state &chs, int command, int rw, int data)
{
return chs.smbus_pic16lc(command, rw, data);
}
-int chihiro_state::smbus_pic16lc(int command,int rw,int data)
+int chihiro_state::smbus_pic16lc(int command, int rw, int data)
{
if (rw == 1) { // read
if (command == 0) {
if (pic16lc_buffer[0] == 'D')
- pic16lc_buffer[0]='X';
+ pic16lc_buffer[0] = 'X';
else if (pic16lc_buffer[0] == 'X')
- pic16lc_buffer[0]='B';
+ pic16lc_buffer[0] = 'B';
else if (pic16lc_buffer[0] == 'B')
- pic16lc_buffer[0]='D';
+ pic16lc_buffer[0] = 'D';
}
- logerror("pic16lc: %d %d %d\n",command,rw,pic16lc_buffer[command]);
+ logerror("pic16lc: %d %d %d\n", command, rw, pic16lc_buffer[command]);
return pic16lc_buffer[command];
- } else
+ }
+ else
if (command == 0)
- pic16lc_buffer[0]='B';
+ pic16lc_buffer[0] = 'B';
else
- pic16lc_buffer[command]=(UINT8)data;
- logerror("pic16lc: %d %d %d\n",command,rw,data);
+ pic16lc_buffer[command] = (UINT8)data;
+ logerror("pic16lc: %d %d %d\n", command, rw, data);
return 0;
}
-int smbus_callback_cx25871(chihiro_state &chs,int command,int rw,int data)
+int smbus_callback_cx25871(chihiro_state &chs, int command, int rw, int data)
{
return chs.smbus_cx25871(command, rw, data);
}
-int chihiro_state::smbus_cx25871(int command,int rw,int data)
+int chihiro_state::smbus_cx25871(int command, int rw, int data)
{
- logerror("cx25871: %d %d %d\n",command,rw,data);
+ logerror("cx25871: %d %d %d\n", command, rw, data);
return 0;
}
@@ -5023,12 +1599,12 @@ static int dummyeeprom[256]={0x94,0x18,0x10,0x59,0x83,0x58,0x15,0xDA,0xDF,0xCC,0
0x4F,0x6E,0x6C,0x69,0x6E,0x65,0x6B,0x65,0x79,0x69,0x6E,0x76,0x61,0x6C,0x69,0x64,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,
0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
-int smbus_callback_eeprom(chihiro_state &chs,int command,int rw,int data)
+int smbus_callback_eeprom(chihiro_state &chs, int command, int rw, int data)
{
return chs.smbus_eeprom(command, rw, data);
}
-int chihiro_state::smbus_eeprom(int command,int rw,int data)
+int chihiro_state::smbus_eeprom(int command, int rw, int data)
{
if (command >= 112)
return 0;
@@ -5037,17 +1613,17 @@ int chihiro_state::smbus_eeprom(int command,int rw,int data)
// hack to avoid hanging if eeprom contents are not correct
// this would need dumping the serial eeprom on the xbox board
if (command == 0) {
- m_maincpu->space(0).write_byte(0x3b744,0x90);
- m_maincpu->space(0).write_byte(0x3b745,0x90);
- m_maincpu->space(0).write_byte(0x3b766,0xc9);
- m_maincpu->space(0).write_byte(0x3b767,0xc3);
+ m_maincpu->space(0).write_byte(0x3b744, 0x90);
+ m_maincpu->space(0).write_byte(0x3b745, 0x90);
+ m_maincpu->space(0).write_byte(0x3b766, 0xc9);
+ m_maincpu->space(0).write_byte(0x3b767, 0xc3);
}
- data = dummyeeprom[command]+dummyeeprom[command+1]*256;
- logerror("eeprom: %d %d %d\n",command,rw,data);
+ data = dummyeeprom[command] + dummyeeprom[command + 1] * 256;
+ logerror("eeprom: %d %d %d\n", command, rw, data);
return data;
}
- logerror("eeprom: %d %d %d\n",command,rw,data);
- dummyeeprom[command]=data;
+ logerror("eeprom: %d %d %d\n", command, rw, data);
+ dummyeeprom[command] = data;
return 0;
}
@@ -5055,13 +1631,13 @@ int chihiro_state::smbus_eeprom(int command,int rw,int data)
* SMbus controller
*/
-void chihiro_state::smbus_register_device(int address,int (*handler)(chihiro_state &chs,int command,int rw,int data))
+void chihiro_state::smbus_register_device(int address, int(*handler)(chihiro_state &chs, int command, int rw, int data))
{
if (address < 128)
- smbusst.devices[address]=handler;
+ smbusst.devices[address] = handler;
}
-READ32_MEMBER( chihiro_state::smbus_r )
+READ32_MEMBER(chihiro_state::smbus_r)
{
if ((offset == 0) && (mem_mask == 0xff)) // 0 smbus status
smbusst.words[offset] = (smbusst.words[offset] & ~mem_mask) | ((smbusst.status << 0) & mem_mask);
@@ -5070,7 +1646,7 @@ READ32_MEMBER( chihiro_state::smbus_r )
return smbusst.words[offset];
}
-WRITE32_MEMBER( chihiro_state::smbus_w )
+WRITE32_MEMBER(chihiro_state::smbus_w)
{
COMBINE_DATA(smbusst.words);
if ((offset == 0) && (mem_mask == 0xff)) // 0 smbus status
@@ -5081,7 +1657,7 @@ WRITE32_MEMBER( chihiro_state::smbus_w )
}
if ((offset == 0) && (mem_mask == 0xff0000)) // 2 smbus control
{
- data=data>>16;
+ data = data >> 16;
smbusst.control = data;
int cycletype = smbusst.control & 7;
if (smbusst.control & 8) { // start
@@ -5089,11 +1665,11 @@ WRITE32_MEMBER( chihiro_state::smbus_w )
{
if (smbusst.devices[smbusst.address])
if (smbusst.rw == 0)
- smbusst.devices[smbusst.address](*this,smbusst.command,smbusst.rw,smbusst.data);
+ smbusst.devices[smbusst.address](*this, smbusst.command, smbusst.rw, smbusst.data);
else
- smbusst.data=smbusst.devices[smbusst.address](*this,smbusst.command,smbusst.rw,smbusst.data);
+ smbusst.data = smbusst.devices[smbusst.address](*this, smbusst.command, smbusst.rw, smbusst.data);
else
- logerror("SMBUS: access to missing device at address %d\n",smbusst.address);
+ logerror("SMBUS: access to missing device at address %d\n", smbusst.address);
smbusst.status |= 0x10;
if (smbusst.control & 0x10)
{
@@ -5109,43 +1685,43 @@ WRITE32_MEMBER( chihiro_state::smbus_w )
}
if ((offset == 1) && ((mem_mask == 0x00ff0000) || (mem_mask == 0xffff0000))) // 6 smbus data
{
- data=data>>16;
+ data = data >> 16;
smbusst.data = data;
}
if ((offset == 2) && (mem_mask == 0xff)) // 8 smbus command
smbusst.command = data;
}
-READ32_MEMBER( chihiro_state::mediaboard_r )
+READ32_MEMBER(chihiro_state::mediaboard_r)
{
UINT32 r;
- logerror("I/O port read %04x mask %08X\n",offset*4+0x4000,mem_mask);
- r=0;
+ logerror("I/O port read %04x mask %08X\n", offset * 4 + 0x4000, mem_mask);
+ r = 0;
if ((offset == 7) && ACCESSING_BITS_16_31)
- r=0x10000000;
+ r = 0x10000000;
if ((offset == 8) && ACCESSING_BITS_0_15)
- r=0x000000a0;
+ r = 0x000000a0;
if ((offset == 8) && ACCESSING_BITS_16_31)
- r=0x42580000;
+ r = 0x42580000;
if ((offset == 9) && ACCESSING_BITS_0_15)
- r=0x00004d41;
+ r = 0x00004d41;
if ((offset == 0x3c) && ACCESSING_BITS_0_15)
- r=0x00000000; // bits 15-0 0 if media board present
+ r = 0x00000000; // bits 15-0 0 if media board present
if ((offset == 0x3d) && ACCESSING_BITS_0_15)
- r=0x00000002; // bits 3-0 size of dimm board memory. Must be 2
+ r = 0x00000002; // bits 3-0 size of dimm board memory. Must be 2
return r;
}
-WRITE32_MEMBER( chihiro_state::mediaboard_w )
+WRITE32_MEMBER(chihiro_state::mediaboard_w)
{
- logerror("I/O port write %04x mask %08X value %08X\n",offset*4+0x4000,mem_mask,data);
+ logerror("I/O port write %04x mask %08X value %08X\n", offset * 4 + 0x4000, mem_mask, data);
// irq 10
if ((offset == 0x38) && ACCESSING_BITS_8_15)
chihiro_devs.pic8259_2->ir2_w(0);
}
-static ADDRESS_MAP_START( xbox_map, AS_PROGRAM, 32, chihiro_state )
+static ADDRESS_MAP_START(xbox_map, AS_PROGRAM, 32, chihiro_state)
AM_RANGE(0x00000000, 0x07ffffff) AM_RAM // 128 megabytes
AM_RANGE(0xf0000000, 0xf0ffffff) AM_RAM
AM_RANGE(0xfd000000, 0xfdffffff) AM_RAM AM_READWRITE(geforce_r, geforce_w)
@@ -5155,7 +1731,7 @@ static ADDRESS_MAP_START( xbox_map, AS_PROGRAM, 32, chihiro_state )
AM_RANGE(0xff000000, 0xffffffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000)
ADDRESS_MAP_END
-static ADDRESS_MAP_START(xbox_map_io, AS_IO, 32, chihiro_state )
+static ADDRESS_MAP_START(xbox_map_io, AS_IO, 32, chihiro_state)
AM_RANGE(0x0020, 0x0023) AM_DEVREADWRITE8("pic8259_1", pic8259_device, read, write, 0xffffffff)
AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE8("pit8254", pit8254_device, read, write, 0xffffffff)
AM_RANGE(0x00a0, 0x00a3) AM_DEVREADWRITE8("pic8259_2", pic8259_device, read, write, 0xffffffff)
@@ -5167,24 +1743,24 @@ static ADDRESS_MAP_START(xbox_map_io, AS_IO, 32, chihiro_state )
AM_RANGE(0xff60, 0xff67) AM_DEVREADWRITE("ide", bus_master_ide_controller_device, bmdma_r, bmdma_w)
ADDRESS_MAP_END
-static INPUT_PORTS_START( chihiro )
+static INPUT_PORTS_START(chihiro)
INPUT_PORTS_END
void chihiro_state::machine_start()
{
- nvidia_nv2a=auto_alloc(machine(), nv2a_renderer(machine()));
- memset(pic16lc_buffer,0,sizeof(pic16lc_buffer));
- pic16lc_buffer[0]='B';
- pic16lc_buffer[4]=0; // A/V connector, 2=vga
- smbus_register_device(0x10,smbus_callback_pic16lc);
- smbus_register_device(0x45,smbus_callback_cx25871);
- smbus_register_device(0x54,smbus_callback_eeprom);
- chihiro_devs.pic8259_1 = machine().device<pic8259_device>( "pic8259_1" );
- chihiro_devs.pic8259_2 = machine().device<pic8259_device>( "pic8259_2" );
- chihiro_devs.ide = machine().device<bus_master_ide_controller_device>( "ide" );
- chihiro_devs.dimmboard=machine().device<naomi_gdrom_board>("rom_board");
+ nvidia_nv2a = auto_alloc(machine(), nv2a_renderer(machine()));
+ memset(pic16lc_buffer, 0, sizeof(pic16lc_buffer));
+ pic16lc_buffer[0] = 'B';
+ pic16lc_buffer[4] = 0; // A/V connector, 2=vga
+ smbus_register_device(0x10, smbus_callback_pic16lc);
+ smbus_register_device(0x45, smbus_callback_cx25871);
+ smbus_register_device(0x54, smbus_callback_eeprom);
+ chihiro_devs.pic8259_1 = machine().device<pic8259_device>("pic8259_1");
+ chihiro_devs.pic8259_2 = machine().device<pic8259_device>("pic8259_2");
+ chihiro_devs.ide = machine().device<bus_master_ide_controller_device>("ide");
+ chihiro_devs.dimmboard = machine().device<naomi_gdrom_board>("rom_board");
if (chihiro_devs.dimmboard != NULL) {
- dimm_board_memory=chihiro_devs.dimmboard->memory(dimm_board_memory_size);
+ dimm_board_memory = chihiro_devs.dimmboard->memory(dimm_board_memory_size);
}
memset(apust.memory, 0, sizeof(apust.memory));
memset(apust.voices_heap_blockaddr, 0, sizeof(apust.voices_heap_blockaddr));
@@ -5194,11 +1770,11 @@ void chihiro_state::machine_start()
memset(apust.voices_position_end, 0, sizeof(apust.voices_position_end));
memset(apust.voices_position_increment, 0, sizeof(apust.voices_position_increment));
apust.space = &m_maincpu->space();
- apust.timer=machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(chihiro_state::audio_apu_timer),this),(void *)"APU Timer");
+ apust.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(chihiro_state::audio_apu_timer), this), (void *)"APU Timer");
apust.timer->enable(false);
if (machine().debug_flags & DEBUG_FLAG_ENABLED)
- debug_console_register_command(machine(),"chihiro",CMDFLAG_NONE,0,1,4,chihiro_debug_commands);
- usbhack_counter=0;
+ debug_console_register_command(machine(), "chihiro", CMDFLAG_NONE, 0, 1, 4, chihiro_debug_commands);
+ usbhack_counter = 0;
// savestates
save_item(NAME(debug_irq_active));
save_item(NAME(debug_irq_number));
@@ -5218,13 +1794,13 @@ static SLOT_INTERFACE_START(ide_baseboard)
SLOT_INTERFACE("bb", IDE_BASEBOARD)
SLOT_INTERFACE_END
-static MACHINE_CONFIG_START( chihiro_base, chihiro_state )
+static MACHINE_CONFIG_START(chihiro_base, chihiro_state)
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", PENTIUM3, 733333333) /* Wrong! family 6 model 8 stepping 10 */
MCFG_CPU_PROGRAM_MAP(xbox_map)
MCFG_CPU_IO_MAP(xbox_map_io)
- MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(chihiro_state,irq_callback)
+ MCFG_CPU_IRQ_ACKNOWLEDGE_DRIVER(chihiro_state, irq_callback)
MCFG_QUANTUM_TIME(attotime::from_hz(6000))
@@ -5241,8 +1817,8 @@ static MACHINE_CONFIG_START( chihiro_base, chihiro_state )
MCFG_PCI_BUS_LEGACY_ADD("agpbus", 1)
MCFG_PCI_BUS_LEGACY_SIBLING("pcibus")
MCFG_PCI_BUS_LEGACY_DEVICE(0, "NV2A GeForce 3MX Integrated GPU/Northbridge", geforce_pci_r, geforce_pci_w)
- MCFG_PIC8259_ADD( "pic8259_1", WRITELINE(chihiro_state, chihiro_pic8259_1_set_int_line), VCC, READ8(chihiro_state,get_slave_ack) )
- MCFG_PIC8259_ADD( "pic8259_2", DEVWRITELINE("pic8259_1", pic8259_device, ir2_w), GND, NULL )
+ MCFG_PIC8259_ADD("pic8259_1", WRITELINE(chihiro_state, chihiro_pic8259_1_set_int_line), VCC, READ8(chihiro_state, get_slave_ack))
+ MCFG_PIC8259_ADD("pic8259_2", DEVWRITELINE("pic8259_1", pic8259_device, ir2_w), GND, NULL)
MCFG_DEVICE_ADD("pit8254", PIT8254, 0)
MCFG_PIT8253_CLK0(1125000) /* heartbeat IRQ */
@@ -5251,7 +1827,7 @@ static MACHINE_CONFIG_START( chihiro_base, chihiro_state )
MCFG_PIT8253_CLK2(1125000) /* (unused) pio port c pin 4, and speaker polling enough */
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(chihiro_state, chihiro_pit8254_out2_changed))
- MCFG_BUS_MASTER_IDE_CONTROLLER_ADD( "ide", ide_baseboard, NULL, "bb", true)
+ MCFG_BUS_MASTER_IDE_CONTROLLER_ADD("ide", ide_baseboard, NULL, "bb", true)
MCFG_ATA_INTERFACE_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
MCFG_BUS_MASTER_IDE_CONTROLLER_SPACE("maincpu", AS_PROGRAM)
@@ -5261,13 +1837,13 @@ static MACHINE_CONFIG_START( chihiro_base, chihiro_state )
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
MCFG_SCREEN_SIZE(640, 480)
MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479)
- MCFG_SCREEN_UPDATE_DRIVER(chihiro_state,screen_update_callback)
- MCFG_SCREEN_VBLANK_DRIVER(chihiro_state,vblank_callback)
+ MCFG_SCREEN_UPDATE_DRIVER(chihiro_state, screen_update_callback)
+ MCFG_SCREEN_VBLANK_DRIVER(chihiro_state, vblank_callback)
MCFG_PALETTE_ADD("palette", 65536)
MACHINE_CONFIG_END
-static MACHINE_CONFIG_DERIVED( chihirogd, chihiro_base )
+static MACHINE_CONFIG_DERIVED(chihirogd, chihiro_base)
MCFG_NAOMI_GDROM_BOARD_ADD("rom_board", ":gdrom", ":pic", NULL, NOOP)
MACHINE_CONFIG_END
diff --git a/src/mame/drivers/cps1.c b/src/mame/drivers/cps1.c
index 1bd2918c13c..b7dba20172e 100644
--- a/src/mame/drivers/cps1.c
+++ b/src/mame/drivers/cps1.c
@@ -548,7 +548,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, cps_state )
AM_RANGE(0x800030, 0x800037) AM_WRITE(cps1_coinctrl_w)
/* Forgotten Worlds has dial controls on B-board mapped at 800040-80005f. See DRIVER_INIT */
AM_RANGE(0x800100, 0x80013f) AM_WRITE(cps1_cps_a_w) AM_SHARE("cps_a_regs") /* CPS-A custom */
- /* CPS-B custom is mapped by the PAL IOB2 on the B-board. SF2 revision "E" World and USA 910228 has it a a different
+ /* CPS-B custom is mapped by the PAL IOB2 on the B-board. SF2 revision "E" World and USA 910228 has it at a different
address, see DRIVER_INIT */
AM_RANGE(0x800140, 0x80017f) AM_READWRITE(cps1_cps_b_r, cps1_cps_b_w) AM_SHARE("cps_b_regs")
AM_RANGE(0x800180, 0x800187) AM_WRITE(cps1_soundlatch_w) /* Sound command */
diff --git a/src/mame/drivers/crystal.c b/src/mame/drivers/crystal.c
index a0025cb88ea..68cddd5e6eb 100644
--- a/src/mame/drivers/crystal.c
+++ b/src/mame/drivers/crystal.c
@@ -1054,7 +1054,7 @@ DRIVER_INIT_MEMBER(crystal_state,evosocc)
The PIC uses a software UART bit banged on a single output pin of the main CPU:
the data port is bit 0x20000000 on the PIO register, the same register where the EEPROM control lines are. The serial data is transmitted at 8 data bits, even parity, 1 stop bit. It's probably
-tricky to get it working properly because it doesn't rely on a clock signal, and so, the pic and main cpu must run in in parallel, and the bit lengths must match. The pic bit delay routine is just a loop.
+tricky to get it working properly because it doesn't rely on a clock signal, and so, the pic and main cpu must run in parallel, and the bit lengths must match. The pic bit delay routine is just a loop.
also it seems that bit 0x40000000 is the PIC reset.
*/
diff --git a/src/mame/drivers/cultures.c b/src/mame/drivers/cultures.c
index deb02ac90e3..7390655a247 100644
--- a/src/mame/drivers/cultures.c
+++ b/src/mame/drivers/cultures.c
@@ -11,6 +11,7 @@
#include "emu.h"
#include "cpu/z80/z80.h"
#include "sound/okim6295.h"
+#include "machine/bankdev.h"
#define MCLK 16000000
@@ -19,19 +20,33 @@ class cultures_state : public driver_device
public:
cultures_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_vrambank(*this, "vrambank"),
+ m_prgbank(*this, "prgbank"),
+ m_okibank(*this, "okibank"),
+ m_bg1_rom(*this, "bg1"),
+ m_bg2_rom(*this, "bg2"),
m_bg0_videoram(*this, "bg0_videoram"),
m_bg0_regs_x(*this, "bg0_regs_x"),
m_bg0_regs_y(*this, "bg0_regs_y"),
m_bg1_regs_x(*this, "bg1_regs_x"),
m_bg1_regs_y(*this, "bg1_regs_y"),
m_bg2_regs_x(*this, "bg2_regs_x"),
- m_bg2_regs_y(*this, "bg2_regs_y"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_bg2_regs_y(*this, "bg2_regs_y")
+ { }
+
+ /* devices */
+ required_device<cpu_device> m_maincpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<address_map_bank_device> m_vrambank;
+ required_memory_bank m_prgbank;
+ required_memory_bank m_okibank;
- UINT8 m_paletteram[0x4000];
/* memory pointers */
+ required_region_ptr<UINT16> m_bg1_rom;
+ required_region_ptr<UINT16> m_bg2_rom;
+
required_shared_ptr<UINT8> m_bg0_videoram;
required_shared_ptr<UINT8> m_bg0_regs_x;
required_shared_ptr<UINT8> m_bg0_regs_y;
@@ -44,11 +59,9 @@ public:
tilemap_t *m_bg0_tilemap;
tilemap_t *m_bg1_tilemap;
tilemap_t *m_bg2_tilemap;
- int m_video_bank;
int m_irq_enable;
int m_bg1_bank;
int m_bg2_bank;
- int m_old_bank;
DECLARE_WRITE8_MEMBER(cpu_bankswitch_w);
DECLARE_WRITE8_MEMBER(bg0_videoram_w);
DECLARE_WRITE8_MEMBER(misc_w);
@@ -61,30 +74,25 @@ public:
virtual void video_start();
UINT32 screen_update_cultures(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(cultures_interrupt);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
};
TILE_GET_INFO_MEMBER(cultures_state::get_bg1_tile_info)
{
- UINT8 *region = memregion("gfx3")->base() + 0x200000 + 0x80000 * m_bg1_bank;
- int code = region[tile_index * 2] + (region[tile_index * 2 + 1] << 8);
- SET_TILE_INFO_MEMBER(2, code, code >> 12, 0);
+ int const code = m_bg1_rom[0x200000/2 + m_bg1_bank * 0x80000/2 + tile_index];
+ SET_TILE_INFO_MEMBER(1, code, code >> 12, 0);
}
TILE_GET_INFO_MEMBER(cultures_state::get_bg2_tile_info)
{
- UINT8 *region = memregion("gfx2")->base() + 0x200000 + 0x80000 * m_bg2_bank;
- int code = region[tile_index * 2] + (region[tile_index * 2 + 1] << 8);
- SET_TILE_INFO_MEMBER(1, code, code >> 12, 0);
+ int const code = m_bg2_rom[0x200000/2 + m_bg2_bank * 0x80000/2 + tile_index];
+ SET_TILE_INFO_MEMBER(2, code, code >> 12, 0);
}
TILE_GET_INFO_MEMBER(cultures_state::get_bg0_tile_info)
{
- int code = m_bg0_videoram[tile_index * 2] + (m_bg0_videoram[tile_index * 2 + 1] << 8);
+ int const code = m_bg0_videoram[tile_index * 2] + (m_bg0_videoram[tile_index * 2 + 1] << 8);
SET_TILE_INFO_MEMBER(0, code, code >> 12, 0);
}
@@ -97,13 +105,13 @@ void cultures_state::video_start()
m_bg1_tilemap->set_transparent_pen(0);
m_bg0_tilemap->set_transparent_pen(0);
- m_bg0_tilemap->set_scrolldx(502, 10);
- m_bg1_tilemap->set_scrolldx(502, 10);
- m_bg2_tilemap->set_scrolldx(502, 10);
+ m_bg0_tilemap->set_scrolldx(502, -118);
+ m_bg1_tilemap->set_scrolldx(502, -118);
+ m_bg2_tilemap->set_scrolldx(502, -118);
- m_bg0_tilemap->set_scrolldy(255, 0);
- m_bg1_tilemap->set_scrolldy(255, 0);
- m_bg2_tilemap->set_scrolldy(255, 0);
+ m_bg0_tilemap->set_scrolldy(255, -16);
+ m_bg1_tilemap->set_scrolldy(255, -16);
+ m_bg2_tilemap->set_scrolldy(255, -16);
}
UINT32 cultures_state::screen_update_cultures(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -137,46 +145,20 @@ UINT32 cultures_state::screen_update_cultures(screen_device &screen, bitmap_ind1
WRITE8_MEMBER(cultures_state::cpu_bankswitch_w)
{
- membank("bank1")->set_entry(data & 0x0f);
- m_video_bank = ~data & 0x20;
+ m_prgbank->set_entry(data & 0x0f);
+ m_vrambank->set_bank((data & 0x20)>>5);
}
+
WRITE8_MEMBER(cultures_state::bg0_videoram_w)
{
- if (m_video_bank == 0)
- {
- int r, g, b, datax;
- m_paletteram[offset] = data;
- offset >>= 1;
- datax = m_paletteram[offset * 2] + 256 * m_paletteram[offset * 2 + 1];
-
- r = ((datax >> 7) & 0x1e) | ((datax & 0x4000) ? 0x1 : 0);
- g = ((datax >> 3) & 0x1e) | ((datax & 0x2000) ? 0x1 : 0);
- b = ((datax << 1) & 0x1e) | ((datax & 0x1000) ? 0x1 : 0);
-
- m_palette->set_pen_color(offset, pal5bit(r), pal5bit(g), pal5bit(b));
- }
- else
- {
- m_bg0_videoram[offset] = data;
- m_bg0_tilemap->mark_tile_dirty(offset >> 1);
- }
+ m_bg0_videoram[offset] = data;
+ m_bg0_tilemap->mark_tile_dirty(offset >> 1);
}
WRITE8_MEMBER(cultures_state::misc_w)
{
- int new_bank = data & 0xf;
-
- if (m_old_bank != new_bank)
- {
- // oki banking
- UINT8 *src = memregion("oki")->base() + 0x40000 + 0x20000 * new_bank;
- UINT8 *dst = memregion("oki")->base() + 0x20000;
- memcpy(dst, src, 0x20000);
-
- m_old_bank = new_bank;
- }
-
+ m_okibank->set_entry(data&0x0f);
m_irq_enable = data & 0x80;
}
@@ -196,10 +178,21 @@ WRITE8_MEMBER(cultures_state::bg_bank_w)
coin_counter_w(machine(), 0, data & 0x10);
}
+
+static ADDRESS_MAP_START( oki_map, AS_0, 8, cultures_state )
+ AM_RANGE(0x00000, 0x1ffff) AM_ROM
+ AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
+ADDRESS_MAP_END
+
+static ADDRESS_MAP_START( vrambank_map, AS_PROGRAM, 8, cultures_state )
+ AM_RANGE(0x0000, 0x3fff) AM_RAM_WRITE(bg0_videoram_w) AM_SHARE("bg0_videoram")
+ AM_RANGE(0x4000, 0x6fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
+ADDRESS_MAP_END
+
static ADDRESS_MAP_START( cultures_map, AS_PROGRAM, 8, cultures_state )
AM_RANGE(0x0000, 0x3fff) AM_ROM
- AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
- AM_RANGE(0x8000, 0xbfff) AM_RAM_WRITE(bg0_videoram_w) AM_SHARE("bg0_videoram")
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("prgbank")
+ AM_RANGE(0x8000, 0xbfff) AM_DEVICE("vrambank", address_map_bank_device, amap8)
AM_RANGE(0xc000, 0xdfff) AM_RAM
AM_RANGE(0xf000, 0xffff) AM_RAM
ADDRESS_MAP_END
@@ -364,9 +357,9 @@ static const gfx_layout gfxlayout =
};
static GFXDECODE_START( culture )
- GFXDECODE_ENTRY("gfx1", 0, gfxlayout, 0x0000, 0x10 )
- GFXDECODE_ENTRY("gfx2", 0, gfxlayout, 0x1000, 0x10 )
- GFXDECODE_ENTRY("gfx3", 0, gfxlayout, 0x1000, 0x10 )
+ GFXDECODE_ENTRY("bg0", 0, gfxlayout, 0x0000, 16 )
+ GFXDECODE_ENTRY("bg1", 0, gfxlayout, 0x1000, 8 )
+ GFXDECODE_ENTRY("bg2", 0, gfxlayout, 0x1000, 8 )
GFXDECODE_END
INTERRUPT_GEN_MEMBER(cultures_state::cultures_interrupt)
@@ -377,13 +370,10 @@ INTERRUPT_GEN_MEMBER(cultures_state::cultures_interrupt)
void cultures_state::machine_start()
{
- UINT8 *ROM = memregion("maincpu")->base();
+ m_prgbank->configure_entries(0, 16, memregion("maincpu")->base(), 0x4000);
+ m_okibank->configure_entries(0, 0x200000 / 0x20000, memregion("oki")->base(), 0x20000);
+ m_okibank->set_entry(0);
- membank("bank1")->configure_entries(0, 16, &ROM[0x0000], 0x4000);
-
- save_item(NAME(m_paletteram));
- save_item(NAME(m_old_bank));
- save_item(NAME(m_video_bank));
save_item(NAME(m_irq_enable));
save_item(NAME(m_bg1_bank));
save_item(NAME(m_bg2_bank));
@@ -391,13 +381,15 @@ void cultures_state::machine_start()
void cultures_state::machine_reset()
{
- m_old_bank = -1;
- m_video_bank = 0;
+ m_okibank->set_entry(0);
+ m_vrambank->set_bank(1);
m_irq_enable = 0;
m_bg1_bank = 0;
m_bg2_bank = 0;
}
+
+
static MACHINE_CONFIG_START( cultures, cultures_state )
/* basic machine hardware */
@@ -406,6 +398,13 @@ static MACHINE_CONFIG_START( cultures, cultures_state )
MCFG_CPU_IO_MAP(cultures_io_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", cultures_state, cultures_interrupt)
+ MCFG_DEVICE_ADD("vrambank", ADDRESS_MAP_BANK, 0)
+ MCFG_DEVICE_PROGRAM_MAP(vrambank_map)
+ MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
+ MCFG_ADDRESS_MAP_BANK_DATABUS_WIDTH(8)
+ MCFG_ADDRESS_MAP_BANK_ADDRBUS_WIDTH(15)
+ MCFG_ADDRESS_MAP_BANK_STRIDE(0x4000)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -417,14 +416,16 @@ static MACHINE_CONFIG_START( cultures, cultures_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", culture)
- MCFG_PALETTE_ADD("palette", 0x2000)
-
+ MCFG_PALETTE_ADD("palette", 0x3000/2)
+ MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit0)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
- MCFG_OKIM6295_ADD("oki", (MCLK/1024)*132, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
+ MCFG_OKIM6295_ADD("oki", MCLK/8, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
+
MACHINE_CONFIG_END
/*
@@ -471,23 +472,23 @@ ROM_START( cultures )
ROM_REGION( 0x40000, "maincpu", 0 )
ROM_LOAD( "ma01.u12", 0x000000, 0x040000, CRC(f57417b3) SHA1(9a2a50222f54e5da9bc5c66863b8be16e33b171f) )
- ROM_REGION( 0x300000, "gfx1", 0 )
+ ROM_REGION( 0x400000, "bg0", ROMREGION_ERASE00 )
ROM_LOAD( "bg0c.u45", 0x000000, 0x200000, CRC(ad2e1263) SHA1(b28a3d82aaa0421a7b4df837814147b109e7d1a5) )
ROM_LOAD( "bg0c2.u46", 0x200000, 0x100000, CRC(97c71c09) SHA1(ffbcee1d9cb39d0824f3aa652c3a24579113cf2e) )
-
- ROM_REGION( 0x400000, "gfx2", ROMREGION_ERASE00 )
- ROM_LOAD( "bg1c.u80", 0x000000, 0x200000, CRC(9ab99bd9) SHA1(bce41b6f5d83c8262ba8d37b2dfcd5d7a5e7ace7) )
- ROM_LOAD( "bg2t.u79", 0x200000, 0x100000, CRC(0610a79f) SHA1(9fc6b2e5c573ed682b2f7fa462c8f42ff99da5ba) )
/* 0x300000 - 0x3fffff empty */
- ROM_REGION( 0x400000, "gfx3", ROMREGION_ERASE00 )
+ ROM_REGION16_LE( 0x400000, "bg1", ROMREGION_ERASE00 )
ROM_LOAD( "bg2c.u68", 0x000000, 0x200000, CRC(fa598644) SHA1(532249e456c34f18a787d5a028df82f2170f604d) )
ROM_LOAD( "bg1t.u67", 0x200000, 0x100000, CRC(d2e594ee) SHA1(a84b5ab62dec1867d433ccaeb1381e7593958cf0) )
/* 0x300000 - 0x3fffff empty */
- ROM_REGION( 0x240000, "oki", 0 )
- ROM_LOAD( "pcm.u87", 0x040000, 0x200000, CRC(84206475) SHA1(d1423bd5c7425e121fb4e7845cf57801e9afa7b3) )
- ROM_RELOAD( 0x000000, 0x020000 )
+ ROM_REGION16_LE( 0x400000, "bg2", ROMREGION_ERASE00 )
+ ROM_LOAD( "bg1c.u80", 0x000000, 0x200000, CRC(9ab99bd9) SHA1(bce41b6f5d83c8262ba8d37b2dfcd5d7a5e7ace7) )
+ ROM_LOAD( "bg2t.u79", 0x200000, 0x100000, CRC(0610a79f) SHA1(9fc6b2e5c573ed682b2f7fa462c8f42ff99da5ba) )
+ /* 0x300000 - 0x3fffff empty */
+
+ ROM_REGION( 0x200000, "oki", 0 )
+ ROM_LOAD( "pcm.u87", 0x000000, 0x200000, CRC(84206475) SHA1(d1423bd5c7425e121fb4e7845cf57801e9afa7b3) )
ROM_END
diff --git a/src/mame/drivers/dietgo.c b/src/mame/drivers/dietgo.c
index 029f1fece3b..3e8d714ec7c 100644
--- a/src/mame/drivers/dietgo.c
+++ b/src/mame/drivers/dietgo.c
@@ -142,7 +142,7 @@ static INPUT_PORTS_START( dietgo )
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) // Demo_Sounds ) )
- PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) // Players dont move in attract mode if on!?
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) // Players don't move in attract mode if on!?
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
diff --git a/src/mame/drivers/ecoinfr.c b/src/mame/drivers/ecoinfr.c
index 329cabd4734..bc3beda5ffb 100644
--- a/src/mame/drivers/ecoinfr.c
+++ b/src/mame/drivers/ecoinfr.c
@@ -1694,7 +1694,7 @@ GAME( 19??, ec_fltr, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, eco
GAME( 19??, ec_rdht7, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Red Hot 7 (MAB PCB?) (Concept Games Ltd) (?)" , GAME_FLAGS)
GAME( 19??, ec_unkt, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "unknown 'T' (MAB PCB?) (Concept Games Ltd) (?)" , GAME_FLAGS)
-//These look more like some variant of Astra Gaming hardware than the MAB PCB, but I can't be sure. Certainly they dont seem to be on the base hardware
+//These look more like some variant of Astra Gaming hardware than the MAB PCB, but I can't be sure. Certainly they don't seem to be on the base hardware
GAME( 19??, ec_gold7, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Golden 7 (Concept Games Ltd) (?)" , GAME_FLAGS)
GAME( 19??, ec_mgbel, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Megabell (Concept Games Ltd) (?)" , GAME_FLAGS)
GAME( 19??, ec_jackb, 0 , ecoinfr, ecoinfr_barx, ecoinfr_state, ecoinfrmab, ROT0, "Concept Games Ltd", "Jackpot Bars (MAB PCB?) (Concept Games Ltd) (?)" , GAME_FLAGS)
diff --git a/src/mame/drivers/gaelco3d.c b/src/mame/drivers/gaelco3d.c
index 5213e6d03e1..3618f876c80 100644
--- a/src/mame/drivers/gaelco3d.c
+++ b/src/mame/drivers/gaelco3d.c
@@ -523,7 +523,7 @@ WRITE16_MEMBER(gaelco3d_state::tms_comm_w)
*
*************************************/
-/* These are the some of the control register, we dont use them all */
+/* These are some of the control registers. We don't use them all */
enum
{
S1_AUTOBUF_REG = 15,
@@ -663,7 +663,7 @@ WRITE32_MEMBER(gaelco3d_state::adsp_tx_callback)
/* get the base value, since we need to keep it around for wrapping */
source -= m_adsp_incs;
- /* make it go back one so we dont lose the first sample */
+ /* make it go back one so we don't lose the first sample */
m_adsp->set_state_int(ADSP2100_I0 + m_adsp_ireg, source);
/* save it as it is now */
diff --git a/src/mame/drivers/galpani2.c b/src/mame/drivers/galpani2.c
index cfc02cd65c8..e05ee960f76 100644
--- a/src/mame/drivers/galpani2.c
+++ b/src/mame/drivers/galpani2.c
@@ -71,7 +71,9 @@ Notes:
PISCES - NEC uPD78324 series MCU with 32k internal rom. Clock 13.500MHz [27/2] on pins 51 & 52
VSync - 59.1856Hz
HSync - 15.625kHz
-
+
+ (TODO: VTOTAL = 264, HTOTAL = 432, pixel clock 27 MHz / 4)
+
***************************************************************************/
#include "emu.h"
@@ -120,6 +122,13 @@ WRITE16_MEMBER(galpani2_state::galpani2_eeprom_w)
***************************************************************************/
+void galpani2_state::machine_start()
+{
+ UINT8 *ROM = memregion("subdata")->base();
+ membank("subdatabank")->configure_entries(0, 0x2000000/0x0800000, ROM, 0x0800000);
+ membank("subdatabank")->set_entry(0);
+
+}
void galpani2_state::machine_reset()
{
@@ -337,21 +346,23 @@ static ADDRESS_MAP_START( galpani2_mem1, AS_PROGRAM, 16, galpani2_state )
AM_RANGE(0x300000, 0x301fff) AM_RAM // ?
AM_RANGE(0x302000, 0x303fff) AM_RAM AM_SHARE("spriteram") // Sprites
AM_RANGE(0x304000, 0x30401f) AM_DEVREADWRITE("kan_spr", kaneko16_sprite_device, kaneko16_sprites_regs_r, kaneko16_sprites_regs_w)
- AM_RANGE(0x308000, 0x308001) AM_WRITENOP // ? 0 at startup
- AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP // ? hblank effect ?
- AM_RANGE(0x310000, 0x3101ff) AM_RAM_WRITE(galpani2_palette_0_w) AM_SHARE("palette.0") // ?
+// AM_RANGE(0x308000, 0x308001) AM_WRITENOP // ? 0 at startup
+// AM_RANGE(0x30c000, 0x30c001) AM_WRITENOP // ? hblank effect ?
+ AM_RANGE(0x310000, 0x3101ff) AM_RAM_DEVWRITE("bg8palette", palette_device, write) AM_SHARE("bg8palette") // ?
AM_RANGE(0x314000, 0x314001) AM_WRITENOP // ? flip backgrounds ?
AM_RANGE(0x318000, 0x318001) AM_READWRITE(galpani2_eeprom_r, galpani2_eeprom_w) // EEPROM
AM_RANGE(0x380000, 0x387fff) AM_RAM // Palette?
AM_RANGE(0x388000, 0x38ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette
- AM_RANGE(0x390000, 0x3901ff) AM_WRITENOP // ? at startup of service mode
+// AM_RANGE(0x390000, 0x3901ff) AM_WRITENOP // ? at startup of service mode
- AM_RANGE(0x400000, 0x43ffff) AM_RAM_WRITE(galpani2_bg8_0_w) AM_SHARE("bg8.0") // Background 0
+ AM_RANGE(0x400000, 0x43ffff) AM_RAM AM_SHARE("bg8.0") // Background 0
AM_RANGE(0x440000, 0x440001) AM_RAM AM_SHARE("bg8_scrollx.0") // Background 0 Scroll X
AM_RANGE(0x480000, 0x480001) AM_RAM AM_SHARE("bg8_scrolly.0") // Background 0 Scroll Y
- AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP // ? 0 at startup only
- AM_RANGE(0x500000, 0x53ffff) AM_RAM_WRITE(galpani2_bg8_1_w) AM_SHARE("bg8.1") // Background 1
+// AM_RANGE(0x4c0000, 0x4c0001) AM_WRITENOP // ? 0 at startup only
+ AM_RANGE(0x500000, 0x53ffff) AM_RAM AM_SHARE("bg8.1") // Background 1
AM_RANGE(0x540000, 0x540001) AM_RAM AM_SHARE("bg8_scrollx.1") // Background 1 Scroll X
+ AM_RANGE(0x580000, 0x580001) AM_RAM AM_SHARE("bg8_scrolly.1") // Background 1 Scroll Y
+// AM_RANGE(0x5c0000, 0x5c0001) AM_WRITENOP // ? 0 at startup only
AM_RANGE(0x540572, 0x540573) AM_READNOP // ? galpani2 at F0A4
AM_RANGE(0x54057a, 0x54057b) AM_READNOP // ? galpani2 at F148
@@ -363,9 +374,7 @@ static ADDRESS_MAP_START( galpani2_mem1, AS_PROGRAM, 16, galpani2_state )
AM_RANGE(0x5405c2, 0x5405c3) AM_READNOP // ? galpani2 at F0A4 and F148
AM_RANGE(0x5405ca, 0x5405cb) AM_READNOP // ? galpani2 at F148
- AM_RANGE(0x580000, 0x580001) AM_RAM AM_SHARE("bg8_scrolly.1") // Background 1 Scroll Y
- AM_RANGE(0x5c0000, 0x5c0001) AM_WRITENOP // ? 0 at startup only
- AM_RANGE(0x600000, 0x600001) AM_WRITENOP // Watchdog
+ AM_RANGE(0x600000, 0x600001) AM_NOP // Watchdog
AM_RANGE(0x640000, 0x640001) AM_WRITE8(galpani2_mcu_init_w, 0x00ff ) // ? 0 before resetting and at startup, Reset mcu ?
AM_RANGE(0x680000, 0x680001) AM_WRITE8(galpani2_mcu_nmi1_w, 0x00ff) // ? 0 -> 1 -> 0 (lev 5) / 0 -> $10 -> 0
AM_RANGE(0x6c0000, 0x6c0001) AM_WRITE8(galpani2_coin_lockout_w, 0xff00 ) // Coin + Card Lockout
@@ -389,31 +398,28 @@ ADDRESS_MAP_END
***************************************************************************/
-READ16_MEMBER(galpani2_state::galpani2_bankedrom_r)
+WRITE16_MEMBER(galpani2_state::subdatabank_select_w)
{
- UINT16 *ROM = (UINT16 *) memregion( "user1" )->base();
- size_t len = memregion( "user1" )->bytes() / 2;
+ data &= mem_mask;
- offset += (0x800000/2) * (*m_rombank & 0x0003);
-
- if ( offset < len ) return ROM[offset];
- else return 0xffff; //floating bus for absent ROMs
+ if (data & 0xfffc) printf("subdatabank_select_w %04x\n", data);
+ membank("subdatabank")->set_entry(data&3);
}
+
static ADDRESS_MAP_START( galpani2_mem2, AS_PROGRAM, 16, galpani2_state )
AM_RANGE(0x000000, 0x03ffff) AM_ROM // ROM
AM_RANGE(0x100000, 0x13ffff) AM_RAM AM_SHARE("ram2") // Work RAM
- AM_RANGE(0x400000, 0x4fffff) AM_RAM_WRITE(galpani2_bg15_w) AM_SHARE("bg15") // bg15
- AM_RANGE(0x500000, 0x5fffff) AM_RAM // bg15
- AM_RANGE(0x600000, 0x600001) AM_NOP // ? 0 at startup only
- AM_RANGE(0x640000, 0x640001) AM_WRITENOP // ? 0 at startup only
- AM_RANGE(0x680000, 0x680001) AM_WRITENOP // ? 0 at startup only
- AM_RANGE(0x6c0000, 0x6c0001) AM_WRITENOP // ? 0 at startup only
- AM_RANGE(0x700000, 0x700001) AM_WRITENOP // Watchdog
+ AM_RANGE(0x400000, 0x5fffff) AM_RAM AM_SHARE("bg15") // bg15
+// AM_RANGE(0x600000, 0x600001) AM_NOP // ? 0 at startup only
+// AM_RANGE(0x640000, 0x640001) AM_WRITENOP // ? 0 at startup only
+// AM_RANGE(0x680000, 0x680001) AM_WRITENOP // ? 0 at startup only
+// AM_RANGE(0x6c0000, 0x6c0001) AM_WRITENOP // ? 0 at startup only
+ AM_RANGE(0x700000, 0x700001) AM_NOP // Watchdog
// AM_RANGE(0x740000, 0x740001) AM_WRITENOP // ? Reset mcu
AM_RANGE(0x780000, 0x780001) AM_WRITE8(galpani2_mcu_nmi2_w, 0x00ff) // ? 0 -> 1 -> 0 (lev 5)
- AM_RANGE(0x7c0000, 0x7c0001) AM_WRITEONLY AM_SHARE("rombank") // Rom Bank
- AM_RANGE(0x800000, 0xffffff) AM_READ(galpani2_bankedrom_r ) // Banked ROM
+ AM_RANGE(0x7c0000, 0x7c0001) AM_WRITE(subdatabank_select_w) // Rom Bank
+ AM_RANGE(0x800000, 0xffffff) AM_ROMBANK("subdatabank")
ADDRESS_MAP_END
/***************************************************************************
@@ -514,7 +520,7 @@ static INPUT_PORTS_START( galpani2 )
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN )
-// PORT_SERVICE_NO_TOGGLE( 0x2000, IP_ACTIVE_LOW )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_SERVICE2 ) // this button is used in gp2se as an alt way to bring up the service menu, booting with it held down breaks the game tho!
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE1 )
@@ -626,12 +632,17 @@ static MACHINE_CONFIG_START( galpani2, galpani2_state )
MCFG_SCREEN_SIZE(320, 256)
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 0, 256-1-16)
MCFG_SCREEN_UPDATE_DRIVER(galpani2_state, screen_update_galpani2)
- MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", galpani2)
- MCFG_PALETTE_ADD("palette", 0x4000 + 0x200 + 0x8000) // sprites, bg8, bg15
+ MCFG_PALETTE_ADD("palette", 0x4000) // sprites
+ MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
+
+ MCFG_PALETTE_ADD("bg8palette", 0x200/2) // bg8
+ MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
+
+ MCFG_PALETTE_ADD("bgpalette", 32768) /* 32768 static colors for the bg */
MCFG_PALETTE_FORMAT(xGGGGGRRRRRBBBBB)
- MCFG_PALETTE_INIT_OWNER(galpani2_state, galpani2)
+ MCFG_PALETTE_INIT_OWNER(galpani2_state,galpani2)
MCFG_DEVICE_ADD_KC002_SPRITES
kaneko16_sprite_device::set_offsets(*device, 0x10000 - 0x16c0 + 0xc00, 0);
@@ -731,7 +742,7 @@ ROM_START( galpani2 )
ROM_LOAD16_BYTE( "g002a2.u64-1", 0x000000, 0x020000, CRC(c0b94eaf) SHA1(4f3a65b238b31ee8d256b7025253f01eaf6e55d5) )
ROM_LOAD16_BYTE( "g003a2.u63-1", 0x000001, 0x020000, CRC(0d30725d) SHA1(d4614f9ffb930c4ea36cb3fbacffe63060e92402) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
@@ -777,7 +788,7 @@ ROM_START( galpani2e )
ROM_LOAD16_BYTE( "g002a1-u125-1.bin", 0x000000, 0x020000, CRC(100e76b3) SHA1(24a259ee427cd7a6e487520a712dc7ef632dc5d6) )
ROM_LOAD16_BYTE( "g003a1-u126-1.bin", 0x000001, 0x020000, CRC(0efe7835) SHA1(c7eecacdf101c0515da504cc77512f27b61b2ab7) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
@@ -824,7 +835,7 @@ ROM_START( galpani2i )
ROM_LOAD16_BYTE( "g002a2.u64-1", 0x000000, 0x020000, CRC(c0b94eaf) SHA1(4f3a65b238b31ee8d256b7025253f01eaf6e55d5) )
ROM_LOAD16_BYTE( "g003a2.u63-1", 0x000001, 0x020000, CRC(0d30725d) SHA1(d4614f9ffb930c4ea36cb3fbacffe63060e92402) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
@@ -873,7 +884,7 @@ ROM_START( galpani2gs ) // basically the same as the Italy set but with differen
ROM_LOAD16_BYTE( "g003g1.u65-2", 0x000000, 0x020000, CRC(c0b94eaf) SHA1(4f3a65b238b31ee8d256b7025253f01eaf6e55d5) )
ROM_LOAD16_BYTE( "g002g1.u64-2", 0x000001, 0x020000, CRC(0d30725d) SHA1(d4614f9ffb930c4ea36cb3fbacffe63060e92402) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
@@ -921,7 +932,7 @@ ROM_START( galpani2g )
ROM_LOAD16_BYTE( "g002t1.125", 0x000000, 0x020000, CRC(a3034e1c) SHA1(493e4be36f2aea0083d5d37e16486ed66dab952e) )
ROM_LOAD16_BYTE( "g003t1.126", 0x000001, 0x020000, CRC(20d3a2ad) SHA1(93450e5a23456c242ebf1a3560013a17c6b05354) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD16_BYTE( "g300a0.u44-00", 0x0000000, 0x080000, CRC(50406294) SHA1(fc1165b7b31a44ab204cd5ac3e7b2733ed6b1534) )
ROM_LOAD16_BYTE( "g300a1.u41-00", 0x0000001, 0x080000, CRC(d26b7c4f) SHA1(b491170010977ba1e5111893937cc6bab0539e7d) )
ROM_LOAD16_BYTE( "g300b0.u45-00", 0x0100000, 0x080000, CRC(9637934c) SHA1(d3b39d9f44825bdf24d4aa39ca32035bc5af4905) )
@@ -973,7 +984,7 @@ ROM_START( galpani2e2 )
ROM_LOAD16_BYTE( "g002i1.125", 0x000000, 0x020000, CRC(a3034e1c) SHA1(493e4be36f2aea0083d5d37e16486ed66dab952e) )
ROM_LOAD16_BYTE( "g003i1.126", 0x000001, 0x020000, CRC(20d3a2ad) SHA1(93450e5a23456c242ebf1a3560013a17c6b05354) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD16_BYTE( "g300a0.u44-00", 0x0000000, 0x080000, CRC(50406294) SHA1(fc1165b7b31a44ab204cd5ac3e7b2733ed6b1534) )
ROM_LOAD16_BYTE( "g300a1.u41-00", 0x0000001, 0x080000, CRC(d26b7c4f) SHA1(b491170010977ba1e5111893937cc6bab0539e7d) )
ROM_LOAD16_BYTE( "g300b0.u45-00", 0x0100000, 0x080000, CRC(9637934c) SHA1(d3b39d9f44825bdf24d4aa39ca32035bc5af4905) )
@@ -1025,7 +1036,7 @@ ROM_START( galpani2t )
ROM_LOAD16_BYTE( "g002t1.125", 0x000000, 0x020000, CRC(a3034e1c) SHA1(493e4be36f2aea0083d5d37e16486ed66dab952e) )
ROM_LOAD16_BYTE( "g003t1.126", 0x000001, 0x020000, CRC(20d3a2ad) SHA1(93450e5a23456c242ebf1a3560013a17c6b05354) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300a.052", 0x0000000, 0x100000, CRC(09ebedba) SHA1(3c06614633f0da03facb5199deac492b8ce07257) )
ROM_LOAD( "gp2-300b.053", 0x0100000, 0x100000, CRC(d7d12920) SHA1(4b6e01cc0ac5192758f4b3d26f102905b2b5e8ac) )
ROM_LOAD( "gp2-301.035", 0x0200000, 0x200000, CRC(e71e749d) SHA1(420c4c085e89d9641a84e34fa870df2bc02165b6) )
@@ -1090,7 +1101,7 @@ ROM_START( galpani2j )
ROM_LOAD16_BYTE( "g002j1.64", 0x000000, 0x020000, CRC(5e523829) SHA1(dad11e4a3348c988ff658609cf78a3fbee58064e) )
ROM_LOAD16_BYTE( "g003j1.63", 0x000001, 0x020000, CRC(2a0d5f89) SHA1(0a7031c4b8b7bc757da25250dbb5fa1004205aeb) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300j.175", 0x000000, 0x200000, CRC(3a0afc1d) SHA1(91fba9074cc3c28e919053f0ea07b28d88b2ce5f) )
ROM_LOAD( "gp2-301j.176", 0x200000, 0x200000, CRC(5b6d1709) SHA1(a7d35247fe71895f2b6169409aa0bdaef446804c) )
ROM_LOAD16_BYTE( "gp2-302a.177", 0x400000, 0x100000, CRC(311fa273) SHA1(c2adeac45be701f6f474841755fac4347d44f844) )
@@ -1121,7 +1132,7 @@ ROM_START( gp2se )
ROM_LOAD16_BYTE( "g002j4.u64", 0x000000, 0x020000, CRC(bcd4edd9) SHA1(17ae6fbf75d8e5333133737de926a36f5cd29661) )
ROM_LOAD16_BYTE( "g003j4.u63", 0x000001, 0x020000, CRC(2fbe0194) SHA1(52da771ba813b27ec1a996b237c14dab9b33db82) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300-j-0071.u175", 0x000000, 0x200000, CRC(3a0afc1d) SHA1(91fba9074cc3c28e919053f0ea07b28d88b2ce5f) )
ROM_LOAD( "gp2-301-j-0072.u176", 0x200000, 0x200000, CRC(5b6d1709) SHA1(a7d35247fe71895f2b6169409aa0bdaef446804c) )
ROM_LOAD16_BYTE( "gp2-302a-0057.u177", 0x400000, 0x100000, CRC(311fa273) SHA1(c2adeac45be701f6f474841755fac4347d44f844) )
@@ -1158,7 +1169,7 @@ ROM_START( gp2quiz )
ROM_LOAD16_BYTE( "g002e3.u64-3", 0x000000, 0x020000, CRC(5e523829) SHA1(dad11e4a3348c988ff658609cf78a3fbee58064e) )
ROM_LOAD16_BYTE( "g003e3.u63-3", 0x000001, 0x020000, CRC(2a0d5f89) SHA1(0a7031c4b8b7bc757da25250dbb5fa1004205aeb) )
- ROM_REGION16_BE( 0x2000000, "user1", 0 ) /* Backgrounds (CPU2) */
+ ROM_REGION16_BE( 0x2000000, "subdata", ROMREGION_ERASEFF ) /* Backgrounds (CPU2) */
ROM_LOAD( "gp2-300-j-0071.u175", 0x000000, 0x200000, CRC(3a0afc1d) SHA1(91fba9074cc3c28e919053f0ea07b28d88b2ce5f) )
ROM_LOAD( "gp2-301-j-0072.u176", 0x200000, 0x200000, CRC(5b6d1709) SHA1(a7d35247fe71895f2b6169409aa0bdaef446804c) )
ROM_LOAD16_BYTE( "gp2-302a-0057.u177", 0x400000, 0x100000, CRC(311fa273) SHA1(c2adeac45be701f6f474841755fac4347d44f844) )
diff --git a/src/mame/drivers/gts1.c b/src/mame/drivers/gts1.c
index c3559616fe8..56f665c95a5 100644
--- a/src/mame/drivers/gts1.c
+++ b/src/mame/drivers/gts1.c
@@ -68,254 +68,292 @@ ToDo:
#include "machine/genpin.h"
#include "cpu/pps4/pps4.h"
-//#include "gts1.lh"
+#include "gts1.lh"
+
+#define VERBOSE 1
+
+#if VERBOSE
+#define LOG(x) logerror x
+#else
+#define LOG(x)
+#endif
class gts1_state : public genpin_class
{
public:
- gts1_state(const machine_config &mconfig, device_type type, const char *tag)
- : genpin_class(mconfig, type, tag)
- , m_maincpu(*this, "maincpu")
- { }
-
- DECLARE_DRIVER_INIT(gts1);
+ gts1_state(const machine_config &mconfig, device_type type, const char *tag)
+ : genpin_class(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ { }
+
+ DECLARE_DRIVER_INIT(gts1);
+ DECLARE_READ8_MEMBER (gts1_pa_r);
+ DECLARE_WRITE8_MEMBER(gts1_pa_w);
+ DECLARE_WRITE8_MEMBER(gts1_pb_w);
private:
- virtual void machine_reset();
- required_device<cpu_device> m_maincpu;
+ virtual void machine_reset();
+ required_device<cpu_device> m_maincpu;
+ UINT8 m_6351_addr;
};
-
static ADDRESS_MAP_START( gts1_map, AS_PROGRAM, 8, gts1_state )
- AM_RANGE(0x0000, 0x0fff) AM_ROM
+ AM_RANGE(0x0000, 0x0fff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( gts1_data, AS_DATA, 8, gts1_state )
- AM_RANGE(0x0000, 0x0fff) AM_RAM // not correct
+ AM_RANGE(0x0000, 0x0fff) AM_RAM // not correct
ADDRESS_MAP_END
static ADDRESS_MAP_START( gts1_io, AS_IO, 8, gts1_state )
- AM_RANGE(0x0000, 0x00ff) AM_RAM // connects to all the other chips
+ AM_RANGE(0x0000, 0x00ff) AM_RAM // connects to all the other chips
+ AM_RANGE(0x0100, 0x0100) AM_READ (gts1_pa_r) AM_WRITE(gts1_pa_w)
+ AM_RANGE(0x0101, 0x0101) AM_WRITE(gts1_pb_w)
ADDRESS_MAP_END
static INPUT_PORTS_START( gts1 )
- PORT_START("DSW0")
- PORT_DIPNAME( 0x01, 0x00, "S01")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_DIPNAME( 0x02, 0x00, "S02")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x02, DEF_STR( On ))
- PORT_DIPNAME( 0x04, 0x00, "S03")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x04, DEF_STR( On ))
- PORT_DIPNAME( 0x08, 0x00, "S04")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x08, DEF_STR( On ))
- PORT_DIPNAME( 0x10, 0x00, "S05")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x10, DEF_STR( On ))
- PORT_DIPNAME( 0x20, 0x20, "S06")
- PORT_DIPSETTING( 0x00, DEF_STR( No ))
- PORT_DIPSETTING( 0x20, DEF_STR( Yes ))
- PORT_DIPNAME( 0x40, 0x40, "S07")
- PORT_DIPSETTING( 0x00, DEF_STR( No ))
- PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
- PORT_DIPNAME( 0x80, 0x80, "S08")
- PORT_DIPSETTING( 0x00, DEF_STR( No ))
- PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
-
- PORT_START("DSW1")
- PORT_DIPNAME( 0x01, 0x00, "S09")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_DIPNAME( 0x02, 0x00, "S10")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x02, DEF_STR( On ))
- PORT_DIPNAME( 0x04, 0x00, "S11")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x04, DEF_STR( On ))
- PORT_DIPNAME( 0x08, 0x00, "S12")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x08, DEF_STR( On ))
- PORT_DIPNAME( 0x10, 0x00, "S13")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x10, DEF_STR( On ))
- PORT_DIPNAME( 0x20, 0x00, "S14")
- PORT_DIPSETTING( 0x00, DEF_STR( Yes ))
- PORT_DIPSETTING( 0x20, DEF_STR( No ))
- PORT_DIPNAME( 0x40, 0x40, "S15")
- PORT_DIPSETTING( 0x00, DEF_STR( No ))
- PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
- PORT_DIPNAME( 0x80, 0x00, "S16")
- PORT_DIPSETTING( 0x00, DEF_STR( No ))
- PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
-
- PORT_START("DSW2")
- PORT_DIPNAME( 0x01, 0x00, "S17")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x01, DEF_STR( On ))
- PORT_DIPNAME( 0x02, 0x00, "S18")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x02, DEF_STR( On ))
- PORT_DIPNAME( 0x04, 0x00, "S19")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x04, DEF_STR( On ))
- PORT_DIPNAME( 0x08, 0x00, "S20")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x08, DEF_STR( On ))
- PORT_DIPNAME( 0x10, 0x00, "S21")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x10, DEF_STR( On ))
- PORT_DIPNAME( 0x20, 0x00, "S22")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x20, DEF_STR( On ))
- PORT_DIPNAME( 0x40, 0x00, "S23")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x40, DEF_STR( On ))
- PORT_DIPNAME( 0x80, 0x00, "S24")
- PORT_DIPSETTING( 0x00, DEF_STR( Off ))
- PORT_DIPSETTING( 0x80, DEF_STR( On ))
+ PORT_START("DSW0")
+ PORT_DIPNAME( 0x01, 0x00, "S01")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x01, DEF_STR( On ))
+ PORT_DIPNAME( 0x02, 0x00, "S02")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x02, DEF_STR( On ))
+ PORT_DIPNAME( 0x04, 0x00, "S03")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x04, DEF_STR( On ))
+ PORT_DIPNAME( 0x08, 0x00, "S04")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x08, DEF_STR( On ))
+ PORT_DIPNAME( 0x10, 0x00, "S05")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x10, DEF_STR( On ))
+ PORT_DIPNAME( 0x20, 0x20, "S06")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ))
+ PORT_DIPSETTING( 0x20, DEF_STR( Yes ))
+ PORT_DIPNAME( 0x40, 0x40, "S07")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ))
+ PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
+ PORT_DIPNAME( 0x80, 0x80, "S08")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ))
+ PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
+
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x01, 0x00, "S09")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x01, DEF_STR( On ))
+ PORT_DIPNAME( 0x02, 0x00, "S10")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x02, DEF_STR( On ))
+ PORT_DIPNAME( 0x04, 0x00, "S11")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x04, DEF_STR( On ))
+ PORT_DIPNAME( 0x08, 0x00, "S12")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x08, DEF_STR( On ))
+ PORT_DIPNAME( 0x10, 0x00, "S13")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x10, DEF_STR( On ))
+ PORT_DIPNAME( 0x20, 0x00, "S14")
+ PORT_DIPSETTING( 0x00, DEF_STR( Yes ))
+ PORT_DIPSETTING( 0x20, DEF_STR( No ))
+ PORT_DIPNAME( 0x40, 0x40, "S15")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ))
+ PORT_DIPSETTING( 0x40, DEF_STR( Yes ))
+ PORT_DIPNAME( 0x80, 0x00, "S16")
+ PORT_DIPSETTING( 0x00, DEF_STR( No ))
+ PORT_DIPSETTING( 0x80, DEF_STR( Yes ))
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x01, 0x00, "S17")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x01, DEF_STR( On ))
+ PORT_DIPNAME( 0x02, 0x00, "S18")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x02, DEF_STR( On ))
+ PORT_DIPNAME( 0x04, 0x00, "S19")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x04, DEF_STR( On ))
+ PORT_DIPNAME( 0x08, 0x00, "S20")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x08, DEF_STR( On ))
+ PORT_DIPNAME( 0x10, 0x00, "S21")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x10, DEF_STR( On ))
+ PORT_DIPNAME( 0x20, 0x00, "S22")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x20, DEF_STR( On ))
+ PORT_DIPNAME( 0x40, 0x00, "S23")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x40, DEF_STR( On ))
+ PORT_DIPNAME( 0x80, 0x00, "S24")
+ PORT_DIPSETTING( 0x00, DEF_STR( Off ))
+ PORT_DIPSETTING( 0x80, DEF_STR( On ))
INPUT_PORTS_END
void gts1_state::machine_reset()
{
+ m_6351_addr = 0;
}
DRIVER_INIT_MEMBER(gts1_state,gts1)
{
}
+READ8_MEMBER (gts1_state::gts1_pa_r)
+{
+ // return ROM nibble
+ UINT8 *ROM = memregion("maincpu")->base();
+ UINT8 data = ROM[0x2000 + m_6351_addr] & 0x0f;
+ LOG(("%s: ROM[%03x]:%02x\n", __FUNCTION__, m_6351_addr, data));
+ return data;
+}
+
+WRITE8_MEMBER(gts1_state::gts1_pa_w)
+{
+ // write address lines 7-4
+ m_6351_addr = (m_6351_addr & 0x0f) | ((data & 0x0f) << 4);
+ LOG(("%s: ROM hi:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr));
+}
+
+WRITE8_MEMBER(gts1_state::gts1_pb_w)
+{
+ // write address lines 3-0
+ m_6351_addr = (m_6351_addr & 0xf0) | (data & 0x0f);
+ LOG(("%s: ROM lo:%x addr:%02x\n", __FUNCTION__, data & 0x0f, m_6351_addr));
+}
+
+
static MACHINE_CONFIG_START( gts1, gts1_state )
- /* basic machine hardware */
- MCFG_CPU_ADD("maincpu", PPS4, XTAL_3_579545MHz / 18) // divided in the CPU
- MCFG_CPU_PROGRAM_MAP(gts1_map)
- MCFG_CPU_DATA_MAP(gts1_data)
- MCFG_CPU_IO_MAP(gts1_io)
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", PPS4, XTAL_3_579545MHz / 18) // divided in the CPU
+ MCFG_CPU_PROGRAM_MAP(gts1_map)
+ MCFG_CPU_DATA_MAP(gts1_data)
+ MCFG_CPU_IO_MAP(gts1_io)
- //MCFG_NVRAM_ADD_0FILL("nvram")
+ //MCFG_NVRAM_ADD_0FILL("nvram")
- /* Video */
- //MCFG_DEFAULT_LAYOUT(layout_gts1)
+ /* Video */
+ MCFG_DEFAULT_LAYOUT(layout_gts1)
- /* Sound */
- MCFG_FRAGMENT_ADD( genpin_audio )
+ /* Sound */
+ MCFG_FRAGMENT_ADD( genpin_audio )
MACHINE_CONFIG_END
ROM_START( gts1 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
ROM_END
ROM_START( gts1s )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
ROM_END
/*-------------------------------------------------------------------
/ Asteroid Annie and the Aliens (12/1980) #442
/-------------------------------------------------------------------*/
ROM_START(astannie)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281))
- ROM_RELOAD( 0x0800, 0x0400)
- ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
- ROM_RELOAD( 0xfc00, 0x0400)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("442.cpu", 0x2000, 0x0400, CRC(579521e0) SHA1(b1b19473e1ca3373955ee96104b87f586c4c311c))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("442.snd", 0x0400, 0x0400, CRC(c70195b4) SHA1(ff06197f07111d6a4b8942dcfe8d2279bda6f281))
+ ROM_RELOAD( 0x0800, 0x0400)
+ ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
+ ROM_RELOAD( 0xfc00, 0x0400)
ROM_END
/*-------------------------------------------------------------------
/ Buck Rogers (01/1980) #437
/-------------------------------------------------------------------*/
ROM_START(buckrgrs)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c))
- ROM_RELOAD( 0x0800, 0x0400)
- ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
- ROM_RELOAD( 0xfc00, 0x0400)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("437.cpu", 0x2000, 0x0400, CRC(e57d9278) SHA1(dfc4ebff1e14b9a074468671a8e5ac7948d5b352))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("437.snd", 0x0400, 0x0400, CRC(732b5a27) SHA1(7860ea54e75152246c3ac3205122d750b243b40c))
+ ROM_RELOAD( 0x0800, 0x0400)
+ ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
+ ROM_RELOAD( 0xfc00, 0x0400)
ROM_END
/*-------------------------------------------------------------------
/ Charlie's Angels (11/1978) #425
/-------------------------------------------------------------------*/
ROM_START(charlies)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("425.cpu", 0x2000, 0x0400, CRC(928b4279) SHA1(51096d45e880d6a8263eaeaa0cdab0f61ad2f58d))
ROM_END
/*-------------------------------------------------------------------
/ Cleopatra (11/1977) #409
/-------------------------------------------------------------------*/
ROM_START(cleoptra)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("409.cpu", 0x2000, 0x0400, CRC(8063ff71) SHA1(205f09f067bf79544d2ce2a48d23259901f935dd))
ROM_END
/*-------------------------------------------------------------------
/ Close Encounters of the Third Kind (10/1978) #424
/-------------------------------------------------------------------*/
ROM_START(closeenc)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("424.cpu", 0x2000, 0x0400, CRC(a7a5dd13) SHA1(223c67b9484baa719c91de52b363ff22813db160))
ROM_END
/*-------------------------------------------------------------------
/ Count-Down (05/1979) #422
/-------------------------------------------------------------------*/
ROM_START(countdwn)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("422.cpu", 0x2000, 0x0400, CRC(51bc2df0) SHA1(d4b555d106c6b4e420b0fcd1df8871f869476c22))
ROM_END
/*-------------------------------------------------------------------
/ Dragon (10/1978) #419
/-------------------------------------------------------------------*/
ROM_START(dragon)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("419.cpu", 0x2000, 0x0400, CRC(018d9b3a) SHA1(da37ef5017c71bc41bdb1f30d3fd7ac3b7e1ee7e))
ROM_END
/*-------------------------------------------------------------------
/ Genie (11/1979) #435
/-------------------------------------------------------------------*/
ROM_START(geniep)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47))
- ROM_RELOAD( 0x0800, 0x0400)
- ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
- ROM_RELOAD( 0xfc00, 0x0400)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("435.snd", 0x0400, 0x0400, CRC(4a98ceed) SHA1(f1d7548e03107033c39953ee04b043b5301dbb47))
+ ROM_RELOAD( 0x0800, 0x0400)
+ ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
+ ROM_RELOAD( 0xfc00, 0x0400)
ROM_END
/*-------------------------------------------------------------------
/ Joker Poker (08/1978) #417
/-------------------------------------------------------------------*/
ROM_START(jokrpokr)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("417.cpu", 0x2000, 0x0400, CRC(33dade08) SHA1(23b8dbd7b6c84b806fc0d2da95478235cbf9f80a))
ROM_END
/*-------------------------------------------------------------------
@@ -325,12 +363,12 @@ ROM_END
/ L'Hexagone (04/1986)
/-------------------------------------------------------------------*/
ROM_START(hexagone)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("435.cpu", 0x2000, 0x0400, CRC(7749fd92) SHA1(9cd3e799842392e3939877bf295759c27f199e58))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("hexagone.bin", 0, 0x4000, CRC(002b5464) SHA1(e2d971c4e85b4fb6580c2d3945c9946ea0cebc2e))
ROM_END
/*-------------------------------------------------------------------
/ Movie
@@ -340,25 +378,25 @@ ROM_END
/ Pinball Pool (08/1979) #427
/-------------------------------------------------------------------*/
ROM_START(pinpool)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("427.cpu", 0x2000, 0x0400, CRC(c496393d) SHA1(e91d9596aacdb4277fa200a3f8f9da099c278f32))
ROM_END
/*-------------------------------------------------------------------
/ Roller Disco (02/1980) #440
/-------------------------------------------------------------------*/
ROM_START(roldisco)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d))
- ROM_RELOAD( 0x0800, 0x0400)
- ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
- ROM_RELOAD( 0xfc00, 0x0400)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("440.cpu", 0x2000, 0x0400, CRC(bc50631f) SHA1(6aa3124d09fc4e369d087a5ad6dd1737ace55e41))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("440.snd", 0x0400, 0x0400, CRC(4a0a05ae) SHA1(88f21b5638494d8e78dc0b6b7d69873b76b5f75d))
+ ROM_RELOAD( 0x0800, 0x0400)
+ ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
+ ROM_RELOAD( 0xfc00, 0x0400)
ROM_END
/*-------------------------------------------------------------------
@@ -369,17 +407,17 @@ ROM_END
/ Sinbad (05/1978) #412
/-------------------------------------------------------------------*/
ROM_START(sinbad)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("412.cpu", 0x2000, 0x0400, CRC(84a86b83) SHA1(f331f2ffd7d1b279b4ffbb939aa8649e723f5fac))
ROM_END
ROM_START(sinbadn)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("412no1.cpu", 0x2000, 0x0400, CRC(f5373f5f) SHA1(027840501416ff01b2adf07188c7d667adf3ad5f))
ROM_END
/*-------------------------------------------------------------------
@@ -390,65 +428,65 @@ ROM_END
/ Solar Ride (02/1979) #421
/-------------------------------------------------------------------*/
ROM_START(solaride)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("421.cpu", 0x2000, 0x0400, CRC(6b5c5da6) SHA1(a09b7009473be53586f53f48b7bfed9a0c5ecd55))
ROM_END
/*-------------------------------------------------------------------
/ The Incredible Hulk (10/1979) #433
/-------------------------------------------------------------------*/
ROM_START(hulk)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25))
- ROM_RELOAD( 0x0800, 0x0400)
- ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
- ROM_RELOAD( 0xfc00, 0x0400)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("433.cpu", 0x2000, 0x0400, CRC(c05d2b52) SHA1(393fe063b029246317c90ee384db95a84d61dbb7))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("433.snd", 0x0400, 0x0400, CRC(20cd1dff) SHA1(93e7c47ff7051c3c0dc9f8f95aa33ba094e7cf25))
+ ROM_RELOAD( 0x0800, 0x0400)
+ ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
+ ROM_RELOAD( 0xfc00, 0x0400)
ROM_END
/*-------------------------------------------------------------------
/ Torch (02/1980) #438
/-------------------------------------------------------------------*/
ROM_START(torch)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c))
- ROM_RELOAD( 0x0800, 0x0400)
- ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
- ROM_RELOAD( 0xfc00, 0x0400)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("438.cpu", 0x2000, 0x0400, CRC(2d396a64) SHA1(38a1862771500faa471071db08dfbadc6e8759e8))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("438.snd", 0x0400, 0x0400, CRC(a9619b48) SHA1(1906bc1b059bf31082e3b4546f5a30159479ad3c))
+ ROM_RELOAD( 0x0800, 0x0400)
+ ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
+ ROM_RELOAD( 0xfc00, 0x0400)
ROM_END
/*-------------------------------------------------------------------
/ Totem (10/1979) #429
/-------------------------------------------------------------------*/
ROM_START(totem)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d))
- ROM_REGION(0x10000, "cpu2", 0)
- ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f))
- ROM_RELOAD( 0x0800, 0x0400)
- ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
- ROM_RELOAD( 0xfc00, 0x0400)
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("429.cpu", 0x2000, 0x0400, CRC(7885a384) SHA1(1770662af7d48ad8297097a9877c5c497119978d))
+ ROM_REGION(0x10000, "cpu2", 0)
+ ROM_LOAD("429.snd", 0x0400, 0x0400, CRC(5d1b7ed4) SHA1(4a584f880e907fb21da78f3b3a0617f20599688f))
+ ROM_RELOAD( 0x0800, 0x0400)
+ ROM_LOAD("6530sys1.bin", 0x0c00, 0x0400, CRC(b7831321) SHA1(c94f4bee97854d0373653a6867016e27d3fc1340))
+ ROM_RELOAD( 0xfc00, 0x0400)
ROM_END
/*-------------------------------------------------------------------
/ System 1 Test prom
/-------------------------------------------------------------------*/
ROM_START(sys1test)
- ROM_REGION(0x10000, "maincpu", 0)
- ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
- ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
- ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8))
+ ROM_REGION(0x10000, "maincpu", 0)
+ ROM_LOAD("u5_cf.bin", 0x0000, 0x0800, CRC(e0d4b405) SHA1(17aadd79c0dcbb336aadd5d203bc6ca866492345))
+ ROM_LOAD("u4_ce.bin", 0x0800, 0x0800, CRC(4cd312dd) SHA1(31245daa9972ef8652caee69986585bb8239e86e))
+ ROM_LOAD("test.cpu", 0x2000, 0x0400, CRC(8b0704bb) SHA1(5f0eb8d5af867b815b6012c9d078927398efe6d8))
ROM_END
diff --git a/src/mame/drivers/igs_m036.c b/src/mame/drivers/igs_m036.c
index de89a2c52ce..29af63597e1 100644
--- a/src/mame/drivers/igs_m036.c
+++ b/src/mame/drivers/igs_m036.c
@@ -12,12 +12,12 @@ a IGS game use IGS036 chip
IGS036 could be a upgraded version of IGS027A
but with GFX processor integrated
-I dont know the CPU core (should ARM based due to fail test)
-the chip has internal rom build-in
-the the FLASH(u33, EV29LV160AB-90PCR) is external rom and encrypted
-if the external rom decrypted then we can
+I don't know the CPU core (should be ARM based due to fail test)
+the chip has internal rom built-in
+the FLASH(u33, EV29LV160AB-90PCR) is external rom and encrypted
+if the external rom is decrypted then we can
try to trojan the internal rom
-here we offer several revision a same game to see
+here we offer several revisions of the same game to see
if anyone could find any clue, these 4 revision can
be programmed and running on a same PCB.
===================================================
diff --git a/src/mame/drivers/lindbergh.c b/src/mame/drivers/lindbergh.c
index 11f90232ae0..87ebf576faa 100644
--- a/src/mame/drivers/lindbergh.c
+++ b/src/mame/drivers/lindbergh.c
@@ -24,13 +24,47 @@ The familiar PIC is still present on the back of the system and likely decrypts
On this red box the CPU is a Celeron D at 2.8GHz. RAM is 512M DDR PC3200
The box has Sega number 845-0001D-02
+
+Security
+--------
+
+The security seems to work in multiple steps. The information there
+is a combination of our research and things found on the internet.
+
+- At boot, the bios unlocks the CF card through an IDE 0x82 command
+ with a currently unknown key. There is also a hardware heartbeat
+ signal on the IDE bus to avoid hotswapping.
+
+- The system boots on the CF which holds a customized Montavista linux.
+
+- The CF system can either install the game (from the DVD) or start it (on the HD)
+
+- The DVD is decrypted (probably on-the-fly with aesloop) using a
+ fixed system key (all the dvd images start identically).
+
+- The PIC includes an AES-CBC engine and has as data an IV, a key,
+ some game-specific identification information, and two pre and
+ post-whitening values. Everything but the key is dumpable through
+ commands, but the key seems well-protected. It's not realistic to
+ decrypt very large amounts of data through it though, the bandwidth
+ would be way too low.
+
+- The HD is probably unlocked by the CF and bootstrap code is
+ decrypted through the PIC. That code in turn loop-decrypts/mounts all the
+ data needed from the partition (probably /usr, /X11R6 and /home).
+
+Currently, we do not have access to the CF image, making it impossible
+to do a complete boot/install.
+
+
Lindbergh Game List
-------------------
Security
Game Dongle Sticker PIC Number DVD Code
------------------------------------------------------------------------------------------
- 2 Spicy 253-5508-0491 317-0491-COM DVP-0027A
+*2 Spicy 253-5508-0491 317-0491-COM DVP-0027A
After Burner Climax (EXPORT) 253-5508-0440A ^317-0440-COM DVP-0009
+ After Burner Climax CE ? ? DVP-0031A
Ami-Gyo ? ? ?
Answer X Answer ? ? ?
Answer X Answer 1.1 ? ? ?
@@ -40,28 +74,41 @@ Game Dongle Sticker PIC Number
Club Majesty Formal ? ? ?
Derby Owners Club 2008: Feel the Rush ? ? DVP-0047A
Derby Owners Club 2008: Feel the Rush V2.0 ? ? ?
- Ghost Squad Evolution ? ? ?
+*Ghost Squad Evolution ? ? DVP-0029A
Harley Davidson: King of the Road ? ? ?
Hummer Extreme ? ? ?
Initial D Arcade Stage 4 ? ? DVP-0019
- Initial D Arcade Stage 4 (rev B) 253-5508-0486E 317-0486-COM DVP-0030B
-*Initial D Arcade Stage 4 (rev C) 253-5508-0486E 317-0486-COM DVP-0030C
-*Initial D Arcade Stage 4 (rev D) 253-5508-0486E 317-0486-COM DVP-0030D
+ Initial D Arcade Stage 4 (rev A) ? ? DVP-0019A
+ Initial D Arcade Stage 4 (rev B) ? ? DVP-0019B
+ Initial D Arcade Stage 4 (rev D) ? ? DVP-0019D
+ Initial D Arcade Stage 4 (rev G) ? ? DVP-0019G
+ Initial D4 ? ? DVP-0030
+ Initial D4 (rev B) 253-5508-0486E 317-0486-COM DVP-0030B
+*Initial D4 (rev C) 253-5508-0486E 317-0486-COM DVP-0030C
+*Initial D4 (rev D) 253-5508-0486E 317-0486-COM DVP-0030D
Initial D Arcade Stage 5 ? ? ?
Let's Go Jungle (EXPORT) 253-5508-0442 317-0442-COM DVP-0011
MJ4 ? ? ?
- Outrun 2 Special Tours (EXPORT) 253-5508-0452 317-0452-COM ?
- Primeval Hunt ? ? DVP-0048A
+ OutRun 2 Special Tours (EXPORT) 253-5508-0452 317-0452-COM ?
+ OutRun 2 SP SDX ? ? DVP-0015A
+*Primeval Hunt 253-5508-0512 317-0512-COM DVP-0048A
R-Tuned: Ultimate Street Racing ? ? DVP-0060
*Rambo (EXPORT) 253-5508-0540 ^317-0540-COM DVP-0069
-*Sega Race TV (EXPORT) 253-5508-0504 ^317-0504-COM DVP-0044
+ SEGA Network Taisen Mahjong MJ4 (rev A) ? ? DVP-0049A
+ SEGA Network Taisen Mahjong MJ4 (rev F) ? ? DVP-0049F
+ SEGA Network Taisen Mahjong MJ4 (rev G) ? ? DVP-0049G
+*SEGA-Race TV (EXPORT) 253-5508-0504 ^317-0504-COM DVP-0044
+ StarHorse 2: Fifth Expansion (rev D) ? ? DVP-0082D
+ StarHorse 2: Fifth Expansion (rev E) ? ? DVP-0082E
*The House Of The Dead 4 (EXPORT) 253-5508-0427 ^317-0427-COM DVP-0003A
The House Of The Dead EX (JAPAN) 253-5508-0550 ^317-0550-JPN ?
The House Of the Dead 4 Special ? ? ?
- Virtua Fighter 5 (EXPORT) 253-5508-0438 317-0438-COM ?
+*VBIOS Update ? ? DVP-0021B
+ VBIOS Update [For VTF] ? ? DVP-0023A
+ Virtua Fighter 5 (EXPORT) 253-5508-0438 317-0438-COM DVP-0008E
+ Virtua Tennis 3 (Power Smash 3) ? ? DVP-0005
Virtua Tennis 3 (Power Smash 3) (EXPORT) 253-5508-0434 ^317-0434-COM DVP-0005A
*Virtua Tennis 3 (JAPAN) 253-5508-0506 317-0506-JPN DVP-0005C
-*VBIOS Update ? ? DVP-0021B
WCC Football Intercontinental Clubs 2006-2007 ? ? ?
WCC Football Intercontinental Clubs 2007-2008 ? ? ?
WCC Football Intercontinental Clubs 2008-2009 ? ? ?
@@ -134,7 +181,8 @@ Notes:
P/N: 0A30209 BA17730E6B
Serial: EETNGM0G
CF SLOT - Accepts a compact flash card. The card is required to boot the system.
- Revision C and E have been seen. There may be other revisions out there.
+ Revision C and E have been seen. StarHorse 2 has it's own special card.
+ There may be other revisions out there.
Sticker: LINDBERGH
MDA-C0004A
REV. C
@@ -291,25 +339,6 @@ public:
virtual void machine_reset();
};
-#if 0
-static ADDRESS_MAP_START(lindbergh_map, AS_PROGRAM, 32, lindbergh_state)
- AM_RANGE(0x00000000, 0x0009ffff) AM_RAM
- // AM_RANGE(0x000a0000, 0x000bffff) AM_DEVREADWRITE8("vga", vga_device, mem_r, mem_w, 0xffffffff)
- // AM_RANGE(0x000c0000, 0x000cffff) AM_ROM AM_REGION("vid_bios", 0)
-// 0xd0000 - 0xdffff tested, wants 0x414d ("AM") in there
- AM_RANGE(0x000f0000, 0x000fffff) AM_ROM AM_REGION("mb_bios", 0xf0000)
-// AM_RANGE(0xfd000000, 0xfd3fffff) AM_ROM AM_REGION("jvs_bios", 0) /* Hack to see the data */
- AM_RANGE(0xfff00000, 0xffffffff) AM_ROM AM_REGION("mb_bios", 0) /* System BIOS */
-ADDRESS_MAP_END
-
-static ADDRESS_MAP_START(lindbergh_io, AS_IO, 32, lindbergh_state)
-// AM_IMPORT_FROM(pcat32_io_common)
-
-// AM_RANGE(0x00e8, 0x00ef) AM_NOP
-// AM_RANGE(0x0cf8, 0x0cff) AM_DEVREADWRITE("pcibus", pci_bus_legacy_device, read, write)
-ADDRESS_MAP_END
-#endif
-
lindbergh_state::lindbergh_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag)
{
}
@@ -356,21 +385,201 @@ static MACHINE_CONFIG_START(lindbergh, lindbergh_state)
MCFG_AC97_ADD( ":pci:1f.5", 0x808625a6, 0x02, 0x103382c0)
MACHINE_CONFIG_END
+#define LINDBERGH_BIOS \
+ ROM_REGION32_LE(0x100000, ":pci:1f.0", 0) /* PC bios, location 3j7 */ \
+ ROM_SYSTEM_BIOS(0, "bios0", "6.0.0010 alternate version") \
+ ROMX_LOAD("6.0.0010a.bin", 0x00000, 0x100000, CRC(10dd9b76) SHA1(1fdf1f921bc395846a7c3180fbdbc4ca287a9670), ROM_BIOS(1) ) \
+ ROM_SYSTEM_BIOS(1, "bios1", "6.0.0009") \
+ ROMX_LOAD("6.0.0009.bin", 0x00000, 0x100000, CRC(5ffdfbf8) SHA1(605bc4967b749b4e6d13fc2ebb845ba956a259a7), ROM_BIOS(2) ) \
+ ROM_SYSTEM_BIOS(2, "bios2", "6.0.0010") \
+ ROMX_LOAD("6.0.0010.bin", 0x00000, 0x100000, CRC(ea2bf888) SHA1(c9c5b6f0d4f4f36620939b15dd2f128a74347e37), ROM_BIOS(3) ) \
+\
+ ROM_REGION(0x400000, ":pci:1e.0:03.0", 0) /* Baseboard MPC firmware */ \
+ ROM_LOAD("fpr-24370b.ic6", 0x000000, 0x400000, CRC(c3b021a4) SHA1(1b6938a50fe0e4ae813864649eb103838c399ac0)) \
+\
+ ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) /* Geforce bios extension (custom or standard?) */ \
+ ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275)) \
+
ROM_START(lindbios)
- ROM_REGION32_LE(0x100000, ":pci:1f.0", 0) // PC bios, location 3j7
- ROM_SYSTEM_BIOS(0, "bios0", "6.0.0010 alternate version")
- ROMX_LOAD("6.0.0010a.bin", 0x00000, 0x100000, CRC(10dd9b76) SHA1(1fdf1f921bc395846a7c3180fbdbc4ca287a9670), ROM_BIOS(1) )
- ROM_SYSTEM_BIOS(1, "bios1", "6.0.0009")
- ROMX_LOAD("6.0.0009.bin", 0x00000, 0x100000, CRC(5ffdfbf8) SHA1(605bc4967b749b4e6d13fc2ebb845ba956a259a7), ROM_BIOS(2) )
- ROM_SYSTEM_BIOS(2, "bios2", "6.0.0010")
- ROMX_LOAD("6.0.0010.bin", 0x00000, 0x100000, CRC(ea2bf888) SHA1(c9c5b6f0d4f4f36620939b15dd2f128a74347e37), ROM_BIOS(3) )
+ LINDBERGH_BIOS
+ROM_END
+
+ROM_START(hotd4)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0427 / 317-0427-COM
+ ROM_LOAD("317-0427-com.bin", 0, 0x2000, CRC(ef4a120c) SHA1(fcc0386fa708af9e010e40e1d259a6bd95e8b9e2))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0003a", 0, SHA1(46544e28735f55418dd78bd19446093874438264))
+ROM_END
+ROM_START(vf5)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0438 / 317-0438-COM
+ ROM_LOAD("317-0438-com.bin", 0, 0x2000, CRC(9aeb15d3) SHA1(405ddc44b2b40b72cfe2a081a0d5e43ceb9a380e))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0008e", 0, NO_DUMP)
+ROM_END
+
+ROM_START(abclimax)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0440 / 317-0440-COM
+ ROM_LOAD("317-0440-com.bin", 0, 0x2000, CRC(8d09e717) SHA1(6b25982f7042541874115d33ea5d0c028140a962))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0009", 0, NO_DUMP)
+ROM_END
+
+ROM_START(letsgoju)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0442 / 317-0442-COM
+ ROM_LOAD("317-0442-com.bin", 0, 0x2000, CRC(b706efbb) SHA1(97c2b65e521113c5201f0b588fcb37a39148a637))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0011", 0, NO_DUMP)
+ROM_END
+
+ROM_START(outr2sdx)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0452 / 317-0452-COM (to verify, may be the one for OutRun 2 Special Tours)
+ ROM_LOAD("317-0452-com.bin", 0, 0x2000, CRC(f5b7bb3f) SHA1(6b179b255b3d29e5ce61902eeae4da07177a2943))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0015a", 0, NO_DUMP)
+ROM_END
+
+ROM_START(psmash3)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0434 / 317-0434-COM
+ ROM_LOAD("317-0434-com.bin", 0, 0x2000, CRC(70e3b202) SHA1(4925a288f937d54529abe6ef467c9c23674e47f0))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0005a", 0, NO_DUMP)
+ROM_END
+
+ROM_START(vtennis3)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0506 / 317-0506-JPN
+ ROM_LOAD("317-0506-jpn.bin", 0, 0x2000, NO_DUMP)
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0005c", 0, SHA1(1fd689753c4b70dff0286cb7f623ee7fd439db62))
+ROM_END
+
+ROM_START(2spicy)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0491 / 317-0491-COM
+ ROM_LOAD("317-0491-com.bin", 0, 0x2000, NO_DUMP)
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0027a", 0, SHA1(da1aacee9e32e813844f4d434981e69cc5c80682))
+ROM_END
+
+ROM_START(ghostsev)
+ LINDBERGH_BIOS
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0029a", 0, SHA1(256d9e8a6d61e1bcf65b17b8ed70fbc58796f7b1))
+ROM_END
+
+ROM_START(initiad4)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0486E / 317-0486-COM
+ ROM_LOAD("317-0846-com.bin", 0, 0x2000, NO_DUMP)
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0030d", 0, SHA1(e43e6d22fab4eceb81db8309e4634e049d9c41e6))
+ROM_END
+
+ROM_START(initiad4c)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0486E / 317-0486-COM
+ ROM_LOAD("317-0846-com.bin", 0, 0x2000, NO_DUMP)
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0030c", 0, SHA1(b1919f28539afec4c4bc52357e5210a090b5ae32))
+ROM_END
+
+ROM_START(segartv)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0504 / 317-0504-COM
+ ROM_LOAD("317-0504-com.bin", 0, 0x2000, CRC(ae7eaea8) SHA1(187e417e0b5543d95245364b547925426aa9f80e))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0044", 0, SHA1(914aa23ece8aaf0f1942f77272b3a87d10f7a7db))
+ROM_END
+
+ROM_START(hotdex)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0550 / 317-0550-JPN
+ ROM_LOAD("317-0550-jpn.bin", 0, 0x2000, CRC(7e247f13) SHA1(d416b0e7742b32eb31443967e84ef93fc9e56dfb))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("hotdex", 0, NO_DUMP)
+ROM_END
+
+ROM_START(primevah)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0512 / 317-0512-COM
+ ROM_LOAD("317-0512-com.bin", 0, 0x2000, NO_DUMP)
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0048a", 0, SHA1(914aa23ece8aaf0f1942f77272b3a87d10f7a7db))
+ROM_END
+
+ROM_START(rambo)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security 253-5508-0540 / 317-0540-COM
+ ROM_LOAD("317-0540-com.bin", 0, 0x2000, CRC(fd9a7bc0) SHA1(140b05573e25a41c1237c7a96c8e099efbfd75b8))
+
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0069", 0, SHA1(1f3401b652c45db2b843360aff9cda862c2832c0))
+ROM_END
+
+ROM_START(hummerxt)
+ LINDBERGH_BIOS
+
+ ROM_REGION(0x2000, ":pic", 0) // PIC security id unknown
+ ROM_LOAD("hummerextreme.bin", 0, 0x2000, CRC(524bc69a) SHA1(c79b6bd384196c169e40e623f4c80c8b9eb11f81))
+ROM_END
- ROM_REGION(0x400000, ":pci:1e.0:03.0", 0) // Baseboard MPC firmware
- ROM_LOAD("fpr-24370b.ic6", 0x000000, 0x400000, CRC(c3b021a4) SHA1(1b6938a50fe0e4ae813864649eb103838c399ac0))
+ROM_START(lbvbiosu)
+ LINDBERGH_BIOS
- ROM_REGION32_LE(0x10000, ":pci:01.0:00.0", 0) // Geforce bios extension (custom or standard?)
- ROM_LOAD("vid_bios.u504", 0x00000, 0x10000, CRC(f78d14d7) SHA1(f129787e487984edd23bf344f2e9500c85052275))
+ DISK_REGION("dvd")
+ DISK_IMAGE_READONLY("dvp-0021b", 0, SHA1(362ac028ba19ba4762678953a033034a5ee8ad53))
ROM_END
-GAME(1999, lindbios, 0, lindbergh, 0, driver_device, 0, ROT0, "Sega Lindbergh", "Sega Lindbergh Bios", GAME_IS_SKELETON)
+GAME(1999, lindbios, 0, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Sega Lindbergh Bios", GAME_IS_BIOS_ROOT)
+GAME(2005, hotd4, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "House of the Dead 4 (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2005, vf5, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Virtua Fighter 5 (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2006, abclimax, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "After Burner Climax (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2006, letsgoju, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Let's Go Jungle (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2006, outr2sdx, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Outrun 2 SP SDX", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2006, psmash3, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Power Smash 3 / Virtua Tennis 3 (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2006, vtennis3, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Virtua Tennis 3 (Japan)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2007, 2spicy, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "2 Spicy", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2007, ghostsev, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Ghost Squad Evolution", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2007, initiad4, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Initial D4 (Rev D)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2007, initiad4c, initiad4, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Initial D4 (Rev C)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2007, segartv, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Sega Race-TV (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2008, hotdex, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "House of the Dead EX (Japan)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2008, primevah, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Primeval Hunt", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2008, rambo, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Rambo (Export)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(2009, hummerxt, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "Hummer Extreme", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
+GAME(200?, lbvbiosu, lindbios, lindbergh, 0, driver_device, 0, ROT0, "Sega", "VBios updater", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION|GAME_NO_SOUND)
diff --git a/src/mame/drivers/m62.c b/src/mame/drivers/m62.c
index 87d541c2584..d01636eb4f7 100644
--- a/src/mame/drivers/m62.c
+++ b/src/mame/drivers/m62.c
@@ -2152,12 +2152,6 @@ DRIVER_INIT_MEMBER(m62_state,ldrun4)
DRIVER_INIT_MEMBER(m62_state,kidniki)
{
- UINT8 *ROM = memregion("maincpu")->base();
-
- /* in Kid Niki, bank 0 has code falling from 7fff to 8000, */
- /* so I have to copy it there because bank switching wouldn't catch it */
- memcpy(ROM + 0x08000, ROM + 0x10000, 0x2000);
-
/* configure memory banks */
membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x2000);
}
diff --git a/src/mame/drivers/mjkjidai.c b/src/mame/drivers/mjkjidai.c
index 966685c3e9f..0948458cb67 100644
--- a/src/mame/drivers/mjkjidai.c
+++ b/src/mame/drivers/mjkjidai.c
@@ -26,112 +26,41 @@ TODO:
#include "sound/sn76496.h"
#include "includes/mjkjidai.h"
-/* Start of ADPCM custom chip code */
-
-const device_type MJKJIDAI = &device_creator<mjkjidai_adpcm_device>;
-
-mjkjidai_adpcm_device::mjkjidai_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, MJKJIDAI, "Mahjong Kyou Jidai ADPCM Custom", tag, owner, clock, "mjkjidai_adpcm", __FILE__),
- device_sound_interface(mconfig, *this),
- m_stream(NULL),
- m_current(0),
- m_end(0),
- m_nibble(0),
- m_playing(0),
- m_base(NULL)
-{
-}
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-void mjkjidai_adpcm_device::device_config_complete()
-{
-}
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void mjkjidai_adpcm_device::device_start()
+WRITE8_MEMBER(mjkjidai_state::adpcm_w)
{
- m_playing = 0;
- m_stream = machine().sound().stream_alloc(*this, 0, 1, clock());
- m_base = machine().root_device().memregion("adpcm")->base();
- m_adpcm.reset();
-
- save_item(NAME(m_current));
- save_item(NAME(m_end));
- save_item(NAME(m_nibble));
- save_item(NAME(m_playing));
+ m_adpcm_pos = (data & 0x07) * 0x1000 * 2;
+ m_adpcm_end = m_adpcm_pos + 0x1000 * 2;
+ m_msm->reset_w(0);
}
-//-------------------------------------------------
-// sound_stream_update - handle a stream update
-//-------------------------------------------------
-
-void mjkjidai_adpcm_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
+WRITE_LINE_MEMBER(mjkjidai_state::adpcm_int)
{
- stream_sample_t *dest = outputs[0];
-
- while (m_playing && samples > 0)
+ if (m_adpcm_pos >= m_adpcm_end)
{
- int val = (m_base[m_current] >> m_nibble) & 15;
-
- m_nibble ^= 4;
- if (m_nibble == 4)
- {
- m_current++;
- if (m_current >= m_end)
- m_playing = 0;
- }
-
- *dest++ = m_adpcm.clock(val) << 4;
- samples--;
+ m_msm->reset_w(1);
}
- while (samples > 0)
+ else
{
- *dest++ = 0;
- samples--;
+ UINT8 const data = m_adpcmrom[m_adpcm_pos / 2];
+ m_msm->data_w(m_adpcm_pos & 1 ? data & 0xf : data >> 4);
+ m_adpcm_pos++;
}
}
-void mjkjidai_adpcm_device::mjkjidai_adpcm_play (int offset, int length)
-{
- m_current = offset;
- m_end = offset + length/2;
- m_nibble = 4;
- m_playing = 1;
-}
-
-WRITE8_MEMBER(mjkjidai_state::adpcm_w)
-{
- m_mjk_adpcm->mjkjidai_adpcm_play ((data & 0x07) * 0x1000, 0x1000 * 2);
-}
-/* End of ADPCM custom chip code */
-
-
-READ8_MEMBER(mjkjidai_state::keyboard_r)
+CUSTOM_INPUT_MEMBER(mjkjidai_state::keyboard_r)
{
- int res = 0x3f,i;
- static const char *const keynames[] = { "PL2_1", "PL2_2", "PL2_3", "PL2_4", "PL2_5", "PL2_6", "PL1_1", "PL1_2", "PL1_3", "PL1_4", "PL1_5", "PL1_6" };
+ int res = 0x3f;
-// logerror("%04x: keyboard_r\n", space.device().safe_pc());
-
- for (i = 0; i < 12; i++)
+ for (int i = 0; i < 12; i++)
{
- if (~m_keyb & (1 << i))
+ if (~m_keyb & (0x800 >> i))
{
- res = ioport(keynames[i])->read() & 0x3f;
+ res = m_row[i]->read();
break;
}
}
- res |= (ioport("IN3")->read() & 0xc0);
-
return res;
}
@@ -152,21 +81,18 @@ static ADDRESS_MAP_START( mjkjidai_map, AS_PROGRAM, 8, mjkjidai_state )
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
AM_RANGE(0xc000, 0xcfff) AM_RAM
AM_RANGE(0xd000, 0xdfff) AM_RAM AM_SHARE("nvram") // cleared and initialized on startup if bit 6 of port 00 is 0
- AM_RANGE(0xe000, 0xe01f) AM_RAM AM_SHARE("spriteram1") // shared with tilemap ram
- AM_RANGE(0xe800, 0xe81f) AM_RAM AM_SHARE("spriteram2") // shared with tilemap ram
- AM_RANGE(0xf000, 0xf01f) AM_RAM AM_SHARE("spriteram3") // shared with tilemap ram
AM_RANGE(0xe000, 0xf7ff) AM_RAM_WRITE(mjkjidai_videoram_w) AM_SHARE("videoram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( mjkjidai_io_map, AS_IO, 8, mjkjidai_state )
ADDRESS_MAP_GLOBAL_MASK(0xff)
- AM_RANGE(0x00, 0x00) AM_READ(keyboard_r)
+ AM_RANGE(0x00, 0x00) AM_READ_PORT("KEYBOARD")
AM_RANGE(0x01, 0x01) AM_READNOP // ???
AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2")
AM_RANGE(0x01, 0x02) AM_WRITE(keyboard_select_w)
AM_RANGE(0x10, 0x10) AM_WRITE(mjkjidai_ctrl_w) // rom bank, coin counter, flip screen etc
- AM_RANGE(0x11, 0x11) AM_READ_PORT("IN0")
- AM_RANGE(0x12, 0x12) AM_READ_PORT("IN1")
+ AM_RANGE(0x11, 0x11) AM_READ_PORT("DSW1")
+ AM_RANGE(0x12, 0x12) AM_READ_PORT("DSW2")
AM_RANGE(0x20, 0x20) AM_DEVWRITE("sn1", sn76489_device, write)
AM_RANGE(0x30, 0x30) AM_DEVWRITE("sn2", sn76489_device, write)
AM_RANGE(0x40, 0x40) AM_WRITE(adpcm_w)
@@ -174,147 +100,146 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( mjkjidai )
- PORT_START("IN0")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
+ PORT_START("DSW1")
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION("SW1:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_SERVICE( 0x04, IP_ACTIVE_LOW )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:4")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x04, 0x04, "Test Mode" ) PORT_DIPLOCATION("SW1:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Flip_Screen ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
-
- PORT_START("IN1")
- PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:8")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+
+ PORT_START("DSW2")
+ PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1")
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2")
+ PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3")
+ PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) )
+ PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4")
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5")
+ PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6")
+ PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
- PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
+ PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:7")
+ PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:8")
+ PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_START("IN2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2)
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE ) // service mode
+ PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_SERVICE( 0x10, IP_ACTIVE_LOW )
PORT_DIPNAME( 0x20, 0x20, "Statistics" )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START3 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START4 )
+ PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("IN3")
+ PORT_START("KEYBOARD")
+ PORT_BIT( 0x3f, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_CUSTOM_MEMBER(DEVICE_SELF, mjkjidai_state, keyboard_r, NULL)
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_TILT ) // reinitialize NVRAM and reset the game
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_START("PL1_1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
-
- PORT_START("PL1_2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
- PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_START("ROW.0")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D )
+ PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL1_3")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
+ PORT_START("ROW.1")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H )
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL1_4")
+ PORT_START("ROW.2")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L )
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL1_5")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H )
+ PORT_START("ROW.3")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON )
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL1_6")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A )
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C )
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D )
- PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_START("ROW.4")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN )
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH )
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON )
+ PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL2_1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_START("ROW.5")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL2_2")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
- PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_START("ROW.6")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
+ PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL2_3")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
+ PORT_START("ROW.7")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL2_4")
+ PORT_START("ROW.8")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_I ) PORT_PLAYER(2)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_J ) PORT_PLAYER(2)
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_K ) PORT_PLAYER(2)
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_L ) PORT_PLAYER(2)
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL2_5")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_E ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_F ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_G ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_H ) PORT_PLAYER(2)
+ PORT_START("ROW.9")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_M ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_N ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_CHI ) PORT_PLAYER(2)
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_PON ) PORT_PLAYER(2)
PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
- PORT_START("PL2_6")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_A ) PORT_PLAYER(2)
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_B ) PORT_PLAYER(2)
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_C ) PORT_PLAYER(2)
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_D ) PORT_PLAYER(2)
- PORT_BIT( 0x30, IP_ACTIVE_LOW, IPT_UNUSED )
+ PORT_START("ROW.10")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MAHJONG_KAN ) PORT_PLAYER(2)
+ PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_PLAYER(2)
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_PLAYER(2)
+ PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("ROW.11")
+ PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
+ PORT_BIT( 0x3e, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
@@ -350,10 +275,19 @@ GFXDECODE_END
INTERRUPT_GEN_MEMBER(mjkjidai_state::vblank_irq)
{
- if(m_nmi_mask)
+ if(m_nmi_enable)
device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
+void mjkjidai_state::machine_start()
+{
+ membank("bank1")->configure_entries(0, 4, memregion("maincpu")->base() + 0x8000, 0x4000);
+}
+
+void mjkjidai_state::machine_reset()
+{
+ m_adpcm_pos = m_adpcm_end = 0;
+}
static MACHINE_CONFIG_START( mjkjidai, mjkjidai_state )
@@ -386,7 +320,9 @@ static MACHINE_CONFIG_START( mjkjidai, mjkjidai_state )
MCFG_SOUND_ADD("sn2", SN76489, 10000000/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
- MCFG_SOUND_ADD("adpcm", MJKJIDAI, 6000)
+ MCFG_SOUND_ADD("msm", MSM5205, 384000)
+ MCFG_MSM5205_VCLK_CB(WRITELINE(mjkjidai_state, adpcm_int))
+ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S64_4B) /* 6kHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -399,11 +335,10 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( mjkjidai )
- ROM_REGION( 0x1c000, "maincpu", 0 )
+ ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "mkj-00.14g", 0x00000, 0x8000, CRC(188a27e9) SHA1(2306ad112aaf8d9ac77a89d0e4c3a17f36945130) )
- ROM_LOAD( "mkj-01.15g", 0x08000, 0x4000, CRC(a6a5e9c7) SHA1(974f4343f4347a0065f833c1fdcc47e96d42932d) ) /* banked, there is code flowing from 7fff to this bank */
- ROM_CONTINUE( 0x10000, 0x4000 )
- ROM_LOAD( "mkj-02.16g", 0x14000, 0x8000, CRC(fb312927) SHA1(b71db72ba881474f9c2523d0617757889af9f28e) )
+ ROM_LOAD( "mkj-01.15g", 0x08000, 0x8000, CRC(a6a5e9c7) SHA1(974f4343f4347a0065f833c1fdcc47e96d42932d) )
+ ROM_LOAD( "mkj-02.16g", 0x10000, 0x8000, CRC(fb312927) SHA1(b71db72ba881474f9c2523d0617757889af9f28e) )
ROM_REGION( 0x30000, "gfx1", 0 )
ROM_LOAD( "mkj-20.4e", 0x00000, 0x8000, CRC(8fc66bce) SHA1(4f1006bc5168e39eb7a1f6a4b3c3f5aaa3c1c7dd) )
diff --git a/src/mame/drivers/multfish_ref.c b/src/mame/drivers/multfish_ref.c
index 34425859bf4..93f00e6878d 100644
--- a/src/mame/drivers/multfish_ref.c
+++ b/src/mame/drivers/multfish_ref.c
@@ -1,6 +1,6 @@
/* The following sets are known to exist based on official documentation, but have not been dumped. */
-/* no other official sets are known to exist apart from these and hte ones in multfish.c */
+/* no other official sets are known to exist apart from these and the ones in multfish.c */
#if 0
ROM_START( mfish ) // 021120
diff --git a/src/mame/drivers/naomi.c b/src/mame/drivers/naomi.c
index 4b28ade6d07..34e89ab13b0 100644
--- a/src/mame/drivers/naomi.c
+++ b/src/mame/drivers/naomi.c
@@ -259,7 +259,7 @@ Crackin' DJ part 2 840-0068C 23674 20 (64Mb) pre
Ferrari F355 Challenge (twin, prototype) no cart 22848P* 21 (64Mb) present 315-6206 317-0267-COM * flash-PCB have CRC 330B A417, the rest is the same as regular cart, not dumped but known to exist
Ferrari F355 Challenge 2 (twin) no cart 23399 21 (64Mb) present 315-6206 317-0287-COM content is the same as regular 171-7919A cart
House of the Dead 2 (prototype) no cart A1E2 21 (64Mb) present 315-6206 present no label on IC42
-Inu No Osanpo / Dog Walking (Rev A) 840-0073C 22294A 16 (64Mb) present 315-6206 317-0316-JPN requires 837-13844 JVS IO with special jumpers settings enabling rotary
+Inu No Osanpo / Dog Walking (Rev A) 840-0073C 22294A 16 (64Mb) present 315-6206 317-0316-JPN requires 837-13844 JVS IO with DIPSW 1 ON
Maze of the Kings The (prototype) no cart * 21 (64Mb) present 315-6206 FRI * flash-PCB, not dumped but known to exist
Samba de Amigo (prototype) no cart * 21 (64Mb) present 315-6206 317-0270-COM * instead of EPROM have tiny PCB with 2 flashroms on it
Soul Surfer (Rev A) 840-0095C 23838C 21 (64Mb) present 315-6206 not present
@@ -335,7 +335,7 @@ Power Stone 2 841-0008C 23127 9 (64Mb)
Puyo Puyo Da! 841-0006C 22206 20 (64Mb) ? 315-6213 ?
Ring Out 4x4 840-0004C 21779 10 (64Mb) present 315-6213 317-0250-COM requires 2 JVS boards
Samba de Amigo (Rev B) 840-0020C 22966B 16 (64Mb) present 315-6213 317-0270-COM will boot but requires special controller to play it
-Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires fishing controller
+Sega Marine Fishing 840-0027C 22221 10 (64Mb) ? 315-6213 not present ROM 3&4 not present. Requires 837-13844 JVS IO with all DIPSW Off and fishing controller
Sega Strike Fighter (Rev A, set 1) 840-0035C 23323A 20 (64Mb) present 315-6213 317-0281-COM have "Rev. A" label on case
Sega Strike Fighter (Rev A, set 2) 840-0035C 23786A 20 (64Mb) present 315-6213 317-0281-COM have "Rev. A" label on PCB
Sega Tetris 840-0018C 22909 6 (64Mb) present 315-6213 317-0268-COM
@@ -343,7 +343,7 @@ Slashout 840-0041C 23341 17 (64Mb)
Spawn In the Demon's Hand (Rev B) 841-0005C 22977B 10 (64Mb) ? 315-6213 317-5051-COM joystick + 4 buttons
Super Major League '99 840-0012C 22059 21 (64Mb) ? 315-6213 ?
The Typing of the Dead (Rev A) 840-0026C 23021A 20 (64Mb) present 315-6213 not present
-Touch de UNO! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN requires special JVS board with touch input and printer
+Touch de UNO! / Unou Nouryoku Check Machine 840-0008C 22073 4 (64Mb) present 315-6213 317-0255-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
Toy Fighter / Waffupu 840-0011C 22035 10 (64Mb) present 315-6212 317-0257-COM joystick + 3 buttons
Virtua NBA 840-0021C-01 23073 21 (64Mb) present 315-6213 not present
Virtua NBA (original) 840-0021C 22949 21 (64Mb) present 315-6213 317-0271-COM
@@ -460,7 +460,7 @@ Shootout Pool 840-0098C 23844 4 (64Mb)
Shootout Pool Prize / The Medal (Rev A) 840-0128C 24065A 4 (64Mb) present 317-0367-COM requires Naomi-based hopper controller
Shootout Pool Prize / The Medal Ver. B 840-0136C 24148 4 (64Mb) present 317-0367-COM requires Naomi-based or 837-14438 hopper controller
SWP Hopper Board 840-0130C 24083 20 (64Mb) present 317-0339-COM Maskroms are not really used, they are recycled from other games; there is an additional 837-14381 IO board
-Touch de UNO! 2 840-0022C 23071 6 (64Mb) present 317-0276-JPN requires special JVS board with touch input and printer
+Touch de UNO! 2 840-0022C 23071 6 (64Mb) present 317-0276-JPN requires 837-13844 JVS IO with DIPSW 5 On, ELO AccuTouch-compatible touch screen controller and special printer.
Virtua Fighter 4 Evolution 840-0106B 23934 20 (64Mb) present 317-0339-COM
Virtua Tennis 2 / Power Smash 2 (Rev A) 840-0084C 22327A 18 (64Mb) present 317-0320-COM
@@ -888,7 +888,10 @@ Notes:
|-----------------------------|
Notes: (most info taken from poor quality pics/scans, better info is needed)
- JVS I/O board 2. Has both digital and analogue inputs.
+ JVS I/O board 2. Supports digital and analogue inputs, rotary input,
+ touch screens (ELO AccuTouch-compatible) and printer output using
+ extended JVS commands. This features can be enabled or disabled
+ by switching DIPSW 1-5.
This board is used with F355, Ghost Squad, and many
others including network/satellite games.
@@ -909,7 +912,7 @@ Notes: (most info taken from poor quality pics/scans, better info is needed)
IC7 - 27C512 EPROM with label 'EPR-22082' (DIP28)
On plain 837-13844 (no -02) this is 'EPR-21868' (DIP28)
IC8 - Sharp LH52256 32k x8 SRAM (SOP28)
- IC10 - Something by NEC? (QFP44)
+ IC10 - NEC D71054GB programmable counter/timer (QFP44)
OSC1 - 14.7456MHz
OSC2 - 32MHz
CNx - 6 pin connector
@@ -5631,10 +5634,8 @@ ROM_START( mushik2e )
ROM_LOAD( "fpr-24333.ic8", 0x0000000, 0x4000000, CRC(a467b69c) SHA1(66a841b72ef1bb8cbabbfb1d14081b4dff14b1d3) )
ROM_LOAD( "fpr-24334.ic9", 0x4000000, 0x4000000, CRC(13d2d1dc) SHA1(6a47cfaddf006e6ff46837fac956fbcc20619d79) )
- // ROM_REGION( 4, "rom_key", 0 )
- // ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-0437-com.ic3", 0, 20, NO_DUMP )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-0437-com.ic3", 0, 0x800, BAD_DUMP CRC(b6e4f61a) SHA1(b5cae574170afa3889e01517f1c4429e207042b9) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x02))
ROM_END
@@ -5648,10 +5649,8 @@ ROM_START( mushi2ea )
ROM_LOAD( "epr-24357.ic7", 0x0000000, 0x0400000, CRC(a2236d58) SHA1(3746b9d3c0f7ecf6340619bb8bf01f170ac4efb7) ) // EPR mode, overwrite FPR data
ROM_LOAD( "fpr-24334.ic9", 0x4000000, 0x4000000, CRC(13d2d1dc) SHA1(6a47cfaddf006e6ff46837fac956fbcc20619d79) )
- // ROM_REGION( 4, "rom_key", 0 )
- // ROM_LOAD( "mushik2e-key.bin", 0, 4, CRC(b32a0633) SHA1(984c01e43cf359d8e8a0c6cb1a04c5dc3da47d39) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-0437-com.ic3", 0, 20, NO_DUMP )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-0437-com.ic3", 0, 0x800, BAD_DUMP CRC(b6e4f61a) SHA1(b5cae574170afa3889e01517f1c4429e207042b9) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x82))
ROM_END
@@ -5664,10 +5663,8 @@ ROM_START( zunou )
ROM_LOAD( "fpr-24338.ic8", 0x0000000, 0x4000000, CRC(1423c374) SHA1(e6a3f0eaccd13c161d07705bcd00f447f08fc186) )
ROM_LOAD( "fpr-24339.ic9", 0x4000000, 0x4000000, CRC(11883792) SHA1(1782db04f74394f981f887ab1a95d687eb2c0b35) )
- // ROM_REGION( 4, "rom_key", 0 )
- // ROM_LOAD( "zunou-key.bin", 0, 4, CRC(cbe35afb) SHA1(78877655800aae27661bf720e1c37d6c6f2e3d1c) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-0435-jpn.ic3", 0, 20, NO_DUMP )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-0435-jpn.ic3", 0, 0x800, BAD_DUMP CRC(b553d900) SHA1(ed1c3c2053f2c0e98cb5c4d99f93143a66c29e5c) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x02))
ROM_END
@@ -5682,8 +5679,8 @@ ROM_START( sl2007 )
ROM_LOAD( "fpr-24415.ic10", 0x8000000, 0x4000000, CRC(133c742c) SHA1(89f857a31731dc918afc72b6cb716f5c77cb9d6e) )
ROM_LOAD( "fpr-24416.ic11", 0xc000000, 0x4000000, CRC(562fb88e) SHA1(172678e3e27cfad7f7e6217c4653a4ba119bfbdf) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-5129-jpn.ic3", 0, 20, CRC(b6191cea) SHA1(13e14ff013bf2728203641303141c016e82b10a3) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-5129-jpn.ic3", 0, 0x800, CRC(432ba30f) SHA1(4935a16d1075430799269ac7ac990066d44d815b) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
ROM_END
@@ -5698,8 +5695,8 @@ ROM_START( asndynmt )
ROM_LOAD( "fpr-24384.ic10", 0x8000000, 0x4000000, CRC(2e9116c4) SHA1(58903a33c4ce72a1f75aefcab94393fc2e8bd2d9) )
ROM_LOAD( "fpr-24385.ic11", 0xc000000, 0x4000000, CRC(2b79f45d) SHA1(db97d980bf1590df4b983a4b7786977687238ef5) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-0495-com.ic3", 0, 20, CRC(675aca7b) SHA1(5127189e1f960abf9ed3f643158747d9abcaee1c) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-0495-com.ic3", 0, 0x800, CRC(c229a59b) SHA1(497dcc1e4e52eb044a8b709edbd00126cef212b1) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
ROM_END
@@ -5714,8 +5711,8 @@ ROM_START( illvelo )
ROM_LOAD( "fpr-24439.ic10", 0x8000000, 0x4000000, CRC(c02040f9) SHA1(27ad2cb45e8a516433917f060ca9798412bb95f7) )
// IC11 Populated, Empty
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-5131-jpn.ic3", 0, 20, CRC(44ab8ca9) SHA1(c17b10041e70590547ed010dc16a4dd2510fcc80) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-5131-jpn.ic3", 0, 0x800, CRC(af4b38f2) SHA1(9b82f16a258854d7d618d60f9a610f7d47d67a78) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
ROM_END
@@ -5730,8 +5727,8 @@ ROM_START( mamonoro )
ROM_LOAD( "ic10.bin", 0x8000000, 0x4000000, CRC(76fb945f) SHA1(448be0c3d9a7c3956dd51aca3c4d8d28f8cec227) )
// IC11 Populated, Empty
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-5132-jpn.ic3", 0, 20, CRC(f2089de5) SHA1(12af0681decb22bbfa4b3e01037c3503846f265a) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-5132-jpn.ic3", 0, 0x800, CRC(d56e70a1) SHA1(fda1a2989f0fa3b0edeb292cdd4537d9b86af6f2) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
ROM_END
@@ -5748,8 +5745,8 @@ ROM_START( mbaa )
ROM_LOAD( "ic12.bin", 0x10000000, 0x4000000, CRC(b8a6bff2) SHA1(befbc2e917b3107f1c4bfb9169623282ff97bfb2) )
ROM_LOAD( "ic13.bin", 0x14000000, 0x4000000, CRC(4886329f) SHA1(6ccf6fb83cfdbef3f85f6c06e641c38ff434d605) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-5133-jpn.ic3", 0, 20, CRC(3dc7d902) SHA1(bb70e80dff878bca3652088f3333079e0781f482) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-5133-jpn.ic3", 0, 0x800, CRC(0f16d180) SHA1(9d4ae15aa54752cdbd8e279388b7f3ae20777172) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x06))
ROM_END
@@ -5767,8 +5764,8 @@ ROM_START( mbaaa )
ROM_LOAD( "ic12.bin", 0x10000000, 0x4000000, CRC(b8a6bff2) SHA1(befbc2e917b3107f1c4bfb9169623282ff97bfb2) )
ROM_LOAD( "ic13.bin", 0x14000000, 0x4000000, CRC(4886329f) SHA1(6ccf6fb83cfdbef3f85f6c06e641c38ff434d605) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-5133-jpn.ic3", 0, 20, CRC(3dc7d902) SHA1(bb70e80dff878bca3652088f3333079e0781f482) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-5133-jpn.ic3", 0, 0x800, CRC(0f16d180) SHA1(9d4ae15aa54752cdbd8e279388b7f3ae20777172) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x86))
ROM_END
@@ -5782,8 +5779,8 @@ ROM_START( radirgyn )
ROM_LOAD( "ic9.bin", 0x4000000, 0x4000000, CRC(16cf2e7a) SHA1(ff7c6540e4507f84e3128ba03be4826ba504678c) )
// IC10 and IC11 Populated, Empty
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-5138-jpn.ic3", 0, 20, CRC(babcc420) SHA1(653cdcfa388426f4ce03c76506046ec6fd070562) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-5138-jpn.ic3", 0, 0x800, CRC(93b7a03d) SHA1(7af7c8d436f61e57b9d5957431c6fc745442f74f) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
ROM_END
@@ -5797,8 +5794,8 @@ ROM_START( ausfache )
ROM_LOAD( "ic9.bin", 0x4000000, 0x4000000, CRC(18c994d7) SHA1(159e1425b2fc645133814b0d26d93a90e9849b1a) )
// IC10 and IC11 Populated, Empty
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-5130-jpn.ic3", 0, 20, CRC(3e0c010b) SHA1(b6da97d4ecb228e73fb9a5ada837d0d6699ab0f1) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-05130-jpn.ic3", 0, 0x800, CRC(eccdcd59) SHA1(9f374e0b37f18591c92c38c83c9310f2db0abf9c) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
ROM_END
@@ -5817,10 +5814,8 @@ ROM_START( manicpnc )
ROM_REGION( 0x200000, "ioboard", 0) // touch screen I/O board, program disassembles as little-endian SH-4
ROM_LOAD( "fpr24351.ic14", 0x000000, 0x200000, CRC(4d1b7b89) SHA1(965b8c6b5a2e7b3f1b1e2eac19c86000c3b66754) )
- // ROM_REGION( 4, "rom_key", 0 )
- // ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-0461-com.ic3", 0, 20, NO_DUMP )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-0461-com.ic3", 0, 0x800, BAD_DUMP CRC(c9282cdd) SHA1(23933e489d763515428e2714cc6e7676df1d5323) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x05))
ROM_END
@@ -5839,10 +5834,8 @@ ROM_START( pokasuka )
ROM_REGION( 0x200000, "ioboard", 0) // touch screen I/O board, program disassembles as little-endian SH-4
ROM_LOAD( "fpr24351.ic14", 0x000000, 0x200000, CRC(4d1b7b89) SHA1(965b8c6b5a2e7b3f1b1e2eac19c86000c3b66754) )
- // ROM_REGION( 4, "rom_key", 0 )
- // ROM_LOAD( "pokasuka-key.bin", 0, 4, CRC(f00bcd61) SHA1(b8315b851656c2e0b7853979988d1c44eab0886b) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-0461-com.ic3", 0, 20, NO_DUMP )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-0461-com.ic3", 0, 0x800, BAD_DUMP CRC(c9282cdd) SHA1(23933e489d763515428e2714cc6e7676df1d5323) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x05))
ROM_END
@@ -5860,8 +5853,8 @@ ROM_START( rhytngk )
ROM_LOAD( "fpr-24425.ic10", 0x08000000, 0x4000000, CRC(6223ebac) SHA1(64c0ec61c108acbb557e7d3837f578deba832cb6) )
ROM_LOAD( "fpr-24426.ic11", 0x0c000000, 0x4000000, CRC(c78b0981) SHA1(f889acf9065566e11ff985a3b6c4824e364d57ae) )
- ROM_REGION( 20, "pic_readout", 0 ) // data obtained using a custom PIC reader
- ROM_LOAD( "317-0503-jpn.ic3", 0, 20, CRC(69fc3f47) SHA1(3a887c62e93fa264b307c954eb39a4fca1bdfad6) )
+ ROM_REGION( 0x800, "pic_readout", 0 )
+ ROM_LOAD( "317-0503-jpn.ic3", 0, 0x800, CRC(6eb0976b) SHA1(d5d0fc09a0c0e3a8f2703c450f05f5082317fbe4) )
ROM_REGION(0x4, "boardid", ROMREGION_ERASEVAL(0x04))
ROM_END
diff --git a/src/mame/drivers/neogeo_noslot.c b/src/mame/drivers/neogeo_noslot.c
index 67795344d3b..d5a419e669b 100644
--- a/src/mame/drivers/neogeo_noslot.c
+++ b/src/mame/drivers/neogeo_noslot.c
@@ -620,8 +620,8 @@ ROM_START( ridhero ) /* MVS AND AES VERSION */
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "006-p1.p1", 0x000000, 0x080000, CRC(d4aaf597) SHA1(34d35b71adb5bd06f4f1b50ffd9c58ab9c440a84) ) /* MB834200 */
- ROM_REGION( 0x1000, "mcu", 0 ) /* Hitachi HD6301V1 MCU */
- ROM_LOAD( "hd6301v1p.com", 0x0000, 0x1000, NO_DUMP )
+ ROM_REGION( 0x2000, "mcu", 0 ) /* Hitachi HD6301V1 MCU */
+ ROM_LOAD( "rhcom.bin", 0x0000, 0x2000, CRC(e5cd6306) SHA1(f6bbb8ae562804d67e137290c765c3589fa334c0) ) // dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally)
NEO_SFIX_128K( "006-s1.s1", CRC(eb5189f0) SHA1(0239c342ea62e73140a2306052f226226461a478) ) /* TC531000 */
@@ -649,8 +649,8 @@ ROM_START( ridheroh )
ROM_LOAD16_WORD_SWAP( "006-pg1.p1", 0x000000, 0x080000, BAD_DUMP CRC(52445646) SHA1(647bb31f2f68453c1366cb6e2e867e37d1df7a54) )
/* Chip label p1h does not exist, renamed temporarly to pg1, marked BAD_DUMP. This needs to be verified. */
- ROM_REGION( 0x1000, "mcu", 0 ) /* Hitachi HD6301V1 MCU */
- ROM_LOAD( "hd6301v1p.com", 0x0000, 0x1000, NO_DUMP )
+ ROM_REGION( 0x2000, "mcu", 0 ) /* Hitachi HD6301V1 MCU */
+ ROM_LOAD( "rhcom.bin", 0x0000, 0x2000, CRC(e5cd6306) SHA1(f6bbb8ae562804d67e137290c765c3589fa334c0) ) // dumped from a prototype with external ROM, not 100% confirmed as being the same on a final, or other games (lbowling, trally)
NEO_SFIX_128K( "006-s1.s1", CRC(eb5189f0) SHA1(0239c342ea62e73140a2306052f226226461a478) ) /* TC531000 */
@@ -2539,7 +2539,7 @@ ROM_START( fightfev ) /* MVS ONLY RELEASE */
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "060-p1.p1", 0x0000000, 0x100000, CRC(2a104b50) SHA1(3eb663d3df7074e1cdf4c0e450a35c9cf55d8979) ) /* VIC940800 */
- NEO_SFIX_128K( "060-s1.s1", CRC(7f012104) SHA1(f366dcc3923655dff16ec08a40d5fce22a84257d) ) /* VIC930100 */
+ NEO_SFIX_128K( "060-s1.s1", CRC(d62a72e9) SHA1(a23e4c4fd4ec11a7467ce41227c418b4dd1ef649) ) /* VIC930100 */
NEO_BIOS_AUDIO_128K( "060-m1.m1", CRC(0b7c4e65) SHA1(999a1e784de18db3f1332b30bc425836ea6970be) ) /* VIC930100 */
@@ -2560,10 +2560,10 @@ ROM_START( fightfeva ) /* MVS ONLY RELEASE */
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "060-p1.p1", 0x0000000, 0x100000, CRC(2a104b50) SHA1(3eb663d3df7074e1cdf4c0e450a35c9cf55d8979) ) /* VIC940800 */
/* the rom below acts as a patch to the program rom in the cart, replacing the first 512kb */
- ROM_LOAD16_WORD_SWAP( "060-epr.sp2", 0x000000, 0x080000, BAD_DUMP CRC(3032041b) SHA1(4b8ed2e6f74579ea35a53e06ccac42d6905b0f51) )
- /* P is on eprom, correct chip label unknown */
+ ROM_LOAD16_WORD_SWAP( "1.sp2", 0x000000, 0x080000, CRC(3032041b) SHA1(4b8ed2e6f74579ea35a53e06ccac42d6905b0f51) )
+ /* P is on eprom, has a Viccom logo at the top of the label with a circled '1' in the center */
- NEO_SFIX_128K( "060-s1.s1", CRC(7f012104) SHA1(f366dcc3923655dff16ec08a40d5fce22a84257d) ) /* VIC930100 */
+ NEO_SFIX_128K( "060-s1.s1", CRC(d62a72e9) SHA1(a23e4c4fd4ec11a7467ce41227c418b4dd1ef649) ) /* VIC930100 */
NEO_BIOS_AUDIO_128K( "060-m1.m1", CRC(0b7c4e65) SHA1(999a1e784de18db3f1332b30bc425836ea6970be) ) /* VIC930100 */
diff --git a/src/mame/drivers/nova2001.c b/src/mame/drivers/nova2001.c
index 5bf9d3b9413..77140cfea1e 100644
--- a/src/mame/drivers/nova2001.c
+++ b/src/mame/drivers/nova2001.c
@@ -930,7 +930,7 @@ ROM_END
/******************************************************************************
Gfx ROMs in pkunwar have an unusual layout, where a high address bit
-(which is no the top bit) separates parts of the same tile.
+(which is not the top bit) separates parts of the same tile.
This all originates from Nova2001 apparently, which uses 0x2000 bytes ROMs for
the graphics. When the number of tiles was increased, the same 0x2000 blocks
diff --git a/src/mame/drivers/r2dx_v33.c b/src/mame/drivers/r2dx_v33.c
index 6c878d977f5..0629c202ce3 100644
--- a/src/mame/drivers/r2dx_v33.c
+++ b/src/mame/drivers/r2dx_v33.c
@@ -434,8 +434,8 @@ static ADDRESS_MAP_START( rdx_v33_map, AS_PROGRAM, 16, r2dx_v33_state )
AM_RANGE(0x10000, 0x1efff) AM_RAM
AM_RANGE(0x1f000, 0x1ffff) AM_RAM //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
- AM_RANGE(0x20000, 0x2ffff) AM_ROM AM_ROMBANK("bank1") AM_WRITENOP
- AM_RANGE(0x30000, 0xfffff) AM_ROM AM_ROMBANK("bank3") AM_WRITENOP
+ AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("bank1") AM_WRITENOP
+ AM_RANGE(0x30000, 0xfffff) AM_ROMBANK("bank3") AM_WRITENOP
ADDRESS_MAP_END
@@ -490,7 +490,7 @@ static ADDRESS_MAP_START( nzeroteam_base_map, AS_PROGRAM, 16, r2dx_v33_state )
AM_RANGE(0x10000, 0x1efff) AM_RAM
AM_RANGE(0x1f000, 0x1ffff) AM_RAM //_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
- AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x20000 )
+ AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x20000 )
ADDRESS_MAP_END
static ADDRESS_MAP_START( nzerotea_map, AS_PROGRAM, 16, r2dx_v33_state )
@@ -846,10 +846,10 @@ DRIVER_INIT_MEMBER(r2dx_v33_state,rdx_v33)
static const int spri[5] = { 0, 1, 2, 3, -1 };
cur_spri = spri;
- membank("bank1")->configure_entries(0, 0x40, memregion("mainprg")->base(), 0x10000);
+ membank("bank1")->configure_entries(0, 0x40, memregion("maincpu")->base(), 0x10000);
- membank("bank3")->configure_entry(0, memregion("mainprg")->base()+0x030000); // 0x30000 - 0xfffff bank for Raiden 2
- membank("bank3")->configure_entry(1, memregion("mainprg")->base()+0x230000); // 0x30000 - 0xfffff bank for Raiden DX
+ membank("bank3")->configure_entry(0, memregion("maincpu")->base()+0x030000); // 0x30000 - 0xfffff bank for Raiden 2
+ membank("bank3")->configure_entry(1, memregion("maincpu")->base()+0x230000); // 0x30000 - 0xfffff bank for Raiden DX
raiden2_decrypt_sprites(machine());
@@ -958,18 +958,16 @@ Notes
ROM_START( r2dx_v33 )
- ROM_REGION( 0x400000, "mainprg", 0 ) /* v33 main cpu */
+ ROM_REGION( 0x400000, "maincpu", 0 ) /* v33 main cpu */
ROM_LOAD("prg.223", 0x000000, 0x400000, CRC(b3dbcf98) SHA1(30d6ec2090531c8c579dff74c4898889902d7d87) )
- ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
-
ROM_REGION( 0x040000, "gfx1", 0 ) /* chars */
ROM_LOAD( "fix.613", 0x000000, 0x040000, CRC(3da27e39) SHA1(3d446990bf36dd0a3f8fadb68b15bed54904c8b5) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
ROM_LOAD( "bg.612", 0x000000, 0x400000, CRC(162c61e9) SHA1(bd0a6a29804b84196ba6bf3402e9f30a25da9269) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1.724", 0x000000, 0x400000, CRC(7d218985) SHA1(777241a533defcbea3d7e735f309478d260bad52) )
ROM_LOAD32_WORD( "obj2.725", 0x000002, 0x400000, CRC(891b24d6) SHA1(74f89b47b1ba6b84ddd96d1fae92fddad0ace342) )
@@ -984,18 +982,16 @@ ROM_START( r2dx_v33 )
ROM_END
ROM_START( r2dx_v33_r2 )
- ROM_REGION( 0x400000, "mainprg", 0 ) /* v33 main cpu */
+ ROM_REGION( 0x400000, "maincpu", 0 ) /* v33 main cpu */
ROM_LOAD("prg.223", 0x000000, 0x400000, CRC(b3dbcf98) SHA1(30d6ec2090531c8c579dff74c4898889902d7d87) )
- ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
-
ROM_REGION( 0x040000, "gfx1", 0 ) /* chars */
ROM_LOAD( "fix.613", 0x000000, 0x040000, CRC(3da27e39) SHA1(3d446990bf36dd0a3f8fadb68b15bed54904c8b5) )
ROM_REGION( 0x400000, "gfx2", 0 ) /* background gfx */
ROM_LOAD( "bg.612", 0x000000, 0x400000, CRC(162c61e9) SHA1(bd0a6a29804b84196ba6bf3402e9f30a25da9269) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1.724", 0x000000, 0x400000, CRC(7d218985) SHA1(777241a533defcbea3d7e735f309478d260bad52) )
ROM_LOAD32_WORD( "obj2.725", 0x000002, 0x400000, CRC(891b24d6) SHA1(74f89b47b1ba6b84ddd96d1fae92fddad0ace342) )
@@ -1012,12 +1008,10 @@ ROM_END
// uses dipswitches
ROM_START( nzeroteam ) /* V33 SYSTEM TYPE_B hardware, uses SEI333 (AKA COPX-D3) for protection */
- ROM_REGION( 0x100000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("prg1", 0x000000, 0x80000, CRC(3c7d9410) SHA1(25f2121b6c2be73f11263934266901ed5d64d2ee) )
ROM_LOAD16_BYTE("prg2", 0x000001, 0x80000, CRC(6cba032d) SHA1(bf5d488cd578fff09e62e3650efdee7658033e3f) )
- ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
-
ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
ROM_LOAD( "copx-d3.bin", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) ) /* Not from this set, but same data as Zero Team 2000 & Raiden II New */
@@ -1034,7 +1028,7 @@ ROM_START( nzeroteam ) /* V33 SYSTEM TYPE_B hardware, uses SEI333 (AKA COPX-D3)
ROM_LOAD( "back-1", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) ) /* Same as "MUSHA BACK-1" of other Zero Team sets */
ROM_LOAD( "back-2", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) ) /* Same as "MUSHA BACK-2" of other Zero Team sets */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj-1", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) ) /* Same as "MUSHA OBJ-1" of other Zero Team sets */
ROM_LOAD32_WORD( "obj-2", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) ) /* Same as "MUSHA OBJ-2" of other Zero Team sets */
@@ -1044,12 +1038,10 @@ ROM_END
// uses a 93c46a eeprom
ROM_START( zerotm2k ) /* V33 SYSTEM TYPE_C VER2 hardware, uses SEI333 (AKA COPX-D3) for protection */
- ROM_REGION( 0x100000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x100000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD( "mt28f800b1.u0230", 0x000000, 0x100000, CRC(6ab49d8c) SHA1(d94ec9a46ff98a76c3372369246733268474de99) ) /* SMT rom, PCB silkscreened PRG01 */
/* PCB has unpopulated socket space for two 27C040 at u0224 silkscreened PRG0 & u0226 silkscreened PRG1) */
- ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASEFF ) /* v33 main cpu */
-
ROM_REGION( 0x20000, "math", 0 ) /* SEI333 (AKA COPX-D3) data */
ROM_LOAD( "mx27c1000mc.u0366", 0x00000, 0x20000, CRC(fa2cf3ad) SHA1(13eee40704d3333874b6e3da9ee7d969c6dc662a) ) /* PCB silkscreened 333ROM */
@@ -1067,7 +1059,7 @@ ROM_START( zerotm2k ) /* V33 SYSTEM TYPE_C VER2 hardware, uses SEI333 (AKA COPX-
ROM_LOAD( "mt28f400b1.u0619", 0x100000, 0x080000, CRC(266acee6) SHA1(2a9da66c313a7536c7fb393134b9df0bb122cb2b) ) /* SMT rom, PCB silkscreened BG3 */
/* PCB has an unpopulated socket rom space for a LH535A00D at u0615 for alt BG3 location */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (NOT encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (NOT encrypted) */
ROM_LOAD32_WORD( "musha_obj-1a.u0729", 0x000000, 0x200000, CRC(9b2cf68c) SHA1(cd8cb277091bfa125fd0f68410de39f72f1c7047) ) /* PCB silkscreened OBJ1 */
ROM_LOAD32_WORD( "musha_obj-2a.u0730", 0x000002, 0x200000, CRC(fcabee05) SHA1(b2220c0311b3bd2fd44fb56fff7c27bed0816fe9) ) /* PCB silkscreened OBJ2 */
/* PCB has unpopulated rom space for two SMT roms at u0734 & u0736 for alt OBJ1 & OBJ2 locations) */
diff --git a/src/mame/drivers/raiden2.c b/src/mame/drivers/raiden2.c
index ea24dae528a..45ae8a002cd 100644
--- a/src/mame/drivers/raiden2.c
+++ b/src/mame/drivers/raiden2.c
@@ -974,7 +974,7 @@ static ADDRESS_MAP_START( raiden2_mem, AS_PROGRAM, 16, raiden2_state )
AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("mainbank1")
AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("mainbank2")
- AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000)
+ AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x40000)
ADDRESS_MAP_END
static ADDRESS_MAP_START( raidendx_mem, AS_PROGRAM, 16, raiden2_state )
@@ -1013,7 +1013,7 @@ static ADDRESS_MAP_START( zeroteam_mem, AS_PROGRAM, 16, raiden2_state )
AM_RANGE(0x20000, 0x2ffff) AM_ROMBANK("mainbank1")
AM_RANGE(0x30000, 0x3ffff) AM_ROMBANK("mainbank2")
- AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x40000)
+ AM_RANGE(0x40000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x40000)
ADDRESS_MAP_END
static ADDRESS_MAP_START( xsedae_mem, AS_PROGRAM, 16, raiden2_state )
@@ -1043,7 +1043,7 @@ static ADDRESS_MAP_START( xsedae_mem, AS_PROGRAM, 16, raiden2_state )
AM_RANGE(0x10000, 0x1ffff) AM_RAM
- AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("mainprg", 0x20000)
+ AM_RANGE(0x20000, 0xfffff) AM_ROM AM_REGION("maincpu", 0x20000)
ADDRESS_MAP_END
@@ -1577,7 +1577,7 @@ differences amongst SND/u1110 roms:
*/
ROM_START( raiden2 )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("prg0.u0211", 0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) )
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("prg1.u0212", 0x000001, 0x80000, CRC(4609b5f2) SHA1(272d2aa75b8ea4d133daddf42c4fc9089093df2e) )
@@ -1598,7 +1598,7 @@ ROM_START( raiden2 )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1617,7 +1617,7 @@ ROM_END
ROM_START( raiden2sw ) // original board with serial # 0008307
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("seibu_1.u0211", 0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) )
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("seibu_2.u0212", 0x000001, 0x80000, CRC(59abc2ec) SHA1(45f2dbd2dd46f5da07dae0dc486772f8e61f4c43) )
@@ -1638,7 +1638,7 @@ ROM_START( raiden2sw ) // original board with serial # 0008307
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1674,7 +1674,7 @@ S5 U0724 27C1024 ROM7 966D
*/
ROM_START( raiden2hk )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("prg0.u0211", 0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) ) // rom1
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("rom2e.u0212", 0x000001, 0x80000, CRC(458d619c) SHA1(842bf0eeb5d192a6b188f4560793db8dad697683) )
@@ -1695,7 +1695,7 @@ ROM_START( raiden2hk )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1748,7 +1748,7 @@ CUSTOM: SEI150
*/
ROM_START( raiden2j )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("prg0.u0211", 0x000000, 0x80000, CRC(09475ec4) SHA1(05027f2d8f9e11fcbd485659eda68ada286dae32) ) // rom1
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("rom2j.u0212", 0x000001, 0x80000, CRC(e4e4fb4c) SHA1(7ccf33fe9a1cddf0c7e80d7ed66d615a828b3bb9) )
@@ -1769,7 +1769,7 @@ ROM_START( raiden2j )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1787,7 +1787,7 @@ ROM_START( raiden2j )
ROM_END
ROM_START( raiden2i )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("seibu1.u0211", 0x000000, 0x80000, CRC(c1fc70f5) SHA1(a054f5ae9583972c406d9cf871340d5e072d71a3) ) /* Italian set */
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("seibu2.u0212", 0x000001, 0x80000, CRC(28d5365f) SHA1(21efe29c2d373229c2ff302d86e59c2c94fa6d03) )
@@ -1808,7 +1808,7 @@ ROM_START( raiden2i )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1844,7 +1844,7 @@ http://www.gamefaqs.com/coinop/arcade/game/10729.html
*/
ROM_START( raiden2e )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("r2_prg_0.u0211", 0x000000, 0x80000, CRC(2abc848c) SHA1(1df4276d0074fcf1267757fa0b525a980a520f3d) )
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("r2_prg_1.u0212", 0x000001, 0x80000, CRC(509ade43) SHA1(7cdee7bb00a6a1c7899d10b96385d54c261f6f5a) )
@@ -1865,7 +1865,7 @@ ROM_START( raiden2e )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1883,7 +1883,7 @@ ROM_START( raiden2e )
ROM_END
ROM_START( raiden2ea )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("r2.1.u0211", 0x000000, 0x80000, CRC(d7041be4) SHA1(3cf97132fba6f7b00c9059265f4e9f0bf1505b71) )
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("r2.2.u0212", 0x000001, 0x80000, CRC(bf7577ec) SHA1(98576af78760b8aef1ef3efe1ba963977c89d225) )
@@ -1904,7 +1904,7 @@ ROM_START( raiden2ea )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1922,7 +1922,7 @@ ROM_START( raiden2ea )
ROM_END
ROM_START( raiden2eu ) // same as raiden2ea, different region
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("seibu_1.u0211", 0x000000, 0x80000, CRC(d7041be4) SHA1(3cf97132fba6f7b00c9059265f4e9f0bf1505b71) )
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("seibu_2.u0212", 0x000001, 0x80000, CRC(beb71ddb) SHA1(471399ead1cdc27ac2a1139f9616f828efd14626) )
@@ -1943,7 +1943,7 @@ ROM_START( raiden2eu ) // same as raiden2ea, different region
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -1961,7 +1961,7 @@ ROM_START( raiden2eu ) // same as raiden2ea, different region
ROM_END
ROM_START( raiden2eua ) // sort of a mixture of raiden2e easy set with voice rom of raiden2ea and 2f and a unique sound rom
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("seibu__1.27c020j.u1210", 0x000000, 0x40000, CRC(ED1514E3) SHA1(296125BFE3C4F3033F7AA319DD8554BC978C4A00) )
ROM_RELOAD(0x100000, 0x40000)
ROM_LOAD32_BYTE("seibu__2.27c2001.u1211", 0x000001, 0x40000, CRC(BB6ECF2A) SHA1(D4F628E9D0ED2897654F05A8A2541E1ED3FAF8DD) )
@@ -1986,7 +1986,7 @@ ROM_START( raiden2eua ) // sort of a mixture of raiden2e easy set with voice rom
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -2005,7 +2005,7 @@ ROM_END
ROM_START( raiden2g ) // this is the same code revision as raiden2eua but a german region
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("raiden_2_1.bin", 0x000000, 0x40000, CRC(ed1514e3) SHA1(296125bfe3c4f3033f7aa319dd8554bc978c4a00) )
ROM_RELOAD(0x100000, 0x40000)
ROM_LOAD32_BYTE("raiden_2_2.bin", 0x000001, 0x40000, CRC(bb6ecf2a) SHA1(d4f628e9d0ed2897654f05a8a2541e1ed3faf8dd) )
@@ -2030,7 +2030,7 @@ ROM_START( raiden2g ) // this is the same code revision as raiden2eua but a germ
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -2048,7 +2048,7 @@ ROM_START( raiden2g ) // this is the same code revision as raiden2eua but a germ
ROM_END
ROM_START( raiden2nl )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("1_u0211.bin", 0x000000, 0x80000, CRC(53be3dd0) SHA1(304d118423e4085eea3b883bd625d90d21bb2054) )
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("2_u0212.bin", 0x000001, 0x80000, CRC(88829c08) SHA1(ecdfbafeeffcd009bbc4cf5bf797bcd4b5bfcf50) )
@@ -2069,7 +2069,7 @@ ROM_START( raiden2nl )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -2088,7 +2088,7 @@ ROM_END
ROM_START( raiden2u )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD16_BYTE("1.u0211", 0x000000, 0x80000, CRC(b16df955) SHA1(9b7fd85cf2f2c9fea657f3c38abafa93673b3933) )
ROM_RELOAD(0x100000, 0x80000)
ROM_LOAD16_BYTE("2.u0212", 0x000001, 0x80000, CRC(2a14b112) SHA1(84cd9891b5be0b71b2bae3487ad38bed3045305e) )
@@ -2109,7 +2109,7 @@ ROM_START( raiden2u )
ROM_LOAD( "raiden_2_seibu_bg-1.u0714", 0x000000, 0x200000, CRC(e61ad38e) SHA1(63b06cd38db946ad3fc5c1482dc863ef80b58fec) ) /* Soldered MASK ROM */
ROM_LOAD( "raiden_2_seibu_bg-2.u075", 0x200000, 0x200000, CRC(a694a4bb) SHA1(39c2614d0effc899fe58f735604283097769df77) ) /* Soldered MASK ROM */
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Soldered MASK ROM */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-3.u0837", 0x400000, 0x200000, CRC(897a0322) SHA1(abb2737a2446da5b364fc2d96524b43d808f4126) ) /* Soldered MASK ROM */
@@ -2128,7 +2128,7 @@ ROM_END
ROM_START( raiden2dx ) // this set is very weird, it's Raiden II on a Raiden DX board, I'm assuming for now that it uses Raiden DX graphics, but could be wrong.
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("u1210.bin", 0x000000, 0x80000, CRC(413241e0) SHA1(50fa501db91412baea474a8faf8ad483f3a119c7) )
ROM_LOAD32_BYTE("prg1_u1211.bin", 0x000001, 0x80000, CRC(93491f56) SHA1(2239980fb7267906e4c3985703c2dc2932b23705) )
ROM_LOAD32_BYTE("u129.bin", 0x000002, 0x80000, CRC(e0932b6c) SHA1(04f1ca885d220e802023042438f63e40e4106696) )
@@ -2150,7 +2150,7 @@ ROM_START( raiden2dx ) // this set is very weird, it's Raiden II on a Raiden DX
ROM_LOAD( "dx_back1.1s", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back2.2s", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "obj2", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj3.4k", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2166,7 +2166,7 @@ ROM_END
/* Raiden DX sets */
ROM_START( raidendx )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1d.4n", 0x000000, 0x80000, CRC(14d725fc) SHA1(f12806f64f069fdc4ee29b309a32f7ca00b36f93) )
ROM_LOAD32_BYTE("2d.4p", 0x000001, 0x80000, CRC(5e7e45cb) SHA1(94eff893b5335c522f1c063c3175b9bac87b0a25) )
ROM_LOAD32_BYTE("3d.6n", 0x000002, 0x80000, CRC(f0a47e67) SHA1(8cbd21993077b2e01295db6e343cae9e0e4bfefe) )
@@ -2187,7 +2187,7 @@ ROM_START( raidendx )
ROM_LOAD( "dx_back1.1s", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back2.2s", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "obj2", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj3.4k", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2201,7 +2201,7 @@ ROM_START( raidendx )
ROM_END
ROM_START( raidendxa1 )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("dx_1h.4n", 0x000000, 0x80000, BAD_DUMP CRC(7624c36b) SHA1(84c17f2988031210d06536710e1eac558f4290a1) ) // bad
ROM_LOAD32_BYTE("dx_2h.4p", 0x000001, 0x80000, CRC(4940fdf3) SHA1(c87e307ed7191802583bee443c7c8e4f4e33db25) )
ROM_LOAD32_BYTE("dx_3h.6n", 0x000002, 0x80000, CRC(6c495bcf) SHA1(fb6153ecc443dabc829dda6f8d11234ad48de88a) )
@@ -2222,7 +2222,7 @@ ROM_START( raidendxa1 )
ROM_LOAD( "dx_back1.1s", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back2.2s", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "obj2", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj3.4k", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2236,7 +2236,7 @@ ROM_START( raidendxa1 )
ROM_END
ROM_START( raidendxa2 )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1d.bin", 0x000000, 0x80000, CRC(22b155ae) SHA1(388151e2c8fb301bd5bc66a974e9fe16816ae0bc) )
ROM_LOAD32_BYTE("2d.bin", 0x000001, 0x80000, CRC(2be98ca8) SHA1(491e990405b0ad3de45bdbcc2453af9215ae19c8) )
ROM_LOAD32_BYTE("3d.bin", 0x000002, 0x80000, CRC(b4785576) SHA1(aa5eee7b0c635c6d18a7fc1e037bf570a677dd90) )
@@ -2257,7 +2257,7 @@ ROM_START( raidendxa2 )
ROM_LOAD( "dx_back1.1s", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back2.2s", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "obj2", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj3.4k", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2271,7 +2271,7 @@ ROM_START( raidendxa2 )
ROM_END
ROM_START( raidendxk )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("rdxj_1.bin", 0x000000, 0x80000, CRC(b5b32885) SHA1(fb3c592b2436d347103c17bd765176062be95fa2) )
ROM_LOAD32_BYTE("rdxj_2.bin", 0x000001, 0x80000, CRC(7efd581d) SHA1(4609a0d8afb3d62a38b461089295efed47beea91) )
ROM_LOAD32_BYTE("rdxj_3.bin", 0x000002, 0x80000, CRC(55ec0e1d) SHA1(6be7f268df51311a817c1c329a578b38abb659ae) )
@@ -2292,7 +2292,7 @@ ROM_START( raidendxk )
ROM_LOAD( "dx_back1.1s", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back2.2s", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "obj2", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj3.4k", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2306,7 +2306,7 @@ ROM_START( raidendxk )
ROM_END
ROM_START( raidendxu )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1a.u1210", 0x000000, 0x80000, CRC(53e63194) SHA1(a957330e14649cf46ad27fb99c460576c59e60b1) )
ROM_LOAD32_BYTE("2a.u1211", 0x000001, 0x80000, CRC(ec8d1647) SHA1(5ceae132c6c09d6bb8565e9141ee1170bbdfd5fc) )
ROM_LOAD32_BYTE("3a.u129", 0x000002, 0x80000, CRC(7dbfd73d) SHA1(43cb1dbc3ccbded64fc300c262d1fd528e0391a2) )
@@ -2327,7 +2327,7 @@ ROM_START( raidendxu )
ROM_LOAD( "dx_back1.1s", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back2.2s", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "obj2", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj3.4k", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2341,7 +2341,7 @@ ROM_START( raidendxu )
ROM_END
ROM_START( raidendxg )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1d.u1210", 0x000000, 0x80000, CRC(14d725fc) SHA1(f12806f64f069fdc4ee29b309a32f7ca00b36f93) )
ROM_LOAD32_BYTE("2d.u1211", 0x000001, 0x80000, CRC(5e7e45cb) SHA1(94eff893b5335c522f1c063c3175b9bac87b0a25) )
ROM_LOAD32_BYTE("3d.u129", 0x000002, 0x80000, CRC(f0a47e67) SHA1(8cbd21993077b2e01295db6e343cae9e0e4bfefe) )
@@ -2362,7 +2362,7 @@ ROM_START( raidendxg )
ROM_LOAD( "dx_back-1.u075", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back-2.u0714", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj-3.u0837", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2377,7 +2377,7 @@ ROM_END
ROM_START( raidendxnl )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("u1210_4n.bin", 0x000000, 0x80000, CRC(c589019a) SHA1(9bdd7f7d0bca16d67ba234d8a1fed5d2c8ab7191) )
ROM_LOAD32_BYTE("u1211_4p.bin", 0x000001, 0x80000, CRC(b2222254) SHA1(b0e41d88111a96f0c0fb11b20ea99f436e8d493d) )
ROM_LOAD32_BYTE("u129_6n.bin", 0x000002, 0x80000, CRC(60f04634) SHA1(50f1b721a017d879838d920cf5d5355aa024e09b) )
@@ -2398,7 +2398,7 @@ ROM_START( raidendxnl )
ROM_LOAD( "dx_back-1.u075", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back-2.u0714", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj-3.u0837", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2413,7 +2413,7 @@ ROM_END
ROM_START( raidendxj )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("rdxj_1.u1211", 0x000000, 0x80000, CRC(5af382e1) SHA1(a11fc181da322f484815f55a510ce7e6c7df2d60) )
ROM_LOAD32_BYTE("rdxj_2.u0212", 0x000001, 0x80000, CRC(899966fc) SHA1(0f91c2b05a44afb4c4b74e115a8fa530fb6d6414) )
ROM_LOAD32_BYTE("rdxj_3.u129", 0x000002, 0x80000, CRC(e7f08013) SHA1(1f99672d8fdbda847c6552da210c417b21ca78ac) )
@@ -2434,7 +2434,7 @@ ROM_START( raidendxj )
ROM_LOAD( "dx_back-1.u075", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back-2.u0714", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-1.u0811", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "raiden_2_seibu_obj-2.u082", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj-3.u0837", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2450,7 +2450,7 @@ ROM_END
ROM_START( raidendxch )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("rdxc_1.u1210", 0x000000, 0x80000, CRC(2154c6ae) SHA1(dc794f8ddbd8a6267db37fe4e3ed44e06e9b84b7) )
ROM_LOAD32_BYTE("rdxc_2.u1211", 0x000001, 0x80000, CRC(73bb74b7) SHA1(2f197adbe89d96c9e75054c568c380fdd2e80162))
ROM_LOAD32_BYTE("rdxc_3.u129", 0x000002, 0x80000, CRC(50f0a6aa) SHA1(68579f8e73fe06b458368ac9cac0b33370cf3b4e))
@@ -2472,7 +2472,7 @@ ROM_START( raidendxch )
ROM_LOAD( "dx_back1.1s", 0x000000, 0x200000, CRC(90970355) SHA1(d71d57cd550a800f583550365102adb7b1b779fc) )
ROM_LOAD( "dx_back2.2s", 0x200000, 0x200000, CRC(5799af3e) SHA1(85d6532abd769da77bcba70bd2e77915af40f987) )
- ROM_REGION( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", 0 ) /* sprite gfx (encrypted) */
ROM_LOAD32_WORD( "obj1", 0x000000, 0x200000, CRC(ff08ef0b) SHA1(a1858430e8171ca8bab785457ef60e151b5e5cf1) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "obj2", 0x000002, 0x200000, CRC(638eb771) SHA1(9774cc070e71668d7d1d20795502dccd21ca557b) ) /* Shared with original Raiden 2 */
ROM_LOAD32_WORD( "dx_obj3.4k", 0x400000, 0x200000, CRC(ba381227) SHA1(dfc4d659aca1722a981fa56a31afabe66f444d5d) )
@@ -2579,7 +2579,7 @@ Notes:
ROM_START( zeroteam ) // Fabtek, US licensee, displays 'USA' under zero team logo, board had serial 'Seibu Kaihatsu No. 0001468' on it, as well as AAMA 0458657
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("seibu__1.u024.5k", 0x000000, 0x40000, CRC(25aa5ba4) SHA1(40e6047620fbd195c87ac3763569af099096eff9) ) // alternate label "1"
ROM_LOAD32_BYTE("seibu__3.u023.6k", 0x000002, 0x40000, CRC(ec79a12b) SHA1(515026a2fca92555284ac49818499af7395783d3) ) // alternate label "3"
ROM_LOAD32_BYTE("seibu__2.u025.6l", 0x000001, 0x40000, CRC(54f3d359) SHA1(869744185746d55c60d2f48eabe384a8499e00fd) ) // alternate label "2"
@@ -2601,7 +2601,7 @@ ROM_START( zeroteam ) // Fabtek, US licensee, displays 'USA' under zero team log
ROM_LOAD( "musha_back-1.u075.4s", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
ROM_LOAD( "musha_back-2.u0714.2s", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
ROM_LOAD32_WORD( "musha_obj-1.u0811.6f", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
ROM_LOAD32_WORD( "musha_obj-2.u082.5f", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
@@ -2616,7 +2616,7 @@ ROM_START( zeroteam ) // Fabtek, US licensee, displays 'USA' under zero team log
ROM_END
ROM_START( zeroteama ) // No licensee, original japan?
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1.u024.5k", 0x000000, 0x40000, CRC(bd7b3f3a) SHA1(896413901a429d0efa3290f61920063c81730e9b) )
ROM_LOAD32_BYTE("3.u023.6k", 0x000002, 0x40000, CRC(19e02822) SHA1(36c9b887eaa9b9b67d65c55e8f7eefd08fe0be15) )
ROM_LOAD32_BYTE("2.u025.6l", 0x000001, 0x40000, CRC(0580b7e8) SHA1(d4416264aa5acdaa781ebcf51f128b3e665cc903) )
@@ -2638,7 +2638,7 @@ ROM_START( zeroteama ) // No licensee, original japan?
ROM_LOAD( "musha_back-1.u075.4s", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
ROM_LOAD( "musha_back-2.u0714.2s", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
ROM_LOAD32_WORD( "musha_obj-1.u0811.6f", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
ROM_LOAD32_WORD( "musha_obj-2.u082.5f", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
@@ -2660,7 +2660,7 @@ problem of the 3.6v lithium battery dying and the missing keys to cause the spri
// sets, using the sound and char roms from us set and code from later japan set. This would make sense if it was dumped
// from a 'fixed, suicide free' modified us board where someone swapped in the later suicideless japan code roms.
ROM_START( zeroteamb ) // No licensee, later japan?
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1b.u024.5k", 0x000000, 0x40000, CRC(157743d0) SHA1(f9c84c9025319f76807ef0e79f1ee1599f915b45) )
ROM_LOAD32_BYTE("3b.u023.6k", 0x000002, 0x40000, CRC(fea7e4e8) SHA1(08c4bdff82362ae4bcf86fa56fcfc384bbf82b71) )
ROM_LOAD32_BYTE("2b.u025.6l", 0x000001, 0x40000, CRC(21d68f62) SHA1(8aa85b38e8f36057ef6c7dce5a2878958ce93ce8) )
@@ -2682,7 +2682,7 @@ ROM_START( zeroteamb ) // No licensee, later japan?
ROM_LOAD( "musha_back-1.u075.4s", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
ROM_LOAD( "musha_back-2.u0714.2s", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
ROM_LOAD32_WORD( "musha_obj-1.u0811.6f", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
ROM_LOAD32_WORD( "musha_obj-2.u082.5f", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
@@ -2697,7 +2697,7 @@ ROM_START( zeroteamb ) // No licensee, later japan?
ROM_END
ROM_START( zeroteamc ) // Liang Hwa, Taiwan licensee, no special word under logo on title
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("b1.u024.5k", 0x000000, 0x40000, CRC(528de3b9) SHA1(9ca8cdc0212f2540e852d20ab4c04f68b967d024) )
ROM_LOAD32_BYTE("b3.u023.6k", 0x000002, 0x40000, CRC(3688739a) SHA1(f98f461fb8e7804b3b4020a5e3762d36d6458a62) )
ROM_LOAD32_BYTE("b2.u025.6l", 0x000001, 0x40000, CRC(5176015e) SHA1(6b372564b2f1b1f56cae0c98f4ca588b784bfa3d) )
@@ -2719,7 +2719,7 @@ ROM_START( zeroteamc ) // Liang Hwa, Taiwan licensee, no special word under logo
ROM_LOAD( "musha_back-1.u075.4s", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
ROM_LOAD( "musha_back-2.u0714.2s", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
ROM_LOAD32_WORD( "musha_obj-1.u0811.6f", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
ROM_LOAD32_WORD( "musha_obj-2.u082.5f", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
@@ -2735,7 +2735,7 @@ ROM_END
ROM_START( zeroteamd ) // Dream Soft, Korea licensee, no special word under logo on title; board had serial 'no 1041' on it.
// this is weird, on other zt sets the rom order is 1 3 2 4, but this one is 1 3 4 2. blame seibu or whoever marked the roms, which were labeled in pen
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1.d.u024.5k", 0x000000, 0x40000, CRC(6CC279BE) SHA1(63143BA3105D24D133E60FFDB3EDC2CEB2D5DC5B) )
ROM_LOAD32_BYTE("3.d.u023.6k", 0x000002, 0x40000, CRC(0212400D) SHA1(28F77B5FDDB9D724B735C3FF2255BD518B166E67) )
ROM_LOAD32_BYTE("4.d.u025.6l", 0x000001, 0x40000, CRC(08813EBB) SHA1(454779CEC2FD0E71B72F7161E7D9334893EE42DE) )
@@ -2757,7 +2757,7 @@ ROM_START( zeroteamd ) // Dream Soft, Korea licensee, no special word under logo
ROM_LOAD( "musha_back-1.u075.4s", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
ROM_LOAD( "musha_back-2.u0714.2s", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
ROM_LOAD32_WORD( "musha_obj-1.u0811.6f", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
ROM_LOAD32_WORD( "musha_obj-2.u082.5f", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
@@ -2773,7 +2773,7 @@ ROM_END
// A version of the above exists (which dr.kitty used to own) which DOES have 'Korea' under the logo on title, needs dumping
ROM_START( zeroteams ) // No license, displays 'Selection' under logo
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1_sel.bin", 0x000000, 0x40000, CRC(d99d6273) SHA1(21dccd5d71c720b8364406835812b3c9defaff6c) )
ROM_LOAD32_BYTE("3_sel.bin", 0x000002, 0x40000, CRC(0a9fe0b1) SHA1(3588fe19788f77d07e9b5ab8182b94362ffd0024) )
ROM_LOAD32_BYTE("2_sel.bin", 0x000001, 0x40000, CRC(4e114e74) SHA1(fcccbb68c6b7ffe8d109ed3a1ec9120d338398f9) )
@@ -2795,7 +2795,7 @@ ROM_START( zeroteams ) // No license, displays 'Selection' under logo
ROM_LOAD( "musha_back-1.u075.4s", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
ROM_LOAD( "musha_back-2.u0714.2s", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
ROM_LOAD32_WORD( "musha_obj-1.u0811.6f", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
ROM_LOAD32_WORD( "musha_obj-2.u082.5f", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
@@ -2822,7 +2822,7 @@ Next, turn off power and reinsert the old code roms, and the pcb should now have
*/
ROM_START( zeroteamsr )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("zteam1.u24", 0x000000, 0x40000, CRC(c531e009) SHA1(731881fca3dc0a8269ecdd295ba7119d93c892e7) )
ROM_LOAD32_BYTE("zteam3.u23", 0x000002, 0x40000, CRC(1f988808) SHA1(b1fcb8c96e57c4942bc032d42408d7289c6a3681) )
ROM_LOAD32_BYTE("zteam2.u25", 0x000001, 0x40000, CRC(b7234b93) SHA1(35bc093e8ad4bce1d2130a392ed1b9487a5642a1) )
@@ -2844,7 +2844,7 @@ ROM_START( zeroteamsr )
ROM_LOAD( "musha_back-1.u075.4s", 0x000000, 0x100000, CRC(8b7f9219) SHA1(3412b6f8a4fe245e521ddcf185a53f2f4520eb57) )
ROM_LOAD( "musha_back-2.u0714.2s", 0x100000, 0x080000, CRC(ce61c952) SHA1(52a843c8ba428b121fab933dd3b313b2894d80ac) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (encrypted) (diff encrypt to raiden2? ) */
ROM_LOAD32_WORD( "musha_obj-1.u0811.6f", 0x000000, 0x200000, CRC(45be8029) SHA1(adc164f9dede9a86b96a4d709e9cba7d2ad0e564) )
ROM_LOAD32_WORD( "musha_obj-2.u082.5f", 0x000002, 0x200000, CRC(cb61c19d) SHA1(151a2ce9c32f3321a974819e9b165dddc31c8153) )
@@ -2897,7 +2897,7 @@ Notes:
*/
ROM_START( xsedae )
- ROM_REGION( 0x200000, "mainprg", 0 ) /* v30 main cpu */
+ ROM_REGION( 0x200000, "maincpu", 0 ) /* v30 main cpu */
ROM_LOAD32_BYTE("1.u024", 0x000000, 0x40000, CRC(185437f9) SHA1(e46950b6a549d11dc57105dd7d9cb512a8ecbe70) )
ROM_LOAD32_BYTE("2.u025", 0x000001, 0x40000, CRC(a2b052df) SHA1(e8bf9ab3d5d4e601ea9386e1f2d4e017b025407e) )
ROM_LOAD32_BYTE("3.u023", 0x000002, 0x40000, CRC(293fd6c1) SHA1(8b1a231f4bedbf9c0f347330e13fdf092b9888b4) )
@@ -2920,7 +2920,7 @@ ROM_START( xsedae )
ROM_LOAD( "bg-1.u075", 0x000000, 0x100000, CRC(ac087560) SHA1(b6473b20c55ec090961cfc46a024b3c5b707ec25) )
ROM_LOAD( "7.u0714", 0x100000, 0x080000, CRC(296105dc) SHA1(c2b80d681646f504b03c2dde13e37b1d820f82d2) )
- ROM_REGION( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (not encrypted) */
+ ROM_REGION32_LE( 0x800000, "gfx3", ROMREGION_ERASEFF ) /* sprite gfx (not encrypted) */
ROM_LOAD32_WORD( "obj-1.u0811", 0x000000, 0x200000, CRC(6ae993eb) SHA1(d9713c79eacb4b3ce5e82dd3ce39003e3a433d8f) )
ROM_LOAD32_WORD( "obj-2.u082", 0x000002, 0x200000, CRC(26c806ee) SHA1(899a76a1b3f933c6f5cb6b5dcdf5b58e1b7e49c6) )
@@ -2991,8 +2991,8 @@ DRIVER_INIT_MEMBER(raiden2_state,raiden2)
init_blending(raiden_blended_colors);
static const int spri[5] = { 0, 1, 2, 3, -1 };
cur_spri = spri;
- membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
- membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
+ membank("mainbank1")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
+ membank("mainbank2")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
raiden2_decrypt_sprites(machine());
}
@@ -3001,8 +3001,8 @@ DRIVER_INIT_MEMBER(raiden2_state,raidendx)
init_blending(raiden_blended_colors);
static const int spri[5] = { 0, 1, 2, 3, -1 };
cur_spri = spri;
- membank("mainbank1")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000);
- membank("mainbank2")->configure_entries(0, 0x20, memregion("mainprg")->base(), 0x10000);
+ membank("mainbank1")->configure_entries(0, 0x20, memregion("maincpu")->base(), 0x10000);
+ membank("mainbank2")->configure_entries(0, 0x20, memregion("maincpu")->base(), 0x10000);
raiden2_decrypt_sprites(machine());
}
@@ -3037,8 +3037,8 @@ DRIVER_INIT_MEMBER(raiden2_state,zeroteam)
init_blending(zeroteam_blended_colors);
static const int spri[5] = { -1, 0, 1, 2, 3 };
cur_spri = spri;
- membank("mainbank1")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
- membank("mainbank2")->configure_entries(0, 4, memregion("mainprg")->base(), 0x10000);
+ membank("mainbank1")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
+ membank("mainbank2")->configure_entries(0, 4, memregion("maincpu")->base(), 0x10000);
zeroteam_decrypt_sprites(machine());
}
diff --git a/src/mame/drivers/re900.c b/src/mame/drivers/re900.c
index 7c9bfe36b09..748c27d9c62 100644
--- a/src/mame/drivers/re900.c
+++ b/src/mame/drivers/re900.c
@@ -45,8 +45,8 @@
How to play...
- This Roulette allow up to 6 players. To start the machine, turn the Operator Key
- (the the Operator Key light will turn green). Whilest this key is turned ON, you
+ This Roulette allows up to 6 players. To start the machine, turn the Operator Key
+ (the Operator Key light will turn green). Whilst this key is turned ON, you
can insert credits, play, and payout. Once the key is turned OFF (red light), you
can play, but credits can't be entered/taken.
diff --git a/src/mame/drivers/relief.c b/src/mame/drivers/relief.c
index d1656c2db54..d1c6d4d1237 100644
--- a/src/mame/drivers/relief.c
+++ b/src/mame/drivers/relief.c
@@ -50,10 +50,10 @@ MACHINE_RESET_MEMBER(relief_state,relief)
{
atarigen_state::machine_reset();
- m_oki->set_bank_base(0);
+ m_adpcm_bank = 0;
+ m_okibank->set_entry(m_adpcm_bank);
m_ym2413_volume = 15;
m_overall_volume = 127;
- m_adpcm_bank_base = 0;
}
@@ -85,12 +85,12 @@ WRITE16_MEMBER(relief_state::audio_control_w)
{
m_ym2413_volume = (data >> 1) & 15;
set_ym2413_volume((m_ym2413_volume * m_overall_volume * 100) / (127 * 15));
- m_adpcm_bank_base = (0x040000 * ((data >> 6) & 3)) | (m_adpcm_bank_base & 0x100000);
+ m_adpcm_bank = ((data >> 6) & 3) | (m_adpcm_bank & 4);
}
if (ACCESSING_BITS_8_15)
- m_adpcm_bank_base = (0x100000 * ((data >> 8) & 1)) | (m_adpcm_bank_base & 0x0c0000);
+ m_adpcm_bank = (((data >> 8) & 1)<<2) | (m_adpcm_bank & 3);
- m_oki->set_bank_base(m_adpcm_bank_base);
+ m_okibank->set_entry(m_adpcm_bank);
}
@@ -104,6 +104,10 @@ WRITE16_MEMBER(relief_state::audio_volume_w)
}
}
+static ADDRESS_MAP_START( oki_map, AS_0, 8, relief_state )
+ AM_RANGE(0x00000, 0x1ffff) AM_ROMBANK("okibank")
+ AM_RANGE(0x20000, 0x3ffff) AM_ROM
+ADDRESS_MAP_END
/*************************************
@@ -295,6 +299,7 @@ static MACHINE_CONFIG_START( relief, relief_state )
MCFG_OKIM6295_ADD("oki", ATARI_CLOCK_14MHz/4/3, OKIM6295_PIN7_LOW)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MCFG_SOUND_ADD("ymsnd", YM2413, ATARI_CLOCK_14MHz/4)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
@@ -324,9 +329,9 @@ ROM_START( relief )
ROM_LOAD( "136093-0028a.10d", 0x180000, 0x80000, CRC(55fb9111) SHA1(a95508f0831842fa79ca2fc168cfadc8c6d3fbd4) )
ROM_LOAD16_BYTE( "136093-0029a.4d", 0x200001, 0x40000, CRC(e4593ff4) SHA1(7360ec7a65aabc90aa787dc30f39992e342495dd) )
- ROM_REGION( 0x200000, "oki", 0 ) /* 2MB for ADPCM data */
- ROM_LOAD( "136093-0030a.9b", 0x100000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
- ROM_LOAD( "136093-0031a.10b", 0x180000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
+ ROM_REGION( 0x100000, "oki", 0 ) /* 2MB for ADPCM data */
+ ROM_LOAD( "136093-0030a.9b", 0x000000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
+ ROM_LOAD( "136093-0031a.10b", 0x080000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
ROM_REGION( 0x800, "eeprom:eeprom", 0 )
ROM_LOAD( "relief-eeprom.bin", 0x0000, 0x800, CRC(66069f60) SHA1(fac3797888f7ffe972f642aca44c6ca7d208c814) )
@@ -359,9 +364,9 @@ ROM_START( relief2 )
ROM_LOAD( "136093-0028a.10d", 0x180000, 0x80000, CRC(55fb9111) SHA1(a95508f0831842fa79ca2fc168cfadc8c6d3fbd4) )
ROM_LOAD16_BYTE( "136093-0029.4d", 0x200001, 0x40000, CRC(e4593ff4) SHA1(7360ec7a65aabc90aa787dc30f39992e342495dd) )
- ROM_REGION( 0x200000, "oki", 0 ) /* 2MB for ADPCM data */
- ROM_LOAD( "136093-0030a.9b", 0x100000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
- ROM_LOAD( "136093-0031a.10b", 0x180000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
+ ROM_REGION( 0x100000, "oki", 0 ) /* 2MB for ADPCM data */
+ ROM_LOAD( "136093-0030a.9b", 0x000000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
+ ROM_LOAD( "136093-0031a.10b", 0x080000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
ROM_REGION( 0x800, "eeprom:eeprom", 0 )
ROM_LOAD( "relief2-eeprom.bin", 0x0000, 0x800, CRC(2131fc40) SHA1(72a9f5f6647fbc74e645b6639db2fdbfbe6456e2) )
@@ -393,9 +398,9 @@ ROM_START( relief3 )
ROM_LOAD( "136093-0028a.10d", 0x180000, 0x80000, CRC(55fb9111) SHA1(a95508f0831842fa79ca2fc168cfadc8c6d3fbd4) )
ROM_LOAD16_BYTE( "136093-0029.4d", 0x200001, 0x40000, CRC(e4593ff4) SHA1(7360ec7a65aabc90aa787dc30f39992e342495dd) )
- ROM_REGION( 0x200000, "oki", 0 ) /* 2MB for ADPCM data */
- ROM_LOAD( "136093-0030a.9b", 0x100000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
- ROM_LOAD( "136093-0031a.10b", 0x180000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
+ ROM_REGION( 0x100000, "oki", 0 ) /* 2MB for ADPCM data */
+ ROM_LOAD( "136093-0030a.9b", 0x000000, 0x80000, CRC(f4c567f5) SHA1(7e8c1d54d918b0b41625eacbaf6dcb5bd99d1949) )
+ ROM_LOAD( "136093-0031a.10b", 0x080000, 0x80000, CRC(ba908d73) SHA1(a83afd86f4c39394cf624b728a87b8d8b6de1944) )
ROM_REGION( 0x800, "eeprom:eeprom", 0 )
ROM_LOAD( "relief3-eeprom.bin", 0x0000, 0x800, CRC(2131fc40) SHA1(72a9f5f6647fbc74e645b6639db2fdbfbe6456e2) )
@@ -421,29 +426,12 @@ ROM_END
DRIVER_INIT_MEMBER(relief_state,relief)
{
- UINT8 *sound_base = memregion("oki")->base();
-
- /* expand the ADPCM data to avoid lots of memcpy's during gameplay */
- /* the upper 128k is fixed, the lower 128k is bankswitched */
- memcpy(&sound_base[0x000000], &sound_base[0x100000], 0x20000);
- memcpy(&sound_base[0x040000], &sound_base[0x100000], 0x20000);
- memcpy(&sound_base[0x080000], &sound_base[0x140000], 0x20000);
- memcpy(&sound_base[0x0c0000], &sound_base[0x160000], 0x20000);
- memcpy(&sound_base[0x100000], &sound_base[0x180000], 0x20000);
- memcpy(&sound_base[0x140000], &sound_base[0x1a0000], 0x20000);
- memcpy(&sound_base[0x180000], &sound_base[0x1c0000], 0x20000);
- memcpy(&sound_base[0x1c0000], &sound_base[0x1e0000], 0x20000);
-
- memcpy(&sound_base[0x020000], &sound_base[0x120000], 0x20000);
- memcpy(&sound_base[0x060000], &sound_base[0x120000], 0x20000);
- memcpy(&sound_base[0x0a0000], &sound_base[0x120000], 0x20000);
- memcpy(&sound_base[0x0e0000], &sound_base[0x120000], 0x20000);
- memcpy(&sound_base[0x160000], &sound_base[0x120000], 0x20000);
- memcpy(&sound_base[0x1a0000], &sound_base[0x120000], 0x20000);
- memcpy(&sound_base[0x1e0000], &sound_base[0x120000], 0x20000);
+ m_okibank->configure_entries(0, 8, memregion("oki")->base(), 0x20000);
+ m_okibank->set_entry(0);
}
+
/*************************************
*
diff --git a/src/mame/drivers/renegade.c b/src/mame/drivers/renegade.c
index 4c662aa1bbb..c5fb2e92981 100644
--- a/src/mame/drivers/renegade.c
+++ b/src/mame/drivers/renegade.c
@@ -108,101 +108,62 @@ $8000 - $ffff ROM
#include "includes/renegade.h"
-/********************************************************************************************/
+/**************************************************************************/
+/* ADPCM sound
+**
+** Inferred from the 6809 code and analogy with ddragon
+** NMI at end of sample is not needed in order for
+** playback to work, but seems to be what the code expects
+*/
-const device_type RENEGADE_ADPCM = &device_creator<renegade_adpcm_device>;
-
-renegade_adpcm_device::renegade_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
- : device_t(mconfig, RENEGADE_ADPCM, "Renegade ADPCM Custom", tag, owner, clock, "renegade_adpcm", __FILE__),
- device_sound_interface(mconfig, *this),
- m_stream(NULL),
- m_current(0),
- m_end(0),
- m_nibble(0),
- m_playing(0),
- m_base(NULL)
+WRITE8_MEMBER(renegade_state::adpcm_start_w)
{
+ m_msm->reset_w(0);
+ m_adpcm_playing = true;
}
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void renegade_adpcm_device::device_config_complete()
+WRITE8_MEMBER(renegade_state::adpcm_addr_w)
{
+ // table at $CB52 in audiocpu program:
+ // 38 38 39 3A 3B 34 35 36 37 2C 2D 2E 2F
+ //
+ // bits 2-4 are active-low chip select; bit 5 is always set
+ // (chip select for an unpopulated fourth ROM?)
+ switch (data & 0x1c)
+ {
+ case 0x18: m_adpcm_pos = 0 * 0x8000 * 2; break; // 110 -> ic33
+ case 0x14: m_adpcm_pos = 1 * 0x8000 * 2; break; // 101 -> ic32
+ case 0x0c: m_adpcm_pos = 2 * 0x8000 * 2; break; // 011 -> ic31
+ default: m_adpcm_pos = m_adpcm_end = 0; return; // doesn't happen
+ }
+ // bits 0-1 are a13-a14
+ m_adpcm_pos |= (data & 0x03) * 0x2000 * 2;
+ // a0-a12 are driven by a binary counter; playback ends when it rolls over
+ m_adpcm_end = m_adpcm_pos + 0x2000 * 2;
}
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void renegade_adpcm_device::device_start()
+WRITE8_MEMBER(renegade_state::adpcm_stop_w)
{
- m_playing = 0;
- m_stream = machine().sound().stream_alloc(*this, 0, 1, clock());
- m_base = machine().root_device().memregion("adpcm")->base();
- m_adpcm.reset();
-
- save_item(NAME(m_current));
- save_item(NAME(m_end));
- save_item(NAME(m_nibble));
- save_item(NAME(m_playing));
+ m_msm->reset_w(1);
+ m_adpcm_playing = false;
}
-//-------------------------------------------------
-// sound_stream_update - handle a stream update
-//-------------------------------------------------
-
-void renegade_adpcm_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
+WRITE_LINE_MEMBER(renegade_state::adpcm_int)
{
- stream_sample_t *dest = outputs[0];
+ if (!m_adpcm_playing) return;
- while (m_playing && samples > 0)
+ if (m_adpcm_pos >= m_adpcm_end)
{
- int val = (m_base[m_current] >> m_nibble) & 15;
-
- m_nibble ^= 4;
- if (m_nibble == 4)
- {
- m_current++;
- if (m_current >= m_end)
- m_playing = 0;
- }
-
- *dest++ = m_adpcm.clock(val) << 4;
- samples--;
+ m_msm->reset_w(1);
+ m_adpcm_playing = false;
+ m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
}
- while (samples > 0)
- {
- *dest++ = 0;
- samples--;
- }
-}
-
-
-WRITE8_MEMBER(renegade_adpcm_device::play_w)
-{
- int offs = (data - 0x2c) * 0x2000;
- int len = 0x2000 * 2;
-
- /* kludge to avoid reading past end of ROM */
- if (offs + len > 0x20000)
- len = 0x1000;
-
- if (offs >= 0 && offs+len <= 0x20000)
+ else
{
- m_stream->update();
- m_adpcm.reset();
-
- m_current = offs;
- m_end = offs + len/2;
- m_nibble = 4;
- m_playing = 1;
+ UINT8 const data = m_adpcmrom[m_adpcm_pos / 2];
+ m_msm->data_w(m_adpcm_pos & 1 ? data & 0xf : data >> 4);
+ m_adpcm_pos++;
}
- else
- logerror("out of range adpcm command: 0x%02x\n", data);
}
WRITE8_MEMBER(renegade_state::sound_w)
@@ -211,7 +172,7 @@ WRITE8_MEMBER(renegade_state::sound_w)
m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
}
-/********************************************************************************************/
+/**************************************************************************/
/* MCU Simulation
**
** Renegade and Nekketsu Kouha Kunio Kun MCU behaviors are identical,
@@ -230,21 +191,17 @@ static const UINT8 kuniokun_xor_table[0x2a] =
0x68, 0x60
};
-void renegade_state::setbank()
-{
- UINT8 *RAM = memregion("maincpu")->base();
- membank("bank1")->set_base(&RAM[m_bank ? 0x10000 : 0x4000]);
-}
-
void renegade_state::machine_start()
{
+ m_rombank->configure_entries(0, 2, memregion("maincpu")->base(), 0x4000);
+
+ save_item(NAME(m_adpcm_pos));
+ save_item(NAME(m_adpcm_end));
+ save_item(NAME(m_adpcm_playing));
save_item(NAME(m_mcu_buffer));
save_item(NAME(m_mcu_input_size));
save_item(NAME(m_mcu_output_byte));
save_item(NAME(m_mcu_key));
-
- save_item(NAME(m_bank));
- machine().save().register_postload(save_prepost_delegate(FUNC(renegade_state::setbank), this));
}
DRIVER_INIT_MEMBER(renegade_state,renegade)
@@ -605,11 +562,7 @@ CUSTOM_INPUT_MEMBER(renegade_state::mcu_status_r)
WRITE8_MEMBER(renegade_state::bankswitch_w)
{
- if ((data & 1) != m_bank)
- {
- m_bank = data & 1;
- setbank();
- }
+ m_rombank->set_entry(data & 1);
}
TIMER_DEVICE_CALLBACK_MEMBER(renegade_state::renegade_interrupt)
@@ -632,30 +585,30 @@ WRITE8_MEMBER(renegade_state::renegade_coin_counter_w)
static ADDRESS_MAP_START( renegade_map, AS_PROGRAM, 8, renegade_state )
AM_RANGE(0x0000, 0x17ff) AM_RAM
- AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(renegade_videoram2_w) AM_SHARE("videoram2")
+ AM_RANGE(0x1800, 0x1fff) AM_RAM_WRITE(fg_videoram_w) AM_SHARE("fg_videoram")
AM_RANGE(0x2000, 0x27ff) AM_RAM AM_SHARE("spriteram")
- AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(renegade_videoram_w) AM_SHARE("videoram")
+ AM_RANGE(0x2800, 0x2fff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram")
AM_RANGE(0x3000, 0x30ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0x3100, 0x31ff) AM_RAM_DEVWRITE("palette", palette_device, write_ext) AM_SHARE("palette_ext")
- AM_RANGE(0x3800, 0x3800) AM_READ_PORT("IN0") AM_WRITE(renegade_scroll0_w) /* Player#1 controls, P1,P2 start */
- AM_RANGE(0x3801, 0x3801) AM_READ_PORT("IN1") AM_WRITE(renegade_scroll1_w) /* Player#2 controls, coin triggers */
+ AM_RANGE(0x3800, 0x3800) AM_READ_PORT("IN0") AM_WRITE(scroll_lsb_w) /* Player#1 controls, P1,P2 start */
+ AM_RANGE(0x3801, 0x3801) AM_READ_PORT("IN1") AM_WRITE(scroll_msb_w) /* Player#2 controls, coin triggers */
AM_RANGE(0x3802, 0x3802) AM_READ_PORT("DSW2") AM_WRITE(sound_w) /* DIP2 various IO ports */
AM_RANGE(0x3803, 0x3803) AM_READ_PORT("DSW1") AM_WRITE(renegade_flipscreen_w) /* DIP1 */
AM_RANGE(0x3804, 0x3804) AM_READWRITE(mcu_r, mcu_w)
AM_RANGE(0x3805, 0x3805) AM_READWRITE(mcu_reset_r, bankswitch_w)
AM_RANGE(0x3806, 0x3806) AM_WRITENOP // ?? watchdog
AM_RANGE(0x3807, 0x3807) AM_WRITE(renegade_coin_counter_w)
- AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("bank1")
+ AM_RANGE(0x4000, 0x7fff) AM_ROMBANK("rombank")
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( renegade_sound_map, AS_PROGRAM, 8, renegade_state )
AM_RANGE(0x0000, 0x0fff) AM_RAM
AM_RANGE(0x1000, 0x1000) AM_READ(soundlatch_byte_r)
- AM_RANGE(0x1800, 0x1800) AM_WRITENOP // this gets written the same values as 0x2000
- AM_RANGE(0x2000, 0x2000) AM_DEVWRITE("adpcm", renegade_adpcm_device, play_w)
+ AM_RANGE(0x1800, 0x1800) AM_WRITE(adpcm_start_w)
+ AM_RANGE(0x2000, 0x2000) AM_WRITE(adpcm_addr_w)
AM_RANGE(0x2800, 0x2801) AM_DEVREADWRITE("ymsnd", ym3526_device, read, write)
- AM_RANGE(0x3000, 0x3000) AM_WRITENOP /* adpcm related? stereo pan? */
+ AM_RANGE(0x3000, 0x3000) AM_WRITE(adpcm_stop_w)
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@@ -866,8 +819,9 @@ GFXDECODE_END
void renegade_state::machine_reset()
{
- m_bank = 0;
- setbank();
+ m_rombank->set_entry(0);
+ m_msm->reset_w(1);
+ m_adpcm_playing = 0;
}
@@ -905,7 +859,9 @@ static MACHINE_CONFIG_START( renegade, renegade_state )
MCFG_YM3526_IRQ_HANDLER(DEVWRITELINE("audiocpu", m6809_device, firq_line))
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
- MCFG_SOUND_ADD("adpcm", RENEGADE_ADPCM, 8000)
+ MCFG_SOUND_ADD("msm", MSM5205, 12000000/32)
+ MCFG_MSM5205_VCLK_CB(WRITELINE(renegade_state, adpcm_int))
+ MCFG_MSM5205_PRESCALER_SELECTOR(MSM5205_S48_4B) /* 8kHz */
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MACHINE_CONFIG_END
@@ -916,10 +872,9 @@ MACHINE_CONFIG_END
ROM_START( renegade )
- ROM_REGION( 0x14000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
+ ROM_LOAD( "na-5.ic52", 0x00000, 0x8000, CRC(de7e7df4) SHA1(7d26ac29e0b5858d9a0c0cdc86c864e464145260) )
ROM_LOAD( "nb-5.ic51", 0x08000, 0x8000, CRC(ba683ddf) SHA1(7516fac1c4fd14cbf43481e94c0c26c662c4cd28) )
- ROM_LOAD( "na-5.ic52", 0x04000, 0x4000, CRC(de7e7df4) SHA1(7d26ac29e0b5858d9a0c0cdc86c864e464145260) )
- ROM_CONTINUE( 0x10000, 0x4000 )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "n0-5.ic13", 0x8000, 0x8000, CRC(3587de3b) SHA1(f82e758254b21eb0c5a02469c72adb86d9577065) )
@@ -952,17 +907,16 @@ ROM_START( renegade )
ROM_LOAD( "ng-5.bin", 0x50000, 0x8000, CRC(a8ee3720) SHA1(df3d40015b16fa7a9bf05f0ed5741c22f7f152c7) )
ROM_LOAD( "nm-5.bin", 0x58000, 0x8000, CRC(c100258e) SHA1(0e2124e642b9742a9a0045f460974025048bc2dd) )
- ROM_REGION( 0x20000, "adpcm", 0 )
- ROM_LOAD( "n5-5.ic31", 0x00000, 0x8000, CRC(7ee43a3c) SHA1(36b14b886096177cdd0bd0c99cbcfcc362b2bc30) )
- ROM_LOAD( "n4-5.ic32", 0x10000, 0x8000, CRC(6557564c) SHA1(b3142be9d48eacb43786079a7ae012010f6afabb) )
- ROM_LOAD( "n3-5.ic33", 0x18000, 0x8000, CRC(78fd6190) SHA1(995df0e88f5c34946e0634b50bda8c1cc621afaa) )
+ ROM_REGION( 0x18000, "adpcm", 0 )
+ ROM_LOAD( "n3-5.ic33", 0x00000, 0x8000, CRC(78fd6190) SHA1(995df0e88f5c34946e0634b50bda8c1cc621afaa) )
+ ROM_LOAD( "n4-5.ic32", 0x08000, 0x8000, CRC(6557564c) SHA1(b3142be9d48eacb43786079a7ae012010f6afabb) )
+ ROM_LOAD( "n5-5.ic31", 0x10000, 0x8000, CRC(7ee43a3c) SHA1(36b14b886096177cdd0bd0c99cbcfcc362b2bc30) )
ROM_END
ROM_START( kuniokun )
- ROM_REGION( 0x14000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
+ ROM_LOAD( "ta18-11.bin", 0x00000, 0x8000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
ROM_LOAD( "nb-01.bin", 0x08000, 0x8000, CRC(93fcfdf5) SHA1(51cdb9377544ae17895e427f21d150ce195ab8e7) ) // original
- ROM_LOAD( "ta18-11.bin", 0x04000, 0x4000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
- ROM_CONTINUE( 0x10000, 0x4000 )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "n0-5.bin", 0x8000, 0x8000, CRC(3587de3b) SHA1(f82e758254b21eb0c5a02469c72adb86d9577065) )
@@ -995,17 +949,16 @@ ROM_START( kuniokun )
ROM_LOAD( "ta18-21.bin", 0x50000, 0x8000, CRC(c95e009b) SHA1(d45a247d4ebf8587a2cd30c83444cc7bd17a3534) )
ROM_LOAD( "ta18-15.bin", 0x58000, 0x8000, CRC(a5d61d01) SHA1(9bf1f0b8296667db31ff1c34e28c8eda3ce9f7c3) )
- ROM_REGION( 0x20000, "adpcm", 0 )
- ROM_LOAD( "ta18-07.bin", 0x00000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
- ROM_LOAD( "ta18-08.bin", 0x10000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
- ROM_LOAD( "ta18-09.bin", 0x18000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
+ ROM_REGION( 0x18000, "adpcm", 0 )
+ ROM_LOAD( "ta18-09.bin", 0x00000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
+ ROM_LOAD( "ta18-08.bin", 0x08000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
+ ROM_LOAD( "ta18-07.bin", 0x10000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
ROM_END
ROM_START( kuniokunb )
- ROM_REGION( 0x14000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
+ ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code + bank switched ROM */
+ ROM_LOAD( "ta18-11.bin", 0x00000, 0x8000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
ROM_LOAD( "ta18-10.bin", 0x08000, 0x8000, CRC(a90cf44a) SHA1(6d63d9c29da7b8c5bc391e074b6b8fe6ae3892ae) ) // bootleg
- ROM_LOAD( "ta18-11.bin", 0x04000, 0x4000, CRC(f240f5cd) SHA1(ed6875e8ad2988e88389d4f63ff448d0823c195f) )
- ROM_CONTINUE( 0x10000, 0x4000 )
ROM_REGION( 0x10000, "audiocpu", 0 )
ROM_LOAD( "n0-5.bin", 0x8000, 0x8000, CRC(3587de3b) SHA1(f82e758254b21eb0c5a02469c72adb86d9577065) )
@@ -1035,10 +988,10 @@ ROM_START( kuniokunb )
ROM_LOAD( "ta18-21.bin", 0x50000, 0x8000, CRC(c95e009b) SHA1(d45a247d4ebf8587a2cd30c83444cc7bd17a3534) )
ROM_LOAD( "ta18-15.bin", 0x58000, 0x8000, CRC(a5d61d01) SHA1(9bf1f0b8296667db31ff1c34e28c8eda3ce9f7c3) )
- ROM_REGION( 0x20000, "adpcm", 0 ) /* adpcm */
- ROM_LOAD( "ta18-07.bin", 0x00000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
- ROM_LOAD( "ta18-08.bin", 0x10000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
- ROM_LOAD( "ta18-09.bin", 0x18000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
+ ROM_REGION( 0x18000, "adpcm", 0 ) /* adpcm */
+ ROM_LOAD( "ta18-09.bin", 0x00000, 0x8000, CRC(07ed4705) SHA1(6fd4b78ca846fa602504f06f3105b2da03bcd00c) )
+ ROM_LOAD( "ta18-08.bin", 0x08000, 0x8000, CRC(c9312613) SHA1(fbbdf7c56c34cbee42984e41fcf2a21da2b87a31) )
+ ROM_LOAD( "ta18-07.bin", 0x10000, 0x8000, CRC(02e3f3ed) SHA1(ab09b3af2c4ab9a36eb1273bcc7c788350048554) )
ROM_END
diff --git a/src/mame/drivers/starwars.c b/src/mame/drivers/starwars.c
index a4bbcc7df49..03f2dc36e6c 100644
--- a/src/mame/drivers/starwars.c
+++ b/src/mame/drivers/starwars.c
@@ -383,15 +383,44 @@ MACHINE_CONFIG_END
*
*************************************/
+
+ROM_START( starwars )
+ ROM_REGION( 0x12000, "maincpu", 0 ) /* 2 64k ROM spaces */
+ ROM_LOAD( "136021.105", 0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
+ ROM_LOAD( "136021.214.1f", 0x6000, 0x2000, CRC(04f1876e) SHA1(c1d3637cb31ece0890c25f6122d6bcd27e6ffe0c) ) /* ROM 0 bank pages 0 and 1 */
+ ROM_CONTINUE( 0x10000, 0x2000 )
+ ROM_LOAD( "136021.102.1hj", 0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
+ ROM_LOAD( "136021.203.1jk", 0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /* 8k ROM 2 bank */
+ ROM_LOAD( "136021.104.1kl", 0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
+ ROM_LOAD( "136021.206.1m", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
+
+ /* Sound ROMS */
+ ROM_REGION( 0x10000, "audiocpu", 0 )
+ ROM_LOAD( "136021.107", 0x4000, 0x2000, CRC(dbf3aea2) SHA1(c38661b2b846fe93487eef09ca3cda19c44f08a0) ) /* Sound ROM 0 */
+ ROM_RELOAD( 0xc000, 0x2000 )
+ ROM_LOAD( "136021.208", 0x6000, 0x2000, CRC(e38070a8) SHA1(c858ae1702efdd48615453ab46e488848891d139) ) /* Sound ROM 0 */
+ ROM_RELOAD( 0xe000, 0x2000 )
+
+ ROM_REGION( 0x100, "user1", 0)
+ ROM_LOAD( "136021-105.1l", 0x0000, 0x0100, CRC(82fc3eb2) SHA1(184231c7baef598294860a7d2b8a23798c5c7da6) ) /* AVG PROM */
+
+ /* Mathbox PROMs */
+ ROM_REGION( 0x1000, "user2", 0 )
+ ROM_LOAD( "136021.110", 0x0000, 0x0400, CRC(810e040e) SHA1(d247cbb0afb4538d5161f8ce9eab337cdb3f2da4) ) /* PROM 0 */
+ ROM_LOAD( "136021.111", 0x0400, 0x0400, CRC(ae69881c) SHA1(f3420c6e15602956fd94982a5d8d4ddd015ed977) ) /* PROM 1 */
+ ROM_LOAD( "136021.112", 0x0800, 0x0400, CRC(ecf22628) SHA1(4dcf5153221feca329b8e8d199bd4fc00b151d9c) ) /* PROM 2 */
+ ROM_LOAD( "136021.113", 0x0c00, 0x0400, CRC(83febfde) SHA1(e13541b09d1724204fdb171528e9a1c83c799c1c) ) /* PROM 3 */
+ROM_END
+
ROM_START( starwars1 )
ROM_REGION( 0x12000, "maincpu", 0 ) /* 2 64k ROM spaces */
ROM_LOAD( "136021.105", 0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
- ROM_LOAD( "136021.114", 0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) ) /* ROM 0 bank pages 0 and 1 */
- ROM_CONTINUE( 0x10000, 0x2000 )
- ROM_LOAD( "136021.102", 0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
- ROM_LOAD( "136021.203", 0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /* 8k ROM 2 bank */
- ROM_LOAD( "136021.104", 0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
- ROM_LOAD( "136021.206", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
+ ROM_LOAD( "136021.114.1f", 0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) ) /* ROM 0 bank pages 0 and 1 */
+ ROM_CONTINUE( 0x10000, 0x2000 )
+ ROM_LOAD( "136021.102.1hj", 0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
+ ROM_LOAD( "136021.203.1jk", 0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /* 8k ROM 2 bank */
+ ROM_LOAD( "136021.104.1kl", 0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
+ ROM_LOAD( "136021.206.1m", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
/* Sound ROMS */
ROM_REGION( 0x10000, "audiocpu", 0 )
@@ -411,16 +440,15 @@ ROM_START( starwars1 )
ROM_LOAD( "136021.113", 0x0c00, 0x0400, CRC(83febfde) SHA1(e13541b09d1724204fdb171528e9a1c83c799c1c) ) /* PROM 3 */
ROM_END
-
-ROM_START( starwars )
+ROM_START( starwarso )
ROM_REGION( 0x12000, "maincpu", 0 ) /* 2 64k ROM spaces */
ROM_LOAD( "136021.105", 0x3000, 0x1000, CRC(538e7d2f) SHA1(032c933fd94a6b0b294beee29159a24494ae969b) ) /* 3000-3fff is 4k vector rom */
- ROM_LOAD( "136021.214", 0x6000, 0x2000, CRC(04f1876e) SHA1(c1d3637cb31ece0890c25f6122d6bcd27e6ffe0c) ) /* ROM 0 bank pages 0 and 1 */
+ ROM_LOAD( "136021-114.1f", 0x6000, 0x2000, CRC(e75ff867) SHA1(3a40de920c31ffa3c3e67f3edf653b79fcc5ddd7) ) /* ROM 0 bank pages 0 and 1 */
ROM_CONTINUE( 0x10000, 0x2000 )
- ROM_LOAD( "136021.102", 0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
- ROM_LOAD( "136021.203", 0xa000, 0x2000, CRC(f6da0a00) SHA1(dd53b643be856787bbc4da63e5eb132f98f623c3) ) /* 8k ROM 2 bank */
- ROM_LOAD( "136021.104", 0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
- ROM_LOAD( "136021.206", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
+ ROM_LOAD( "136021-102.1hj", 0x8000, 0x2000, CRC(f725e344) SHA1(f8943b67f2ea032ab9538084756ba86f892be5ca) ) /* 8k ROM 1 bank */
+ ROM_LOAD( "136021-103.1jk", 0xa000, 0x2000, CRC(3fde9ccb) SHA1(8d88fc7a28ac8f189f8aba08598732ac8c5491aa) ) /* 8k ROM 2 bank */
+ ROM_LOAD( "136021-104.1kl", 0xc000, 0x2000, CRC(7e406703) SHA1(981b505d6e06d7149f8bcb3e81e4d0c790f2fc86) ) /* 8k ROM 3 bank */
+ ROM_LOAD( "136021-206.1m", 0xe000, 0x2000, CRC(c7e51237) SHA1(4960f4446271316e3f730eeb2531dbc702947395) ) /* 8k ROM 4 bank */
/* Sound ROMS */
ROM_REGION( 0x10000, "audiocpu", 0 )
@@ -440,6 +468,8 @@ ROM_START( starwars )
ROM_LOAD( "136021.113", 0x0c00, 0x0400, CRC(83febfde) SHA1(e13541b09d1724204fdb171528e9a1c83c799c1c) ) /* PROM 3 */
ROM_END
+
+
ROM_START( tomcatsw )
ROM_REGION( 0x12000, "maincpu", 0 )
ROM_LOAD( "tcavg3.1l", 0x3000, 0x1000, CRC(27188aa9) SHA1(5d9a978a7ac1913b57586e81045a1b955db27b48) )
@@ -564,7 +594,11 @@ DRIVER_INIT_MEMBER(starwars_state,esb)
*
*************************************/
-GAME( 1983, starwars, 0, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (rev 2)", 0 )
-GAME( 1983, starwars1,starwars, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (rev 1)", 0 )
+GAME( 1983, starwars, 0, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (set 1)", 0 ) // newest
+GAME( 1983, starwars1,starwars, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (set 2)", 0 )
+GAME( 1983, starwarso,starwars, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "Star Wars (set 3)", 0 ) // oldest
+// is there an even older starwars set with 136021-106.1m ?
+
GAME( 1983, tomcatsw, tomcat, starwars, starwars, starwars_state, starwars, ROT0, "Atari", "TomCat (Star Wars hardware, prototype)", GAME_NO_SOUND )
+
GAME( 1985, esb, 0, starwars, esb, starwars_state, esb, ROT0, "Atari Games", "The Empire Strikes Back", 0 )
diff --git a/src/mame/drivers/supduck.c b/src/mame/drivers/supduck.c
index 68e9a6fe6cb..420d7a154de 100644
--- a/src/mame/drivers/supduck.c
+++ b/src/mame/drivers/supduck.c
@@ -24,6 +24,7 @@ All clock timing comes from crystal 1
#include "cpu/m68000/m68000.h"
#include "sound/okim6295.h"
#include "video/bufsprite.h"
+#include "video/tigeroad_spr.h"
class supduck_state : public driver_device
{
@@ -36,9 +37,9 @@ public:
m_text_videoram(*this, "textvideoram"),
m_fore_videoram(*this, "forevideoram"),
m_back_videoram(*this, "backvideoram"),
- m_paletteram(*this, "paletteram"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette")
+ m_palette(*this, "palette"),
+ m_spritegen(*this, "spritegen")
{ }
// devices
@@ -50,10 +51,10 @@ public:
required_shared_ptr<UINT16> m_text_videoram;
required_shared_ptr<UINT16> m_fore_videoram;
required_shared_ptr<UINT16> m_back_videoram;
- required_shared_ptr<UINT16> m_paletteram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<tigeroad_spr_device> m_spritegen;
tilemap_t *m_text_tilemap;
tilemap_t *m_fore_tilemap;
@@ -68,7 +69,6 @@ public:
DECLARE_WRITE16_MEMBER(supduck_4000_w);
DECLARE_WRITE16_MEMBER(supduck_4002_w);
- DECLARE_WRITE16_MEMBER(supduck_paletteram_w);
TILEMAP_MAPPER_MEMBER(supduk_tilemap_scan);
@@ -82,7 +82,6 @@ protected:
virtual void video_start();
- void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority);
TILE_GET_INFO_MEMBER(get_text_tile_info);
TILE_GET_INFO_MEMBER(get_fore_tile_info);
TILE_GET_INFO_MEMBER(get_back_tile_info);
@@ -127,9 +126,7 @@ UINT32 supduck_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
m_back_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fore_tilemap->draw(screen, bitmap, cliprect, 0, 0);
-
- draw_sprites(bitmap, cliprect, 0);
- draw_sprites(bitmap, cliprect, 1); //draw priority sprites?
+ m_spritegen->draw_sprites(bitmap, cliprect, m_gfxdecode, 3, m_spriteram->buffer(), m_spriteram->bytes(), flip_screen(), 1 );
m_text_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
@@ -200,67 +197,11 @@ TILE_GET_INFO_MEMBER(supduck_state::get_back_tile_info)
}
-void supduck_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority )
-{
- UINT16 *source = &m_spriteram->buffer()[m_spriteram->bytes()/2] - 4;
- UINT16 *finish = m_spriteram->buffer();
-
- while (source >= finish)
- {
- int tile_number = source[0];
-
- if (tile_number != 0xfff) {
- int attr = source[1];
- int sy = source[2] & 0x1ff;
- int sx = source[3] & 0x1ff;
-
- int flipx = attr & 0x02;
- int flipy = attr & 0x01;
- int color = (attr >> 2) & 0x0f;
-
- if (sx > 0x100) sx -= 0x200;
- if (sy > 0x100) sy -= 0x200;
-
- if (flip_screen())
- {
- sx = 240 - sx;
- sy = 240 - sy;
- flipx = !flipx;
- flipy = !flipy;
- }
-
-
- m_gfxdecode->gfx(3)->transpen(bitmap,cliprect,
- tile_number,
- color,
- flipx, flipy,
- sx, 240 - sy, 15);
- }
-
- source -= 4;
- }
-}
WRITE16_MEMBER(supduck_state::supduck_4000_w)
{
}
-WRITE16_MEMBER(supduck_state::supduck_paletteram_w)
-{
- int r, g, b;
- data = COMBINE_DATA(&m_paletteram[offset]);
-
- r = ((data >> 8) & 0x0f);
- if (data & 0x4000) r |= 0x10;
-
- g = ((data >> 4 ) & 0x0f);
- if (data & 0x2000) g |= 0x10;
-
- b = ((data >> 0 ) & 0x0f);
- if (data & 0x1000) b |= 0x10;
-
- m_palette->set_pen_color (offset, rgb_t(r<<3, g<<3, b<<3));
-}
WRITE16_MEMBER(supduck_state::supduck_4002_w)
{
@@ -308,7 +249,7 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, supduck_state )
AM_RANGE(0xfec000, 0xfecfff) AM_RAM_WRITE(text_videoram_w) AM_SHARE("textvideoram")
AM_RANGE(0xff0000, 0xff3fff) AM_RAM_WRITE(back_videoram_w) AM_SHARE("backvideoram")
AM_RANGE(0xff4000, 0xff7fff) AM_RAM_WRITE(fore_videoram_w) AM_SHARE("forevideoram")
- AM_RANGE(0xff8000, 0xff87ff) AM_RAM_WRITE(supduck_paletteram_w) AM_SHARE("paletteram") // AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
+ AM_RANGE(0xff8000, 0xff87ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
AM_RANGE(0xffc000, 0xffffff) AM_RAM /* working RAM */
ADDRESS_MAP_END
@@ -509,8 +450,10 @@ static MACHINE_CONFIG_START( supduck, supduck_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", supduck)
+ MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
+
MCFG_PALETTE_ADD("palette", 0x800/2)
-// MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB) // can't use this, the RGB bits are the lowest bits with this format, for this game they're the highest bits
+ MCFG_PALETTE_FORMAT(xRGBRRRRGGGGBBBB_bit4)
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mame/drivers/system16.c b/src/mame/drivers/system16.c
index 2be193390b4..a02c9278b5c 100644
--- a/src/mame/drivers/system16.c
+++ b/src/mame/drivers/system16.c
@@ -35,7 +35,7 @@
- Tetris
- E-Swat
- These appear to be a variation no the encrypted / protected bootlegs, but without the encryption
+ These appear to be a variation on the encrypted / protected bootlegs, but without the encryption
or protection
- Golden Axe (set 2)
@@ -566,7 +566,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::s16bl_bgscrollx_w)
int scroll = data & 0x1ff;
scroll+= 0x200;
- scroll+= 1; // so that the background fo the select screen is properly aligned
+ scroll+= 1; // so that the background of the select screen is properly aligned
m_bg_scrollx = -scroll;
}
diff --git a/src/mame/drivers/thedeep.c b/src/mame/drivers/thedeep.c
index 29ba5db1500..254b7d0b85e 100644
--- a/src/mame/drivers/thedeep.c
+++ b/src/mame/drivers/thedeep.c
@@ -87,9 +87,7 @@ WRITE8_MEMBER(thedeep_state::thedeep_protection_w)
m_rombank = new_rombank;
rom = memregion("maincpu")->base();
membank("bank1")->set_base(rom + 0x10000 + m_rombank * 0x4000);
- /* there's code which falls through from the fixed ROM to bank #1, I have to */
- /* copy it there otherwise the CPU bank switching support will not catch it. */
- memcpy(rom + 0x08000, rom + 0x10000 + m_rombank * 0x4000, 0x4000);
+
}
break;
@@ -197,9 +195,6 @@ void thedeep_state::thedeep_maincpu_bankswitch(UINT8 bank_trig)
m_rombank = new_rombank;
rom = memregion("maincpu")->base();
membank("bank1")->set_base(rom + 0x10000 + m_rombank * 0x4000);
- /* there's code which falls through from the fixed ROM to bank #1, I have to */
- /* copy it there otherwise the CPU bank switching support will not catch it. */
- memcpy(rom + 0x08000, rom + 0x10000 + m_rombank * 0x4000, 0x4000);
}
diff --git a/src/mame/drivers/tigeroad.c b/src/mame/drivers/tigeroad.c
index 4000f4114c5..d3cf4dbc383 100644
--- a/src/mame/drivers/tigeroad.c
+++ b/src/mame/drivers/tigeroad.c
@@ -619,6 +619,8 @@ static MACHINE_CONFIG_START( tigeroad, tigeroad_state )
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tigeroad)
+
+ MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
@@ -680,6 +682,8 @@ static MACHINE_CONFIG_START( f1dream_comad, tigeroad_state )
MCFG_GFXDECODE_ADD("gfxdecode", "palette", tigeroad)
+ MCFG_DEVICE_ADD("spritegen", TIGEROAD_SPRITE, 0)
+
MCFG_PALETTE_ADD("palette", 1024)
MCFG_PALETTE_FORMAT(xxxxRRRRGGGGBBBB)
diff --git a/src/mame/drivers/vsnes.c b/src/mame/drivers/vsnes.c
index 19953b5abb4..98ae7a2b307 100644
--- a/src/mame/drivers/vsnes.c
+++ b/src/mame/drivers/vsnes.c
@@ -364,7 +364,7 @@ static INPUT_PORTS_START( vsnes_dual )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* bit 1 of dsw goes here */
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 ) PORT_IMPULSE(1)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 ) PORT_IMPULSE(1)
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - dont change */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - don't change */
/* Right Side Controls */
PORT_START("IN2")
@@ -395,7 +395,7 @@ static INPUT_PORTS_START( vsnes_dual )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) /* bit 1 of dsw goes here */
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN3 ) PORT_IMPULSE(1)
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN4 ) PORT_IMPULSE(1)
- PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - dont change */
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED ) /* this bit masks irqs - don't change */
/* Both sides also have a DSW (#0 & #1) which are defined per game, below */
INPUT_PORTS_END
diff --git a/src/mame/drivers/wallc.c b/src/mame/drivers/wallc.c
index df6a71bcaff..0570c8e4d1d 100644
--- a/src/mame/drivers/wallc.c
+++ b/src/mame/drivers/wallc.c
@@ -363,6 +363,21 @@ ROM_START( wallca )
ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) )
ROM_END
+ROM_START( brkblast )
+ ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_LOAD( "fadesa-r0.6m", 0x0000, 0x4000, CRC(4e96ca15) SHA1(87f1a3538712aa3d6c3713b845679dd42a4ba5a4) )
+
+ ROM_REGION( 0x3000, "gfx1", 0 )
+ ROM_LOAD( "rom3.rom", 0x0800, 0x0800, CRC(6634db73) SHA1(fe6104f974495a250e0cd14c0745eec8e44b8d3a) )
+ ROM_LOAD( "rom2.rom", 0x1800, 0x0800, CRC(79f49c2c) SHA1(485fdba5ebdb4c01306f3ef26c992a513aa6b5dc) )
+ ROM_LOAD( "rom1.rom", 0x2800, 0x0800, CRC(3884fd4f) SHA1(47254c8828128ac48fc15f05b52fe4d42d4919e7) )
+
+ ROM_REGION( 0x0020, "proms", 0 )
+ ROM_LOAD( "74s288.c2", 0x0000, 0x0020, CRC(83e3e293) SHA1(a98c5e63b688de8d175adb6539e0cdc668f313fd) )
+ROM_END
+
+
+
/*
It use a epoxy brick like wallc
@@ -474,4 +489,6 @@ DRIVER_INIT_MEMBER(wallc_state,sidam)
GAME( 1984, wallc, 0, wallc, wallc, wallc_state, wallc, ROT0, "Midcoin", "Wall Crash (set 1)", 0 )
GAME( 1984, wallca, wallc, wallc, wallc, wallc_state, wallca, ROT0, "Midcoin", "Wall Crash (set 2)", 0 )
+GAME( 1984, brkblast,wallc, wallc, wallc, wallc_state, wallca, ROT0, "bootleg (Fadesa)", "Brick Blast (bootleg of Wall Crash)", 0 ) // Spanish bootleg board, Fadesa stickers / text on various components
+
GAME( 1984, sidampkr,0, wallc, wallc, wallc_state, sidam, ROT270, "Sidam", "unknown Sidam Poker", GAME_NOT_WORKING )
diff --git a/src/mame/drivers/wc90b.c b/src/mame/drivers/wc90b.c
index 0336c91358f..5e1e16bf13c 100644
--- a/src/mame/drivers/wc90b.c
+++ b/src/mame/drivers/wc90b.c
@@ -62,7 +62,7 @@ and encoded in a different way from the original machine. Even if
sometimes it seems colors are not entirely correct, this is only due
to the crappy artwork of the person that did the bootleg.
-Dip switches are not complete and they dont seem to differ from
+Dip switches are not complete and they don't seem to differ from
the original machine.
Last but not least, the set of ROMs i have for Euro League seem to have
diff --git a/src/mame/drivers/yunsun16.c b/src/mame/drivers/yunsun16.c
index f4cf6cd16e0..3ba6d62f969 100644
--- a/src/mame/drivers/yunsun16.c
+++ b/src/mame/drivers/yunsun16.c
@@ -101,15 +101,9 @@ Stephh's notes (based on the games M68000 code and some tests) :
***************************************************************************/
-WRITE16_MEMBER(yunsun16_state::yunsun16_sound_bank_w)
+WRITE8_MEMBER(yunsun16_state::sound_bank_w)
{
- if (ACCESSING_BITS_0_7)
- {
- int bank = data & 3;
- UINT8 *dst = memregion("oki")->base();
- UINT8 *src = dst + 0x80000 + 0x20000 * bank;
- memcpy(dst + 0x20000, src, 0x20000);
- }
+ membank("okibank")->set_entry(data & 3);
}
static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, yunsun16_state )
@@ -126,12 +120,12 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, yunsun16_state )
AM_RANGE(0x80010c, 0x80010f) AM_RAM AM_SHARE("scrollram_1") // Scrolling
AM_RANGE(0x800114, 0x800117) AM_RAM AM_SHARE("scrollram_0") // Scrolling
AM_RANGE(0x800154, 0x800155) AM_RAM AM_SHARE("priorityram") // Priority
- AM_RANGE(0x800180, 0x800181) AM_WRITE(yunsun16_sound_bank_w) // Sound
+ AM_RANGE(0x800180, 0x800181) AM_WRITE8(sound_bank_w, 0x00ff) // Sound
AM_RANGE(0x800188, 0x800189) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) // Sound
AM_RANGE(0x8001fe, 0x8001ff) AM_WRITENOP // ? 0 (during int)
AM_RANGE(0x900000, 0x903fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // Palette
- AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(yunsun16_vram_1_w) AM_SHARE("vram_1") // Layer 1
- AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(yunsun16_vram_0_w) AM_SHARE("vram_0") // Layer 0
+ AM_RANGE(0x908000, 0x90bfff) AM_RAM_WRITE(vram_1_w) AM_SHARE("vram_1") // Layer 1
+ AM_RANGE(0x90c000, 0x90ffff) AM_RAM_WRITE(vram_0_w) AM_SHARE("vram_0") // Layer 0
AM_RANGE(0x910000, 0x910fff) AM_RAM AM_SHARE("spriteram") // Sprites
AM_RANGE(0xff0000, 0xffffff) AM_RAM
ADDRESS_MAP_END
@@ -155,8 +149,8 @@ number 0 on each voice. That sample is 00000-00000.
DRIVER_INIT_MEMBER(yunsun16_state,magicbub)
{
-// remove_mem_write16_handler (0, 0x800180, 0x800181 );
- m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w),this));
+ m_maincpu->space(AS_PROGRAM).unmap_write(0x800180, 0x800181);
+ m_maincpu->space(AS_PROGRAM).install_write_handler(0x800188, 0x800189, write16_delegate(FUNC(yunsun16_state::magicbub_sound_command_w), this));
}
/***************************************************************************
@@ -179,6 +173,11 @@ static ADDRESS_MAP_START( sound_port_map, AS_IO, 8, yunsun16_state )
AM_RANGE(0x1c, 0x1c) AM_DEVREADWRITE("oki", okim6295_device, read, write) // M6295
ADDRESS_MAP_END
+static ADDRESS_MAP_START( oki_map, AS_0, 8, yunsun16_state )
+ AM_RANGE(0x00000, 0x1ffff) AM_ROM
+ AM_RANGE(0x20000, 0x3ffff) AM_ROMBANK("okibank")
+ ADDRESS_MAP_END
+
/***************************************************************************
@@ -566,6 +565,19 @@ void yunsun16_state::machine_reset()
m_sprites_scrolldy = -0x0f;
}
+MACHINE_START_MEMBER(yunsun16_state, shocking)
+{
+ machine_start();
+ membank("okibank")->configure_entries(0, 0x80000 / 0x20000, memregion("oki")->base(), 0x20000);
+ membank("okibank")->set_entry(0);
+}
+
+MACHINE_RESET_MEMBER(yunsun16_state, shocking)
+{
+ machine_reset();
+ membank("okibank")->set_entry(0);
+}
+
/***************************************************************************
Magic Bubble
***************************************************************************/
@@ -622,7 +634,9 @@ static MACHINE_CONFIG_START( shocking, yunsun16_state )
MCFG_CPU_ADD("maincpu", M68000, XTAL_16MHz)
MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", yunsun16_state, irq2_line_hold)
-
+
+ MCFG_MACHINE_START_OVERRIDE(yunsun16_state, shocking)
+ MCFG_MACHINE_RESET_OVERRIDE(yunsun16_state, shocking)
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
@@ -640,6 +654,7 @@ static MACHINE_CONFIG_START( shocking, yunsun16_state )
MCFG_OKIM6295_ADD("oki", XTAL_16MHz/16, OKIM6295_PIN7_HIGH)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
+ MCFG_DEVICE_ADDRESS_MAP(AS_0, oki_map)
MACHINE_CONFIG_END
@@ -786,11 +801,8 @@ ROM_START( magicbubb ) /* Found on a YS-0211 PCB like below */
ROM_LOAD( "u22.bin", 0x040000, 0x020000, CRC(7c68df7a) SHA1(88acf9dd43892a790415b418f77d88c747aa84f5) )
ROM_LOAD( "u23.bin", 0x060000, 0x020000, CRC(c7763fc1) SHA1(ed68b3c3c5155073afb7b55d6d92d3057e40df6c) )
- ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
+ ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "u131", 0x000000, 0x040000, CRC(9bdb08e4) SHA1(4d8bdeb9b503b0959a6ae3f3fb3574350b01b1a1) )
- ROM_RELOAD( 0x040000, 0x040000 )
- ROM_RELOAD( 0x080000, 0x040000 )
- ROM_RELOAD( 0x0c0000, 0x040000 )
ROM_END
@@ -862,10 +874,9 @@ ROM_START( paprazzi )
ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(436499c7) SHA1(ec1390b6d5656c99d91cf6425d319f4796bcb28a) )
ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(358280fe) SHA1(eac3cb65fe75bc2da14896734f4a339480b54a2c) )
- ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
+ ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "u131.bin", 0x000000, 0x080000, CRC(bcf7aa12) SHA1(f7bf5258396ed0eb7e85eccf250c6d0a333a4d61) )
- ROM_RELOAD( 0x080000, 0x080000 )
-
+
ROM_END
/***************************************************************************
@@ -892,10 +903,9 @@ ROM_START( shocking )
ROM_LOAD( "yunsun16.u22", 0x080000, 0x040000, CRC(d6db0388) SHA1(f5d8f7740b602c402a8dd6c4ebd357cf15a0dfac) )
ROM_LOAD( "yunsun16.u23", 0x0c0000, 0x040000, CRC(1fa33b2e) SHA1(4aa0dee8d34aac19cf6b7ba3f79ca022ad8d7760) )
- ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
+ ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) )
- ROM_RELOAD( 0x080000, 0x080000 )
-
+
ROM_END
ROM_START( shockingk )
@@ -916,10 +926,9 @@ ROM_START( shockingk )
ROM_LOAD( "u22.bin", 0x080000, 0x040000, CRC(59260de1) SHA1(2dd2d7ab93fa751cb9142400a3ff91391477d555) )
ROM_LOAD( "u23.bin", 0x0c0000, 0x040000, CRC(00e4af23) SHA1(a4d23f16748385dd8c87cae3e16593e5a0195c24) )
- ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
+ ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "yunsun16.131", 0x000000, 0x080000, CRC(d0a1bb8c) SHA1(10f33521bd6031ed73ee5c7be1382165925aa8f8) )
- ROM_RELOAD( 0x080000, 0x080000 )
-
+
ROM_END
@@ -949,10 +958,9 @@ ROM_START( bombkick )
ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) )
ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) )
- ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
+ ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) )
- ROM_RELOAD( 0x080000, 0x080000 )
-
+
ROM_END
ROM_START( bombkicka ) // marked 'Bomb Kick 98'
@@ -973,10 +981,9 @@ ROM_START( bombkicka ) // marked 'Bomb Kick 98'
ROM_LOAD( "bk_u22", 0x080000, 0x040000, CRC(9538c46c) SHA1(d7d0e167d5abc2ee81eae6fde152b2f5cc716c0e) )
ROM_LOAD( "bk_u23", 0x0c0000, 0x040000, CRC(e3831f3d) SHA1(096658ee5a7b83d774b671c0a38113533c8751d1) )
- ROM_REGION( 0x080000 * 2, "oki", 0 ) /* Samples */
+ ROM_REGION( 0x080000, "oki", 0 ) /* Samples */
ROM_LOAD( "bk_u131", 0x000000, 0x080000, CRC(22cc5732) SHA1(38aefa4e543ea54e004eee428ee087121eb20905) )
- ROM_RELOAD( 0x080000, 0x080000 )
-
+
ROM_END
/***************************************************************************
diff --git a/src/mame/includes/bionicc.h b/src/mame/includes/bionicc.h
index 9a5f1b0b7a8..d98f5d9e013 100644
--- a/src/mame/includes/bionicc.h
+++ b/src/mame/includes/bionicc.h
@@ -5,6 +5,7 @@
***************************************************************************/
#include "video/bufsprite.h"
+#include "video/tigeroad_spr.h"
class bionicc_state : public driver_device
{
@@ -18,7 +19,9 @@ public:
m_paletteram(*this, "paletteram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_palette(*this, "palette"),
+ m_spritegen(*this, "spritegen")
+ { }
/* memory pointers */
required_device<buffered_spriteram16_device> m_spriteram;
@@ -55,8 +58,8 @@ public:
virtual void video_start();
UINT32 screen_update_bionicc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(bionicc_scanline);
- void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_device<tigeroad_spr_device> m_spritegen;
};
diff --git a/src/mame/includes/chihiro.h b/src/mame/includes/chihiro.h
new file mode 100644
index 00000000000..dda45c9af39
--- /dev/null
+++ b/src/mame/includes/chihiro.h
@@ -0,0 +1,539 @@
+/*
+ * geforce 3d (NV2A) vertex program disassembler
+ */
+class vertex_program_disassembler {
+ static const char *srctypes[];
+ static const char *scaops[];
+ static const int scapar2[];
+ static const char *vecops[];
+ static const int vecpar2[];
+ static const char *vecouts[];
+ static const char compchar[];
+ int o[6];
+ int state;
+
+ struct sourcefields
+ {
+ int Sign;
+ int SwizzleX;
+ int SwizzleY;
+ int SwizzleZ;
+ int SwizzleW;
+ int TempIndex;
+ int ParameterType;
+ };
+
+ struct fields
+ {
+ int ScaOperation;
+ int VecOperation;
+ int SourceConstantIndex;
+ int InputIndex;
+ sourcefields src[3];
+ int VecTempWriteMask;
+ int VecTempIndex;
+ int ScaTempWriteMask;
+ int OutputWriteMask;
+ int OutputSelect;
+ int OutputIndex;
+ int MultiplexerControl;
+ int Usea0x;
+ int EndOfProgram;
+ };
+ fields f;
+
+ void decodefields(unsigned int *dwords, int offset, fields &decoded);
+ int disassemble_mask(int mask, char *s);
+ int disassemble_swizzle(sourcefields f, char *s);
+ int disassemble_source(sourcefields f, fields fi, char *s);
+ int disassemble_output(fields f, char *s);
+ int output_types(fields f, int *o);
+public:
+ vertex_program_disassembler() { state = 0; }
+ int disassemble(unsigned int *instruction, char *line);
+};
+
+/*
+ * geforce 3d (NV2A) vertex structure
+ */
+struct vertex_nv {
+ union {
+ float fv[4];
+ UINT32 iv[4];
+ } attribute[16];
+};
+
+/*
+ * geforce 3d (NV2A) vertex program simulator
+ */
+class vertex_program_simulator {
+public:
+ vertex_program_simulator();
+ // input vertex
+ vertex_nv *input;
+ // input parameters
+ union constant {
+ float fv[4];
+ unsigned int iv[4];
+ } c_constant[192];
+ union temp {
+ float fv[4];
+ unsigned int iv[4];
+ } r_temp[32];
+ // output vertex
+ vertex_nv *output;
+ // instructions
+ struct instruction {
+ unsigned int i[4];
+ int modified;
+ struct decoded {
+ int SwizzleA[4], SignA, ParameterTypeA, TempIndexA;
+ int SwizzleB[4], SignB, ParameterTypeB, TempIndexB;
+ int SwizzleC[4], SignC, ParameterTypeC, TempIndexC;
+ int VecOperation, ScaOperation;
+ int OutputWriteMask, MultiplexerControl;
+ int VecTempWriteMask, ScaTempWriteMask;
+ int VecTempIndex, OutputIndex;
+ int InputIndex;
+ int SourceConstantIndex;
+ int OutputSelect;
+ int Usea0x;
+ int EndOfProgram;
+ } d;
+ } op[256];
+public:
+ void set_data(vertex_nv *in, vertex_nv *out);
+ void reset();
+ int step();
+ void decode_instruction(int address);
+ void execute();
+ void jump(int address);
+ void process(int address, vertex_nv *in, vertex_nv *out, int count);
+ int status();
+private:
+ void initialize_outputs();
+ void initialize_temps();
+ void initialize_constants();
+ void generate_input(float t[4], int sign, int type, int temp, int swizzle[4]);
+ void compute_vectorial_operation(float t[4], int instruction, float par[3 * 4]);
+ void compute_scalar_operation(float t[4], int instruction, float par[3 * 4]);
+
+ int ip;
+ int a0x;
+};
+
+class nv2a_renderer; // forward declaration
+struct nvidia_object_data
+{
+ nv2a_renderer *data;
+};
+
+/*
+ * geforce 3d (NV2A) accellerator
+ */
+/* very simplified view
+there is a set of context objects
+
+context objects are stored in RAMIN
+each context object is identified by an handle stored in RAMHT
+
+each context object can be assigned to a channel
+to assign you give to the channel an handle for the object
+
+offset in ramht=(((((handle >> 11) xor handle) >> 11) xor handle) & 0x7ff)*8
+offset in ramht contains the handle itself
+offset in ramht+4 contains in the lower 16 bits the offset in RAMIN divided by 16
+
+objects have methods used to do drawing
+most methods set parameters, others actually draw
+*/
+class nv2a_renderer : public poly_manager<float, nvidia_object_data, 12, 8192>
+{
+public:
+ nv2a_renderer(running_machine &machine) : poly_manager<float, nvidia_object_data, 12, 8192>(machine)
+ {
+ memset(channel, 0, sizeof(channel));
+ memset(pfifo, 0, sizeof(pfifo));
+ memset(pcrtc, 0, sizeof(pcrtc));
+ memset(pmc, 0, sizeof(pmc));
+ memset(ramin, 0, sizeof(ramin));
+ computedilated();
+ fb.allocate(640, 480);
+ objectdata = &(object_data_alloc());
+ objectdata->data = this;
+ combiner.used = 0;
+ combiner.lock = osd_lock_alloc();
+ enabled_vertex_attributes = 0;
+ indexesleft_count = 0;
+ vertex_pipeline = 4;
+ alpha_test_enabled = false;
+ alpha_reference = 0;
+ alpha_func = nv2a_renderer::ALWAYS;
+ blending_enabled = false;
+ blend_equation = nv2a_renderer::FUNC_ADD;
+ blend_color = 0;
+ blend_function_destination = nv2a_renderer::ZERO;
+ blend_function_source = nv2a_renderer::ONE;
+ logical_operation_enabled = false;
+ logical_operation = nv2a_renderer::COPY;
+ debug_grab_texttype = -1;
+ debug_grab_textfile = NULL;
+ memset(vertex_attribute_words, 0, sizeof(vertex_attribute_words));
+ memset(vertex_attribute_offset, 0, sizeof(vertex_attribute_offset));
+ }
+ DECLARE_READ32_MEMBER(geforce_r);
+ DECLARE_WRITE32_MEMBER(geforce_w);
+ bool vblank_callback(screen_device &screen, bool state);
+ UINT32 screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ void render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
+ void render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &extradata, int threadid);
+ void render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid);
+
+ int geforce_commandkind(UINT32 word);
+ UINT32 geforce_object_offset(UINT32 handle);
+ void geforce_read_dma_object(UINT32 handle, UINT32 &offset, UINT32 &size);
+ void geforce_exec_method(address_space &space, UINT32 channel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen);
+ UINT32 texture_get_texel(int number, int x, int y);
+ void write_pixel(int x, int y, UINT32 color);
+ void combiner_initialize_registers(UINT32 argb8[6]);
+ void combiner_initialize_stage(int stage_number);
+ void combiner_initialize_final();
+ void combiner_map_input(int stage_number); // map combiner registers to variables A..D
+ void combiner_map_output(int stage_number); // map combiner calculation results to combiner registers
+ void combiner_map_final_input(); // map final combiner registers to variables A..F
+ void combiner_final_output(); // generate final combiner output
+ float combiner_map_input_select(int code, int index); // get component index in register code
+ float *combiner_map_input_select3(int code); // get pointer to register code
+ float *combiner_map_output_select3(int code); // get pointer to register code for output
+ float combiner_map_input_function(int code, float value); // apply input mapping function code to value
+ void combiner_map_input_function3(int code, float *data); // apply input mapping function code to data
+ void combiner_function_AB(float result[4]);
+ void combiner_function_AdotB(float result[4]);
+ void combiner_function_CD(float result[4]);
+ void combiner_function_CdotD(float result[4]);
+ void combiner_function_ABmuxCD(float result[4]);
+ void combiner_function_ABsumCD(float result[4]);
+ void combiner_compute_rgb_outputs(int index);
+ void combiner_compute_a_outputs(int index);
+ void combiner_argb8_float(UINT32 color, float reg[4]);
+ UINT32 combiner_float_argb8(float reg[4]);
+ UINT32 dilate0(UINT32 value, int bits);
+ UINT32 dilate1(UINT32 value, int bits);
+ void computedilated(void);
+ void putpixtex(int xp, int yp, int up, int vp);
+ int toggle_register_combiners_usage();
+ void debug_grab_texture(int type, const char *filename);
+ void debug_grab_vertex_program_slot(int slot, UINT32 *instruction);
+ void savestate_items();
+
+ void read_vertex(address_space & space, offs_t address, vertex_nv &vertex, int attrib);
+ int read_vertices_0x1810(address_space & space, vertex_nv *destination, int offset, int limit);
+ int read_vertices_0x1800(address_space & space, vertex_nv *destination, UINT32 address, int limit);
+ int read_vertices_0x1818(address_space & space, vertex_nv *destination, UINT32 address, int limit);
+ void convert_vertices_poly(vertex_nv *source, vertex_t *destination, int count);
+
+ struct {
+ UINT32 regs[0x80 / 4];
+ struct {
+ UINT32 objhandle;
+ UINT32 objclass;
+ UINT32 method[0x2000 / 4];
+ } object;
+ } channel[32][8];
+ UINT32 pfifo[0x2000 / 4];
+ UINT32 pcrtc[0x1000 / 4];
+ UINT32 pmc[0x1000 / 4];
+ UINT32 ramin[0x100000 / 4];
+ UINT32 dma_offset[2];
+ UINT32 dma_size[2];
+ UINT32 vertexbuffer_address[16];
+ int vertexbuffer_stride[16];
+ int vertexbuffer_kind[16];
+ int vertexbuffer_size[16];
+ struct {
+ int enabled;
+ int sizeu;
+ int sizev;
+ int sizew;
+ int dilate;
+ int format;
+ int rectangle_pitch;
+ void *buffer;
+ } texture[4];
+ int primitives_count;
+ int indexesleft_count;
+ int indexesleft_first;
+ UINT32 indexesleft[8];
+ struct {
+ float variable_A[4]; // 0=R 1=G 2=B 3=A
+ float variable_B[4];
+ float variable_C[4];
+ float variable_D[4];
+ float variable_E[4];
+ float variable_F[4];
+ float variable_G;
+ float variable_EF[4];
+ float variable_sumclamp[4];
+ float function_RGBop1[4]; // 0=R 1=G 2=B
+ float function_RGBop2[4];
+ float function_RGBop3[4];
+ float function_Aop1;
+ float function_Aop2;
+ float function_Aop3;
+ float register_primarycolor[4]; // rw
+ float register_secondarycolor[4];
+ float register_texture0color[4];
+ float register_texture1color[4];
+ float register_texture2color[4];
+ float register_texture3color[4];
+ float register_color0[4];
+ float register_color1[4];
+ float register_spare0[4];
+ float register_spare1[4];
+ float register_fogcolor[4]; // ro
+ float register_zero[4];
+ float output[4];
+ struct {
+ float register_constantcolor0[4];
+ float register_constantcolor1[4];
+ int mapin_aA_input;
+ int mapin_aA_component;
+ int mapin_aA_mapping;
+ int mapin_aB_input;
+ int mapin_aB_component;
+ int mapin_aB_mapping;
+ int mapin_aC_input;
+ int mapin_aC_component;
+ int mapin_aC_mapping;
+ int mapin_aD_input;
+ int mapin_aD_component;
+ int mapin_aD_mapping;
+ int mapin_rgbA_input;
+ int mapin_rgbA_component;
+ int mapin_rgbA_mapping;
+ int mapin_rgbB_input;
+ int mapin_rgbB_component;
+ int mapin_rgbB_mapping;
+ int mapin_rgbC_input;
+ int mapin_rgbC_component;
+ int mapin_rgbC_mapping;
+ int mapin_rgbD_input;
+ int mapin_rgbD_component;
+ int mapin_rgbD_mapping;
+ int mapout_aCD_output;
+ int mapout_aAB_output;
+ int mapout_aSUM_output;
+ int mapout_aCD_dotproduct;
+ int mapout_aAB_dotproduct;
+ int mapout_a_muxsum;
+ int mapout_a_bias;
+ int mapout_a_scale;
+ int mapout_rgbCD_output;
+ int mapout_rgbAB_output;
+ int mapout_rgbSUM_output;
+ int mapout_rgbCD_dotproduct;
+ int mapout_rgbAB_dotproduct;
+ int mapout_rgb_muxsum;
+ int mapout_rgb_bias;
+ int mapout_rgb_scale;
+ } stage[8];
+ struct {
+ float register_constantcolor0[4];
+ float register_constantcolor1[4];
+ int color_sum_clamp;
+ int mapin_rgbA_input;
+ int mapin_rgbA_component;
+ int mapin_rgbA_mapping;
+ int mapin_rgbB_input;
+ int mapin_rgbB_component;
+ int mapin_rgbB_mapping;
+ int mapin_rgbC_input;
+ int mapin_rgbC_component;
+ int mapin_rgbC_mapping;
+ int mapin_rgbD_input;
+ int mapin_rgbD_component;
+ int mapin_rgbD_mapping;
+ int mapin_rgbE_input;
+ int mapin_rgbE_component;
+ int mapin_rgbE_mapping;
+ int mapin_rgbF_input;
+ int mapin_rgbF_component;
+ int mapin_rgbF_mapping;
+ int mapin_aG_input;
+ int mapin_aG_component;
+ int mapin_aG_mapping;
+ } final;
+ int stages;
+ int used;
+ osd_lock *lock;
+ } combiner;
+ bool alpha_test_enabled;
+ int alpha_func;
+ int alpha_reference;
+ bool blending_enabled;
+ int blend_equation;
+ int blend_function_source;
+ int blend_function_destination;
+ UINT32 blend_color;
+ bool logical_operation_enabled;
+ int logical_operation;
+ struct {
+ float modelview[16];
+ float modelview_inverse[16];
+ float projection[16];
+ float translate[4];
+ float scale[4];
+ } matrix;
+ struct {
+ vertex_program_simulator exec;
+ int instructions;
+ int upload_instruction_index;
+ int upload_instruction_component;
+ int start_instruction;
+ int upload_parameter_index;
+ int upload_parameter_component;
+ } vertexprogram;
+ int vertex_pipeline;
+ int enabled_vertex_attributes;
+ int vertex_attribute_words[16];
+ int vertex_attribute_offset[16];
+ bitmap_rgb32 fb;
+ UINT32 dilated0[16][2048];
+ UINT32 dilated1[16][2048];
+ int dilatechose[256];
+ nvidia_object_data *objectdata;
+ int debug_grab_texttype;
+ char *debug_grab_textfile;
+
+ enum NV2A_BEGIN_END {
+ STOP = 0,
+ POINTS = 1,
+ LINES = 2,
+ LINE_LOOP = 3,
+ LINE_STRIP = 4,
+ TRIANGLES = 5,
+ TRIANGLE_STRIP = 6,
+ TRIANGLE_FAN = 7,
+ QUADS = 8,
+ QUAD_STRIP = 9,
+ POLYGON = 10
+ };
+ enum NV2A_VERTEX_ATTR {
+ POS = 0,
+ WEIGHT = 1,
+ NORMAL = 2,
+ COLOR0 = 3, // diffuse
+ COLOR1 = 4, // specular
+ FOG = 5,
+ BACKCOLOR0 = 7, // diffuse
+ BACKCOLOR1 = 8, // specular
+ TEX0 = 9,
+ TEX1 = 10,
+ TEX2 = 11,
+ TEX3 = 12
+ };
+ enum NV2A_VTXBUF_TYPE {
+ NV2A_VTXBUF_TYPE_UNKNOWN_0 = 0, // used for vertex color ?
+ NV2A_VTXBUF_TYPE_FLOAT = 2,
+ NV2A_VTXBUF_TYPE_UBYTE = 4,
+ NV2A_VTXBUF_TYPE_USHORT = 5,
+ NV2A_VTXBUF_TYPE_UNKNOWN_6 = 6 // used for vertex color
+ };
+ enum NV2A_TEX_FORMAT {
+ L8 = 0x0,
+ I8 = 0x1,
+ A1R5G5B5 = 0x2,
+ A4R4G4B4 = 0x4,
+ R5G6B5 = 0x5,
+ A8R8G8B8 = 0x6,
+ X8R8G8B8 = 0x7,
+ INDEX8 = 0xb,
+ DXT1 = 0xc,
+ DXT3 = 0xe,
+ DXT5 = 0xf,
+ A1R5G5B5_RECT = 0x10,
+ R5G6B5_RECT = 0x11,
+ A8R8G8B8_RECT = 0x12,
+ L8_RECT = 0x13,
+ DSDT8_RECT = 0x17,
+ A8L8 = 0x1a,
+ I8_RECT = 0x1b,
+ A4R4G4B4_RECT = 0x1d,
+ R8G8B8_RECT = 0x1e,
+ A8L8_RECT = 0x20,
+ Z24 = 0x2a,
+ Z24_RECT = 0x2b,
+ Z16 = 0x2c,
+ Z16_RECT = 0x2d,
+ DSDT8 = 0x28,
+ HILO16 = 0x33,
+ HILO16_RECT = 0x36,
+ HILO8 = 0x44,
+ SIGNED_HILO8 = 0x45,
+ HILO8_RECT = 0x46,
+ SIGNED_HILO8_RECT = 0x47
+ };
+ enum NV2A_LOGIC_OP {
+ CLEAR = 0x1500,
+ AND = 0x1501,
+ AND_REVERSE = 0x1502,
+ COPY = 0x1503,
+ AND_INVERTED = 0x1504,
+ NOOP = 0x1505,
+ XOR = 0x1506,
+ OR = 0x1507,
+ NOR = 0x1508,
+ EQUIV = 0x1509,
+ INVERT = 0x150a,
+ OR_REVERSE = 0x150b,
+ COPY_INVERTED = 0x150c,
+ OR_INVERTED = 0x150d,
+ NAND = 0x150e,
+ SET = 0x150f
+ };
+ enum NV2A_BLEND_EQUATION {
+ FUNC_ADD = 0x8006,
+ MIN = 0x8007,
+ MAX = 0x8008,
+ FUNC_SUBTRACT = 0x800a,
+ FUNC_REVERSE_SUBTRACT = 0x80b
+ };
+ enum NV2A_BLEND_FACTOR {
+ ZERO = 0x0000,
+ ONE = 0x0001,
+ SRC_COLOR = 0x0300,
+ ONE_MINUS_SRC_COLOR = 0x0301,
+ SRC_ALPHA = 0x0302,
+ ONE_MINUS_SRC_ALPHA = 0x0303,
+ DST_ALPHA = 0x0304,
+ ONE_MINUS_DST_ALPHA = 0x0305,
+ DST_COLOR = 0x0306,
+ ONE_MINUS_DST_COLOR = 0x0307,
+ SRC_ALPHA_SATURATE = 0x0308,
+ CONSTANT_COLOR = 0x8001,
+ ONE_MINUS_CONSTANT_COLOR = 0x8002,
+ CONSTANT_ALPHA = 0x8003,
+ ONE_MINUS_CONSTANT_ALPHA = 0x8004
+ };
+ enum NV2A_COMPARISON_OP {
+ NEVER = 0x0200,
+ LESS = 0x0201,
+ EQUAL = 0x0202,
+ LEQUAL = 0x0203,
+ GREATER = 0x0204,
+ NOTEQUAL = 0x0205,
+ GEQUAL = 0x0206,
+ ALWAYS = 0x0207
+ };
+ enum NV2A_STENCIL_OP {
+ ZEROOP = 0x0000,
+ INVERTOP = 0x150a,
+ KEEP = 0x1e00,
+ REPLACE = 0x1e01,
+ INCR = 0x1e02,
+ DECR = 0x1e03,
+ INCR_WRAP = 0x8507,
+ DECR_WRAP = 0x8508
+ };
+};
diff --git a/src/mame/includes/galpani2.h b/src/mame/includes/galpani2.h
index be92174407f..668628ef422 100644
--- a/src/mame/includes/galpani2.h
+++ b/src/mame/includes/galpani2.h
@@ -14,15 +14,16 @@ public:
m_bg15(*this, "bg15"),
m_ram(*this, "ram"),
m_ram2(*this, "ram2"),
- m_rombank(*this, "rombank"),
m_maincpu(*this,"maincpu"),
m_subcpu(*this,"sub"),
m_kaneko_spr(*this, "kan_spr"),
m_spriteram(*this, "spriteram"),
m_oki2(*this, "oki2"),
m_eeprom(*this, "eeprom"),
- m_palette(*this, "palette")
- { }
+ m_palette(*this, "palette"),
+ m_bg15palette(*this, "bgpalette"),
+ m_bg8palette(*this, "bg8palette")
+ { }
required_shared_ptr_array<UINT16, 2> m_bg8;
optional_shared_ptr_array<UINT16, 2> m_palette_val;
@@ -34,9 +35,6 @@ public:
required_shared_ptr<UINT16> m_ram2;
UINT16 m_old_mcu_nmi1;
UINT16 m_old_mcu_nmi2;
- required_shared_ptr<UINT16> m_rombank;
- bitmap_ind16 *m_bg8_bitmap[2];
- bitmap_ind16 *m_bg15_bitmap;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_subcpu;
@@ -47,31 +45,29 @@ public:
DECLARE_WRITE8_MEMBER(galpani2_mcu_nmi1_w);
DECLARE_WRITE8_MEMBER(galpani2_mcu_nmi2_w);
DECLARE_WRITE8_MEMBER(galpani2_coin_lockout_w);
- DECLARE_READ16_MEMBER(galpani2_bankedrom_r);
DECLARE_READ16_MEMBER(galpani2_eeprom_r);
DECLARE_WRITE16_MEMBER(galpani2_eeprom_w);
DECLARE_WRITE8_MEMBER(galpani2_oki1_bank_w);
DECLARE_WRITE8_MEMBER(galpani2_oki2_bank_w);
+ DECLARE_WRITE16_MEMBER(subdatabank_select_w);
+ virtual void machine_start();
virtual void machine_reset();
virtual void video_start();
DECLARE_PALETTE_INIT(galpani2);
- UINT32 screen_update_galpani2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ UINT32 screen_update_galpani2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ void copybg8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer);
+ void copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt1);
TIMER_DEVICE_CALLBACK_MEMBER(galpani2_interrupt2);
void galpani2_mcu_nmi1();
void galpani2_mcu_nmi2();
/*----------- defined in video/galpani2.c -----------*/
- inline void galpani2_bg8_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_);
- inline void galpani2_palette_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_);
-
- DECLARE_WRITE16_MEMBER( galpani2_palette_0_w );
- DECLARE_WRITE16_MEMBER( galpani2_palette_1_w );
- DECLARE_WRITE16_MEMBER( galpani2_bg8_0_w );
- DECLARE_WRITE16_MEMBER( galpani2_bg8_1_w );
-
- DECLARE_WRITE16_MEMBER( galpani2_bg15_w );
required_device<okim6295_device> m_oki2;
required_device<eeprom_serial_93cxx_device> m_eeprom;
required_device<palette_device> m_palette;
+ required_device<palette_device> m_bg15palette;
+ required_device<palette_device> m_bg8palette;
+
};
diff --git a/src/mame/includes/mjkjidai.h b/src/mame/includes/mjkjidai.h
index 3f91af23bce..87ad53902c4 100644
--- a/src/mame/includes/mjkjidai.h
+++ b/src/mame/includes/mjkjidai.h
@@ -1,77 +1,49 @@
#include "machine/nvram.h"
-#include "sound/okiadpcm.h"
-
-class mjkjidai_adpcm_device;
+#include "sound/msm5205.h"
class mjkjidai_state : public driver_device
{
public:
mjkjidai_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_spriteram1(*this, "spriteram1"),
- m_spriteram2(*this, "spriteram2"),
- m_spriteram3(*this, "spriteram3"),
- m_videoram(*this, "videoram"),
m_maincpu(*this, "maincpu"),
- m_mjk_adpcm(*this, "adpcm"),
+ m_msm(*this, "msm"),
m_nvram(*this, "nvram"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
-
- required_shared_ptr<UINT8> m_spriteram1;
- required_shared_ptr<UINT8> m_spriteram2;
- required_shared_ptr<UINT8> m_spriteram3;
- required_shared_ptr<UINT8> m_videoram;
+ m_palette(*this, "palette"),
+ m_adpcmrom(*this, "adpcm"),
+ m_videoram(*this, "videoram"),
+ m_row(*this, "ROW") { }
required_device<cpu_device> m_maincpu;
- required_device<mjkjidai_adpcm_device> m_mjk_adpcm;
+ required_device<msm5205_device> m_msm;
required_device<nvram_device> m_nvram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
+ required_region_ptr<UINT8> m_adpcmrom;
+ required_shared_ptr<UINT8> m_videoram;
+
+ required_ioport_array<12> m_row;
+
+ int m_adpcm_pos;
+ int m_adpcm_end;
int m_keyb;
- int m_nvram_init_count;
- int m_display_enable;
+ bool m_nmi_enable;
+ bool m_display_enable;
tilemap_t *m_bg_tilemap;
- UINT8 m_nmi_mask;
- DECLARE_READ8_MEMBER(keyboard_r);
+ DECLARE_CUSTOM_INPUT_MEMBER(keyboard_r);
DECLARE_WRITE8_MEMBER(keyboard_select_w);
DECLARE_WRITE8_MEMBER(mjkjidai_videoram_w);
DECLARE_WRITE8_MEMBER(mjkjidai_ctrl_w);
DECLARE_WRITE8_MEMBER(adpcm_w);
+ DECLARE_WRITE_LINE_MEMBER(adpcm_int);
TILE_GET_INFO_MEMBER(get_tile_info);
+ virtual void machine_start();
+ virtual void machine_reset();
virtual void video_start();
UINT32 screen_update_mjkjidai(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect);
};
-
-class mjkjidai_adpcm_device : public device_t,
- public device_sound_interface
-{
-public:
- mjkjidai_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- ~mjkjidai_adpcm_device() {}
-
- void mjkjidai_adpcm_play (int offset, int length);
-
-protected:
- // device-level overrides
- virtual void device_config_complete();
- virtual void device_start();
-
- // sound stream update overrides
- virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
-private:
- // internal state
- oki_adpcm_state m_adpcm;
- sound_stream *m_stream;
- UINT32 m_current;
- UINT32 m_end;
- UINT8 m_nibble;
- UINT8 m_playing;
- UINT8 *m_base;
-};
-
-extern const device_type MJKJIDAI;
diff --git a/src/mame/includes/relief.h b/src/mame/includes/relief.h
index 65fd4273ed2..ff4ae3bce3e 100644
--- a/src/mame/includes/relief.h
+++ b/src/mame/includes/relief.h
@@ -14,13 +14,16 @@ class relief_state : public atarigen_state
public:
relief_state(const machine_config &mconfig, device_type type, const char *tag)
: atarigen_state(mconfig, type, tag),
- m_vad(*this, "vad") { }
+ m_vad(*this, "vad"),
+ m_okibank(*this, "okibank")
+ { }
required_device<atari_vad_device> m_vad;
+ required_memory_bank m_okibank;
UINT8 m_ym2413_volume;
UINT8 m_overall_volume;
- UINT32 m_adpcm_bank_base;
+ UINT8 m_adpcm_bank;
virtual void update_interrupts();
DECLARE_READ16_MEMBER(special_port2_r);
DECLARE_WRITE16_MEMBER(audio_control_w);
diff --git a/src/mame/includes/renegade.h b/src/mame/includes/renegade.h
index ba567fb60a7..e6940c2663f 100644
--- a/src/mame/includes/renegade.h
+++ b/src/mame/includes/renegade.h
@@ -1,24 +1,38 @@
-#include "sound/okiadpcm.h"
+#include "sound/msm5205.h"
#define MCU_BUFFER_MAX 6
-class renegade_adpcm_device;
-
class renegade_state : public driver_device
{
public:
renegade_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
- m_videoram(*this, "videoram"),
- m_videoram2(*this, "videoram2"),
- m_spriteram(*this, "spriteram"),
m_maincpu(*this,"maincpu"),
m_audiocpu(*this, "audiocpu"),
m_mcu(*this, "mcu"),
+ m_msm(*this, "msm"),
m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette") { }
+ m_rombank(*this, "rombank"),
+ m_adpcmrom(*this, "adpcm"),
+ m_fg_videoram(*this, "fg_videoram"),
+ m_bg_videoram(*this, "bg_videoram"),
+ m_spriteram(*this, "spriteram") { }
+
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ optional_device<cpu_device> m_mcu;
+ required_device<msm5205_device> m_msm;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_memory_bank m_rombank;
+ required_region_ptr<UINT8> m_adpcmrom;
+ required_shared_ptr<UINT8> m_fg_videoram;
+ required_shared_ptr<UINT8> m_bg_videoram;
+ required_shared_ptr<UINT8> m_spriteram;
+
+ UINT32 m_adpcm_pos;
+ UINT32 m_adpcm_end;
+ bool m_adpcm_playing;
- UINT8 m_bank;
int m_mcu_sim;
int m_from_main;
int m_from_mcu;
@@ -40,15 +54,10 @@ public:
int m_mcu_checksum;
const UINT8 *m_mcu_encrypt_table;
int m_mcu_encrypt_table_len;
- int m_coin;
- required_shared_ptr<UINT8> m_videoram;
- required_shared_ptr<UINT8> m_videoram2;
INT32 m_scrollx;
tilemap_t *m_bg_tilemap;
tilemap_t *m_fg_tilemap;
- required_shared_ptr<UINT8> m_spriteram;
- required_device<cpu_device> m_maincpu;
DECLARE_WRITE8_MEMBER(sound_w);
DECLARE_READ8_MEMBER(mcu_reset_r);
DECLARE_WRITE8_MEMBER(mcu_w);
@@ -65,13 +74,17 @@ public:
DECLARE_READ8_MEMBER(renegade_68705_port_c_r);
DECLARE_WRITE8_MEMBER(renegade_68705_port_c_w);
DECLARE_WRITE8_MEMBER(renegade_68705_ddr_c_w);
- DECLARE_WRITE8_MEMBER(renegade_videoram_w);
- DECLARE_WRITE8_MEMBER(renegade_videoram2_w);
+ DECLARE_WRITE8_MEMBER(fg_videoram_w);
+ DECLARE_WRITE8_MEMBER(bg_videoram_w);
DECLARE_WRITE8_MEMBER(renegade_flipscreen_w);
- DECLARE_WRITE8_MEMBER(renegade_scroll0_w);
- DECLARE_WRITE8_MEMBER(renegade_scroll1_w);
+ DECLARE_WRITE8_MEMBER(scroll_lsb_w);
+ DECLARE_WRITE8_MEMBER(scroll_msb_w);
DECLARE_CUSTOM_INPUT_MEMBER(mcu_status_r);
- DECLARE_WRITE8_MEMBER(adpcm_play_w);
+ DECLARE_WRITE8_MEMBER(adpcm_start_w);
+ DECLARE_WRITE8_MEMBER(adpcm_addr_w);
+ DECLARE_WRITE8_MEMBER(adpcm_stop_w);
+ DECLARE_WRITE_LINE_MEMBER(adpcm_int);
+
DECLARE_DRIVER_INIT(kuniokun);
DECLARE_DRIVER_INIT(kuniokunb);
DECLARE_DRIVER_INIT(renegade);
@@ -82,40 +95,5 @@ public:
virtual void video_start();
UINT32 screen_update_renegade(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(renegade_interrupt);
- void setbank();
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
- required_device<cpu_device> m_audiocpu;
- optional_device<cpu_device> m_mcu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<palette_device> m_palette;
};
-
-class renegade_adpcm_device : public device_t,
- public device_sound_interface
-{
-public:
- renegade_adpcm_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
- ~renegade_adpcm_device() {}
-
- DECLARE_WRITE8_MEMBER(play_w);
-
-protected:
- // device-level overrides
- virtual void device_config_complete();
- virtual void device_start();
-
- // sound stream update overrides
- virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples);
-
-private:
- // internal state
- oki_adpcm_state m_adpcm;
- sound_stream *m_stream;
- UINT32 m_current;
- UINT32 m_end;
- UINT8 m_nibble;
- UINT8 m_playing;
- UINT8 *m_base;
-};
-
-extern const device_type RENEGADE_ADPCM;
diff --git a/src/mame/includes/tigeroad.h b/src/mame/includes/tigeroad.h
index 6daa05b91cb..5d01f416e1f 100644
--- a/src/mame/includes/tigeroad.h
+++ b/src/mame/includes/tigeroad.h
@@ -5,6 +5,7 @@
#include "sound/2203intf.h"
#include "sound/msm5205.h"
#include "cpu/m6805/m6805.h"
+#include "video/tigeroad_spr.h"
class tigeroad_state : public driver_device
{
@@ -20,6 +21,7 @@ public:
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_mcu(*this, "mcu"),
+ m_spritegen(*this, "spritegen"),
m_has_coinlock(1)
{ }
@@ -43,7 +45,6 @@ public:
TILEMAP_MAPPER_MEMBER(tigeroad_tilemap_scan);
virtual void video_start();
UINT32 screen_update_tigeroad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority );
void f1dream_protection_w(address_space &space);
DECLARE_WRITE_LINE_MEMBER(irqhandler);
required_device<cpu_device> m_maincpu;
@@ -52,6 +53,7 @@ public:
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_device<cpu_device> m_mcu;
+ required_device<tigeroad_spr_device> m_spritegen;
UINT16 m_control[2];
diff --git a/src/mame/includes/toaplan1.h b/src/mame/includes/toaplan1.h
index ad9a04fde9a..daa44248c78 100644
--- a/src/mame/includes/toaplan1.h
+++ b/src/mame/includes/toaplan1.h
@@ -27,7 +27,7 @@ public:
optional_shared_ptr<UINT8> m_sharedram;
- int m_coin_count; /* coin count increments on startup ? , so dont count it */
+ int m_coin_count; /* coin count increments on startup ? , so don't count it */
int m_intenable;
/* Demon world */
diff --git a/src/mame/includes/yunsun16.h b/src/mame/includes/yunsun16.h
index 0399ed7e3a0..8ae94f9abb0 100644
--- a/src/mame/includes/yunsun16.h
+++ b/src/mame/includes/yunsun16.h
@@ -9,18 +9,25 @@ class yunsun16_state : public driver_device
public:
yunsun16_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_audiocpu(*this, "audiocpu"),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_screen(*this, "screen"),
+ m_palette(*this, "palette"),
m_vram_0(*this, "vram_0"),
m_vram_1(*this, "vram_1"),
m_scrollram_0(*this, "scrollram_0"),
m_scrollram_1(*this, "scrollram_1"),
m_priorityram(*this, "priorityram"),
- m_spriteram(*this, "spriteram"),
- m_audiocpu(*this, "audiocpu"),
- m_maincpu(*this, "maincpu"),
- m_gfxdecode(*this, "gfxdecode"),
- m_screen(*this, "screen"),
- m_palette(*this, "palette") { }
+ m_spriteram(*this, "spriteram") { }
+ /* devices */
+ required_device<cpu_device> m_maincpu;
+ optional_device<cpu_device> m_audiocpu;
+ required_device<gfxdecode_device> m_gfxdecode;
+ required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
+
/* memory pointers */
required_shared_ptr<UINT16> m_vram_0;
required_shared_ptr<UINT16> m_vram_1;
@@ -36,14 +43,14 @@ public:
int m_sprites_scrolldx;
int m_sprites_scrolldy;
- /* devices */
- optional_device<cpu_device> m_audiocpu;
- DECLARE_WRITE16_MEMBER(yunsun16_sound_bank_w);
+ DECLARE_WRITE8_MEMBER(sound_bank_w);
DECLARE_WRITE16_MEMBER(magicbub_sound_command_w);
- DECLARE_WRITE16_MEMBER(yunsun16_vram_0_w);
- DECLARE_WRITE16_MEMBER(yunsun16_vram_1_w);
+ DECLARE_WRITE16_MEMBER(vram_0_w);
+ DECLARE_WRITE16_MEMBER(vram_1_w);
DECLARE_DRIVER_INIT(magicbub);
- TILEMAP_MAPPER_MEMBER(yunsun16_tilemap_scan_pages);
+ DECLARE_MACHINE_START(shocking);
+ DECLARE_MACHINE_RESET(shocking);
+ TILEMAP_MAPPER_MEMBER(tilemap_scan_pages);
TILE_GET_INFO_MEMBER(get_tile_info_0);
TILE_GET_INFO_MEMBER(get_tile_info_1);
virtual void machine_start();
@@ -52,8 +59,4 @@ public:
UINT32 screen_update_yunsun16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect );
DECLARE_WRITE_LINE_MEMBER(soundirq);
- required_device<cpu_device> m_maincpu;
- required_device<gfxdecode_device> m_gfxdecode;
- required_device<screen_device> m_screen;
- required_device<palette_device> m_palette;
};
diff --git a/src/mame/layout/gts1.lay b/src/mame/layout/gts1.lay
new file mode 100644
index 00000000000..2193ca88a6a
--- /dev/null
+++ b/src/mame/layout/gts1.lay
@@ -0,0 +1,106 @@
+<!-- gts1 copied from gts3.lay -->
+
+<!-- 2014-12-06: Initial version. -->
+
+<mamelayout version="2">
+
+ <element name="digit" defstate="0">
+ <led8seg>
+ <color red="0.0" green="0.75" blue="1.0" />
+ </led8seg>
+ </element>
+ <element name="background">
+ <rect>
+ <bounds left="0" top="0" right="1" bottom="1" />
+ <color red="0.0" green="0.0" blue="0.0" />
+ </rect>
+ </element>
+ <element name="P3"><text string="Player 1"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P4"><text string="Player 2"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P5"><text string="Player 3"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+ <element name="P6"><text string="Player 4"><color red="1.0" green="1.0" blue="1.0" /></text></element>
+
+ <view name="Default Layout">
+
+ <!-- Background -->
+ <backdrop element="background">
+ <bounds left="0" top="25" right="325" bottom="179" />
+ </backdrop>
+
+ <!-- Top Row -->
+ <bezel name="digit0_0" element="digit">
+ <bounds left="10" top="45" right="30" bottom="84" />
+ </bezel>
+ <bezel name="digit0_1" element="digit">
+ <bounds left="34" top="45" right="54" bottom="84" />
+ </bezel>
+ <bezel name="digit0_2" element="digit">
+ <bounds left="58" top="45" right="78" bottom="84" />
+ </bezel>
+ <bezel name="digit0_3" element="digit">
+ <bounds left="87" top="45" right="107" bottom="84" />
+ </bezel>
+ <bezel name="digit0_4" element="digit">
+ <bounds left="111" top="45" right="131" bottom="84" />
+ </bezel>
+ <bezel name="digit0_5" element="digit">
+ <bounds left="135" top="45" right="155" bottom="84" />
+ </bezel>
+ <bezel name="digit1_0" element="digit">
+ <bounds left="170" top="45" right="190" bottom="84" />
+ </bezel>
+ <bezel name="digit1_1" element="digit">
+ <bounds left="194" top="45" right="214" bottom="84" />
+ </bezel>
+ <bezel name="digit1_2" element="digit">
+ <bounds left="218" top="45" right="238" bottom="84" />
+ </bezel>
+ <bezel name="digit1_3" element="digit">
+ <bounds left="247" top="45" right="267" bottom="84" />
+ </bezel>
+ <bezel name="digit1_4" element="digit">
+ <bounds left="271" top="45" right="291" bottom="84" />
+ </bezel>
+ <bezel name="digit1_5" element="digit">
+ <bounds left="295" top="45" right="315" bottom="84" />
+ </bezel>
+
+ <!-- Bottom Row -->
+ <bezel name="digit2_0" element="digit">
+ <bounds left="10" top="100" right="30" bottom="139" />
+ </bezel>
+ <bezel name="digit2_1" element="digit">
+ <bounds left="34" top="100" right="54" bottom="139" />
+ </bezel>
+ <bezel name="digit2_2" element="digit">
+ <bounds left="58" top="100" right="78" bottom="139" />
+ </bezel>
+ <bezel name="digit2_3" element="digit">
+ <bounds left="87" top="100" right="107" bottom="139" />
+ </bezel>
+ <bezel name="digit2_4" element="digit">
+ <bounds left="111" top="100" right="131" bottom="139" />
+ </bezel>
+ <bezel name="digit2_5" element="digit">
+ <bounds left="135" top="100" right="155" bottom="139" />
+ </bezel>
+ <bezel name="digit3_0" element="digit">
+ <bounds left="170" top="100" right="190" bottom="139" />
+ </bezel>
+ <bezel name="digit3_1" element="digit">
+ <bounds left="194" top="100" right="214" bottom="139" />
+ </bezel>
+ <bezel name="digit3_2" element="digit">
+ <bounds left="218" top="100" right="238" bottom="139" />
+ </bezel>
+ <bezel name="digit3_3" element="digit">
+ <bounds left="247" top="100" right="267" bottom="139" />
+ </bezel>
+ <bezel name="digit3_4" element="digit">
+ <bounds left="271" top="100" right="291" bottom="139" />
+ </bezel>
+ <bezel name="digit3_5" element="digit">
+ <bounds left="295" top="100" right="315" bottom="139" />
+ </bezel>
+ </view>
+</mamelayout>
diff --git a/src/mame/machine/mie.c b/src/mame/machine/mie.c
index 6b3d2632179..c4053d8eff1 100644
--- a/src/mame/machine/mie.c
+++ b/src/mame/machine/mie.c
@@ -357,4 +357,8 @@ READ8_MEMBER(mie_device::jvs_sense_r)
void mie_device::maple_reset()
{
+ // ignoring reset maple pattern is HUGE HACK
+ // current implementation works only because of in such case procedure of firmware upload by games will be skipped at all
+ // so in better case - inputs doesnt work if game uses very different firmware version than already uploaded by BIOS, in worst case - game hang/reboot
+ // TODO: figure out why game code doesn't wait long enough for internal firmware's RAM test completed in the case of proper reset
}
diff --git a/src/mame/machine/naomicrypt.c b/src/mame/machine/naomicrypt.c
index 911a00a9c44..d79ba815f42 100644
--- a/src/mame/machine/naomicrypt.c
+++ b/src/mame/machine/naomicrypt.c
@@ -54,7 +54,6 @@ static const struct game_keys keys_table[] =
{ "samba", 0x000a8b5d }, // 840-0020 1999
{ "sambap", 0x000a8b5d }, // 840-0020 1999
{ "virnbao", 0x00068b58 }, // 840-0021 2000
- { "tduno2", 0x2f6f0f8d }, // 840-0022 2000
{ "18wheelr", 0x0007cf54 }, // 840-0023 2000
{ "marstv", 0x000b8ef5 }, // 840-0025 1999
{ "vonot", 0x00010715 }, // 840-0028 2000
@@ -89,6 +88,7 @@ static const struct game_keys keys_table[] =
{ "zerogu2", 0x0007c010 }, // 841-0020 2001
{ "hmgeo", 0x00038510 }, // HMG016007 2001
// M1
+ { "tduno2", 0x2f6f0f8d }, // 840-0022 2000
{ "qmegamis", 0x96489bcd }, // 840-0030 2000
{ "gram2000", 0x3f5c807f }, // 840-0039 2000
{ "vtenis2c", 0x43472d2d }, // 840-0084 2001
@@ -99,13 +99,6 @@ static const struct game_keys keys_table[] =
{ "kick4csh", 0xc9570882 }, // 840-0140 2004
{ "mtkob2", 0x3892fb3a }, // 840-0150 2003
{ "mvsc2", 0x7c6e8bc1 }, // 841-0007-02 2000
-// M4
- { "pokasuka", 0x4792bcde }, // 840-0170 2007
- { "asndynmt", 0x00008784 }, // 840-0175 2007
- { "sl2007", 0x88c274c7 }, // 841-0057 2007
- { "ausfache", 0x092b6007 }, // 841-0058 2008
- { "illvelo", 0xf3a5982c }, // 841-0059 2008
- { "mbaa", 0xab0f2aba }, // 841-0061 2008
{ NULL, 0 } // end of table
};
diff --git a/src/mame/machine/naomim4.c b/src/mame/machine/naomim4.c
index eee229ce47a..2da4464824b 100644
--- a/src/mame/machine/naomim4.c
+++ b/src/mame/machine/naomim4.c
@@ -60,15 +60,10 @@ void naomi_m4_board::device_start()
{
naomi_board::device_start();
-#if USE_NAOMICRYPT
- UINT32 tempkey = get_naomi_key(machine());
- iv = (tempkey >> 16) &0xffff;
- key = tempkey & 0xffff;
-#else
const UINT8 *key_data = memregion(key_tag)->base();
- subkey1 = (key_data[17] << 8) | key_data[16];
- subkey2 = (key_data[19] << 8) | key_data[18];
-#endif
+ subkey1 = (key_data[0x5e2] << 8) | key_data[0x5e0];
+ subkey2 = (key_data[0x5e6] << 8) | key_data[0x5e4];
+
buffer = auto_alloc_array(machine(), UINT8, BUFFER_SIZE);
enc_init();
diff --git a/src/mame/machine/pgmprot_igs027a_type3.c b/src/mame/machine/pgmprot_igs027a_type3.c
index 804565979ec..00328b79c3b 100644
--- a/src/mame/machine/pgmprot_igs027a_type3.c
+++ b/src/mame/machine/pgmprot_igs027a_type3.c
@@ -498,8 +498,8 @@ void pgm_arm_type3_state::pgm_create_dummy_internal_arm_region_theglad(int is_sv
temp16[(base) /2] = 0xff1e; base += 2;
temp16[(base) /2] = 0xe12f; base += 2;
- // the non-EO area starts in the middle of a function that seems similar to those at 000037E4 / 000037D4 in killbldp.. by setting this up we allow the intro to run
- // it sets '0x10000038' to a value ot 1
+ // the non-EO area starts in the middle of a function that seems similar to those at 000037E4 / 000037D4 in killbldp. by setting this up we allow the intro to run
+ // it sets '0x10000038' to a value of 1
base = 0x184;
temp16[(base) /2] = 0x105c; base += 2;
temp16[(base) /2] = 0xE59F; base += 2;
diff --git a/src/mame/machine/raiden2cop.c b/src/mame/machine/raiden2cop.c
index c9eebf52f4e..12cc4918257 100644
--- a/src/mame/machine/raiden2cop.c
+++ b/src/mame/machine/raiden2cop.c
@@ -1485,9 +1485,9 @@ void raiden2cop_device::LEGACY_execute_c480(address_space &space, int offset, UI
*/
void raiden2cop_device::LEGACY_execute_d104(address_space &space, int offset, UINT16 data)
{
- UINT8 *ROM = space.machine().root_device().memregion("maincpu")->base();
- UINT32 rom_addr = (m_cop_rom_addr_hi << 16 | m_cop_rom_addr_lo) & ~1;
- UINT16 rom_data = (ROM[rom_addr + 0]) | (ROM[rom_addr + 1] << 8);
+ UINT16 *ROM = (UINT16 *)space.machine().root_device().memregion("maincpu")->base();
+ UINT32 rom_addr = (m_cop_rom_addr_hi << 16 | m_cop_rom_addr_lo);
+ UINT16 rom_data = ROM[rom_addr / 2];
/* writes to some unemulated COP registers, then puts the result in here, adding a parameter taken from ROM */
//space.write_word(cop_regs[0]+(0x44 + offset * 4), rom_data);
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index ba908656265..107fd309e50 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -5102,7 +5102,23 @@ ecap // 1999.12 Emergency Call Ambulance - US proto or location test
// Sega Lindbergh games
lindbios
-
+hotd4
+vf5
+abclimax
+letsgoju
+outr2sdx
+psmash3
+vtennis3
+2spicy
+ghostsev
+initiad4
+initiad4c
+segartv
+hotdex
+primevah
+rambo
+hummerxt
+lbvbiosu
// Deniam games
// they run on Sega System 16 video hardware
@@ -6931,6 +6947,7 @@ quantump // 136016 (c) 1982 // made by Gencomp
bwidow // 136017 (c) 1982
starwars // 136021 (c) 1983
starwars1 // 136021 (c) 1983
+starwarso // 136021 (c) 1983
tomcatsw // (proto) (c) 1983
mhavoc // 136025 (c) 1983
mhavoc2 // 136025 (c) 1983
@@ -10339,6 +10356,7 @@ thedeep // (c) 1987 Wood Place
rundeep // (c) 1988 Cream (bootleg?)
wallc // (c) 1984 Midcoin
wallca // (c) 1984 Midcoin
+brkblast // bootleg (Fadesa)
sidampkr //
wink // (c) 1985 Midcoin
winka // (c) 1985 Midcoin
diff --git a/src/mame/mame.mak b/src/mame/mame.mak
index bad1b180f51..300a071e9c8 100644
--- a/src/mame/mame.mak
+++ b/src/mame/mame.mak
@@ -988,6 +988,7 @@ $(MAMEOBJ)/capcom.a: \
$(DRIVERS)/alien.o \
$(DRIVERS)/bionicc.o $(VIDEO)/bionicc.o \
$(DRIVERS)/supduck.o \
+ $(VIDEO)/tigeroad_spr.o \
$(DRIVERS)/blktiger.o $(VIDEO)/blktiger.o \
$(DRIVERS)/cbasebal.o $(VIDEO)/cbasebal.o \
$(DRIVERS)/commando.o $(VIDEO)/commando.o \
@@ -1694,7 +1695,7 @@ $(MAMEOBJ)/sega.a: \
$(DRIVERS)/bingoc.o \
$(DRIVERS)/blockade.o $(AUDIO)/blockade.o $(VIDEO)/blockade.o \
$(DRIVERS)/calorie.o \
- $(DRIVERS)/chihiro.o \
+ $(DRIVERS)/chihiro.o $(VIDEO)/chihiro.o \
$(DRIVERS)/coolridr.o \
$(DRIVERS)/deniam.o $(VIDEO)/deniam.o \
$(DRIVERS)/dotrikun.o \
@@ -2649,6 +2650,7 @@ $(DRIVERS)/goldnpkr.o: $(LAYOUT)/goldnpkr.lh \
$(LAYOUT)/pmpoker.lh \
$(LAYOUT)/upndown.lh
+$(DRIVERS)/gts1.o: $(LAYOUT)/gts1.lh
$(DRIVERS)/gts3.o: $(LAYOUT)/gts3.lh
$(DRIVERS)/gts80.o: $(LAYOUT)/gts80.lh
$(DRIVERS)/gts80a.o: $(LAYOUT)/gts80a.lh
diff --git a/src/mame/video/bionicc.c b/src/mame/video/bionicc.c
index 0a395608f37..1765b418f34 100644
--- a/src/mame/video/bionicc.c
+++ b/src/mame/video/bionicc.c
@@ -185,43 +185,7 @@ WRITE16_MEMBER(bionicc_state::bionicc_gfxctrl_w)
***************************************************************************/
-void bionicc_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
-{
- UINT16 *buffered_spriteram = m_spriteram->buffer();
- int offs;
- gfx_element *gfx = m_gfxdecode->gfx(3);
- for (offs = (m_spriteram->bytes() - 8) / 2; offs >= 0; offs -= 4)
- {
- int tile_number = buffered_spriteram[offs] & 0x7ff;
- if( tile_number != 0x7ff )
- {
- int attr = buffered_spriteram[offs + 1];
- int color = (attr & 0x3c) >> 2;
- int flipx = attr & 0x02;
- int flipy = 0;
- int sx = (INT16)buffered_spriteram[offs + 3]; /* signed */
- int sy = (INT16)buffered_spriteram[offs + 2]; /* signed */
-
- if (sy > 512 - 16)
- sy -= 512;
-
- if (flip_screen())
- {
- sx = 240 - sx;
- sy = 240 - sy;
- flipx = !flipx;
- flipy = !flipy;
- }
-
- gfx->transpen(bitmap,cliprect,
- tile_number,
- color,
- flipx,flipy,
- sx,sy,15);
- }
- }
-}
UINT32 bionicc_state::screen_update_bionicc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
@@ -229,7 +193,7 @@ UINT32 bionicc_state::screen_update_bionicc(screen_device &screen, bitmap_ind16
m_fg_tilemap->draw(screen, bitmap, cliprect, 1 | TILEMAP_DRAW_LAYER1, 0); /* nothing in FRONT */
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER1, 0);
- draw_sprites(bitmap, cliprect);
+ m_spritegen->draw_sprites(bitmap, cliprect, m_gfxdecode, 3, m_spriteram->buffer(), m_spriteram->bytes(), flip_screen(), 0 );
m_fg_tilemap->draw(screen, bitmap, cliprect, 0 | TILEMAP_DRAW_LAYER0, 0);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
diff --git a/src/mame/video/bosco.c b/src/mame/video/bosco.c
index e187a668a0d..a5f534acb87 100644
--- a/src/mame/video/bosco.c
+++ b/src/mame/video/bosco.c
@@ -248,7 +248,7 @@ void bosco_state::draw_stars(bitmap_ind16 &bitmap, const rectangle &cliprect, in
x = (m_star_seed_tab[star_cntr].x + m_stars_scrollx) % 256;
y = (m_star_seed_tab[star_cntr].y + m_stars_scrolly) % 256;
- /* dont draw the stars that are off the screen */
+ /* don't draw the stars that are off the screen */
if ( x < 224 )
{
if (flip) x += 64;
diff --git a/src/mame/video/btime.c b/src/mame/video/btime.c
index d1fccbc6448..79245dbfd2e 100644
--- a/src/mame/video/btime.c
+++ b/src/mame/video/btime.c
@@ -303,8 +303,8 @@ void btime_state::draw_chars( bitmap_ind16 &bitmap, const rectangle &cliprect, U
if (flip_screen())
{
- x = 31 + 16 - x;
- y = 33 - y;
+ x = 31 - x;
+ y = 31 - y;
}
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
@@ -339,8 +339,8 @@ void btime_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect,
if (flip_screen())
{
- x = 240 + 128 - x;
- y = 256 - y + sprite_y_adjust_flip_screen;
+ x = 240 - x;
+ y = 240 - y + sprite_y_adjust_flip_screen;
flipx = !flipx;
flipy = !flipy;
@@ -391,8 +391,8 @@ void btime_state::draw_background( bitmap_ind16 &bitmap, const rectangle &clipre
if (flip_screen())
{
- x = 240 + 128 - x;
- y = 256 - y;
+ x = 240 - x;
+ y = 240 - y;
}
m_gfxdecode->gfx(2)->opaque(bitmap,cliprect,
@@ -488,7 +488,7 @@ UINT32 btime_state::screen_update_bnj(screen_device &screen, bitmap_ind16 &bitma
if (flip_screen())
{
sx = 496 - sx;
- sy = 256 - sy;
+ sy = 240 - sy;
}
m_gfxdecode->gfx(2)->opaque(*m_background_bitmap,m_background_bitmap->cliprect(),
@@ -534,7 +534,7 @@ UINT32 btime_state::screen_update_cookrace(screen_device &screen, bitmap_ind16 &
if (flip_screen())
{
sx = 31 - sx;
- sy = 33 - sy;
+ sy = 31 - sy;
}
m_gfxdecode->gfx(2)->opaque(bitmap,cliprect,
diff --git a/src/mame/video/chihiro.c b/src/mame/video/chihiro.c
new file mode 100644
index 00000000000..40186ff88a9
--- /dev/null
+++ b/src/mame/video/chihiro.c
@@ -0,0 +1,3528 @@
+#include "emu.h"
+#include "video/poly.h"
+#include "bitmap.h"
+#include "includes/chihiro.h"
+
+//#define LOG_NV2A
+
+const char *vertex_program_disassembler::srctypes[] = { "??", "Rn", "Vn", "Cn" };
+const char *vertex_program_disassembler::scaops[] = { "NOP", "IMV", "RCP", "RCC", "RSQ", "EXP", "LOG", "LIT", "???", "???", "???", "???", "???", "???", "???", "???", "???" };
+const int vertex_program_disassembler::scapar2[] = { 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+const char *vertex_program_disassembler::vecops[] = { "NOP", "MOV", "MUL", "ADD", "MAD", "DP3", "DPH", "DP4", "DST", "MIN", "MAX", "SLT", "SGE", "ARL", "???", "???", "???" };
+const int vertex_program_disassembler::vecpar2[] = { 0, 4, 6, 5, 7, 6, 6, 6, 6, 6, 6, 6, 6, 4, 0, 0, 0 };
+const char *vertex_program_disassembler::vecouts[] = { "oPos", "???", "???", "oD0", "oD1", "oFog", "oPts", "oB0", "oB1", "oT0", "oT1", "oT2", "oT3" };
+const char vertex_program_disassembler::compchar[] = { 'x', 'y', 'z', 'w' };
+
+/*
+Each vertex program instruction is a 128 bit word made of the fields:
+d f
+w b i
+o i e
+r t l
+d s d
++-+-----+-------
+|0|31-0 |not used
++-+-----+-------
+| |31-29|not used
+| +-----+-------
+| |28-25|scalar operation
+| +-----+-------
+| |24-21|vectorial operation
+| +-----+-------
+| |20-13|index for source constant C[]
+| +-----+-------
+| |12-9 |input vector index
+| +-----+-------
+|1| 8 |parameter A:sign
+| +-----+-------
+| | 7-6 |parameter A:swizzle x
+| +-----+-------
+| | 5-4 |parameter A:swizzle y
+| +-----+-------
+| | 3-2 |parameter A:swizzle z
+| +-----+-------
+| | 1-0 |parameter A:swizzle w
+|-+-----+-------
+| |31-28|parameter A:parameter Rn index
+| +-----+-------
+| |27-26|parameter A:input type 1:Rn 2:Vn 3:C[n]
+| +-----+-------
+| | 25 |parameter B:sign
+| +-----+-------
+| |24-23|parameter B:swizzle x
+| +-----+-------
+| |22-21|parameter B:swizzle y
+| +-----+-------
+| |20-19|parameter B:swizzle z
+| +-----+-------
+|2|18-17|parameter B:swizzle w
+| +-----+-------
+| |16-13|parameter B:parameter Rn index
+| +-----+-------
+| |12-11|parameter B:input type 1:Rn 2:Vn 3:C[n]
+| +-----+-------
+| | 10 |parameter C:sign
+| +-----+-------
+| | 9-8 |parameter C:swizzle x
+| +-----+-------
+| | 7-6 |parameter C:swizzle y
+| +-----+-------
+| | 5-4 |parameter C:swizzle z
+| +-----+-------
+| | 3-2 |parameter C:swizzle w
+| +-----+-------
+| | 1-0 |
+|-+ |parameter C:parameter Rn index
+| |31-30|
+| +-----+-------
+| |29-28|parameter C:input type 1:Rn 2:Vn 3:C[n]
+| +-----+-------
+| |27-24|output Rn mask from vectorial operation
+| +-----+-------
+| |23-20|output Rn index from vectorial operation
+| +-----+-------
+| |19-16|output Rn mask from scalar operation
+| +-----+-------
+|3|15-12|output vector write mask
+| +-----+-------
+| | 11 |1:output is output vector 0:output is constant C[]
+| +-----+-------
+| |10-3 |output vector/constant index
+| +-----+-------
+| | 2 |0:output Rn from vectorial operation 1:output Rn from scalar operation
+| +-----+-------
+| | 1 |1:add a0x to index for source constant C[]
+| +-----+-------
+| | 0 |1:end of program
++-+-----+-------
+Each vertex program instruction can generate up to three destination values using up to three source values.
+The first possible destination is to Rn from a vectorial operation.
+The second possible destination is to a vertex shader output or C[n] from a vectorial or scalar operation.
+The third possible destination is to Rn from a scalar operation.
+*/
+void vertex_program_disassembler::decodefields(unsigned int *dwords, int offset, fields &decoded)
+{
+ unsigned int srcbits[3];
+ int a;
+
+ srcbits[0] = ((dwords[1 + offset] & 0x1ff) << 6) | (dwords[2 + offset] >> 26);
+ srcbits[1] = (dwords[2 + offset] >> 11) & 0x7fff;
+ srcbits[2] = ((dwords[2 + offset] & 0x7ff) << 4) | (dwords[3 + offset] >> 28);
+ decoded.ScaOperation = (int)(dwords[1 + offset] >> 25) & 0xf;
+ decoded.VecOperation = (int)(dwords[1 + offset] >> 21) & 0xf;
+ decoded.SourceConstantIndex = (int)(dwords[1 + offset] >> 13) & 0xff;
+ decoded.InputIndex = (int)(dwords[1 + offset] >> 9) & 0xf;
+ for (a = 0; a < 3; a++)
+ {
+ decoded.src[a].Sign = (int)(srcbits[a] >> 14) & 1;
+ decoded.src[a].SwizzleX = (int)(srcbits[a] >> 12) & 3;
+ decoded.src[a].SwizzleY = (int)(srcbits[a] >> 10) & 3;
+ decoded.src[a].SwizzleZ = (int)(srcbits[a] >> 8) & 3;
+ decoded.src[a].SwizzleW = (int)(srcbits[a] >> 6) & 3;
+ decoded.src[a].TempIndex = (int)(srcbits[a] >> 2) & 0xf;
+ decoded.src[a].ParameterType = (int)(srcbits[a] >> 0) & 3;
+ }
+
+ decoded.VecTempWriteMask = (int)(dwords[3 + offset] >> 24) & 0xf;
+ decoded.VecTempIndex = (int)(dwords[3 + offset] >> 20) & 0xf;
+ decoded.ScaTempWriteMask = (int)(dwords[3 + offset] >> 16) & 0xf;
+ decoded.OutputWriteMask = (int)(dwords[3 + offset] >> 12) & 0xf;
+ decoded.OutputSelect = (int)(dwords[3 + offset] >> 11) & 0x1;
+ decoded.OutputIndex = (int)(dwords[3 + offset] >> 3) & 0xff;
+ decoded.MultiplexerControl = (int)(dwords[3 + offset] >> 2) & 0x1;
+ decoded.Usea0x = (int)(dwords[3 + offset] >> 1) & 0x1;
+ decoded.EndOfProgram = (int)(dwords[3 + offset] >> 0) & 0x1;
+}
+
+int vertex_program_disassembler::disassemble_mask(int mask, char *s)
+{
+ int l;
+
+ *s = 0;
+ if (mask == 15)
+ return 0;
+ s[0] = '.';
+ l = 1;
+ if ((mask & 8) != 0) {
+ s[l] = 'x';
+ l++;
+ }
+ if ((mask & 4) != 0){
+ s[l] = 'y';
+ l++;
+ }
+ if ((mask & 2) != 0){
+ s[l] = 'z';
+ l++;
+ }
+ if ((mask & 1) != 0){
+ s[l] = 'w';
+ l++;
+ }
+ s[l] = 0;
+ return l;
+}
+
+int vertex_program_disassembler::disassemble_swizzle(sourcefields f, char *s)
+{
+ int t, l;
+
+ t = 4;
+ if (f.SwizzleW == 3)
+ {
+ t = t - 1;
+ if (f.SwizzleZ == 2)
+ {
+ t = t - 1;
+ if (f.SwizzleY == 1)
+ {
+ t = t - 1;
+ if (f.SwizzleX == 0)
+ {
+ t = t - 1;
+ }
+ }
+ }
+ }
+ *s = 0;
+ if (t == 0)
+ return 0;
+ s[0] = '.';
+ l = 1;
+ if (t > 0)
+ {
+ s[l] = compchar[f.SwizzleX];
+ l++;
+ }
+ if (t > 1)
+ {
+ s[l] = compchar[f.SwizzleY];
+ l++;
+ }
+ if (t > 2)
+ {
+ s[l] = compchar[f.SwizzleZ];
+ l++;
+ }
+ if (t > 3)
+ {
+ s[l] = compchar[f.SwizzleW];
+ l++;
+ }
+ s[l] = 0;
+ return l;
+}
+
+int vertex_program_disassembler::disassemble_source(sourcefields f, fields fi, char *s)
+{
+ int l;
+
+ if (f.ParameterType == 0) {
+ strcpy(s, ",???");
+ return 4;
+ }
+ l = 0;
+ if (f.Sign != 0) {
+ s[l] = '-';
+ l++;
+ }
+ if (f.ParameterType == 1) {
+ s[l] = 'r';
+ l = l + 1 + sprintf(s + l + 1, "%d", f.TempIndex);
+ }
+ else if (f.ParameterType == 2){
+ s[l] = 'v';
+ l = l + 1 + sprintf(s + l + 1, "%d", fi.InputIndex);
+ }
+ else
+ {
+ if (fi.Usea0x != 0)
+ {
+ if (fi.SourceConstantIndex >= 96) {
+ strcpy(s + l, "c[");
+ l = l + 2;
+ l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
+ strcpy(s + l, "+a0.x]");
+ l = l + 6;
+ }
+ else {
+ strcpy(s + l, "c[a0.x");
+ l = l + 6;
+ l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
+ s[l] = ']';
+ l++;
+ }
+ }
+ else {
+ strcpy(s + l, "c[");
+ l = l + 2;
+ l = l + sprintf(s + l, "%d", fi.SourceConstantIndex - 96);
+ s[l] = ']';
+ l++;
+ }
+ }
+ l = l + disassemble_swizzle(f, s + l);
+ s[l] = 0;
+ return l;
+}
+
+int vertex_program_disassembler::disassemble_output(fields f, char *s)
+{
+ int l;
+
+ if (f.OutputSelect == 1) {
+ strcpy(s, vecouts[f.OutputIndex]);
+ return strlen(s);
+ }
+ else {
+ strcpy(s, "c[");
+ l = 2;
+ l = l + sprintf(s + l, "%d", f.OutputIndex - 96);
+ s[l] = ']';
+ l++;
+ }
+ s[l] = 0;
+ return l;
+}
+
+int vertex_program_disassembler::output_types(fields f, int *o)
+{
+ o[0] = o[1] = o[2] = o[3] = o[4] = o[5] = 0;
+ if ((f.VecOperation > 0) && (f.VecTempWriteMask != 0))
+ o[0] = 1;
+ if ((f.VecOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 0))
+ o[1] = 1;
+ if ((f.ScaOperation > 0) && (f.OutputWriteMask != 0) && (f.MultiplexerControl == 1))
+ o[2] = 1;
+ if ((f.ScaOperation > 0) && (f.ScaTempWriteMask != 0))
+ o[3] = 1;
+ if (f.VecOperation == 13)
+ o[4] = 1;
+ if (f.EndOfProgram == 1)
+ o[5] = 1;
+ return o[0] + o[1] + o[2] + o[3] + o[4] + o[5];
+}
+
+int vertex_program_disassembler::disassemble(unsigned int *instruction, char *line)
+{
+ int b, p;
+ char *c;
+
+ if (state == 0) {
+ decodefields(instruction, 0, f);
+ output_types(f, o);
+ state = 1;
+ }
+ if (o[0] != 0)
+ {
+ o[0] = 0;
+ c = line;
+ strcpy(c, vecops[f.VecOperation]);
+ c = c + strlen(c);
+ strcpy(c, " r");
+ c = c + 2;
+ c = c + sprintf(c, "%d", f.VecTempIndex);
+ c = c + disassemble_mask(f.VecTempWriteMask, c);
+ b = 0;
+ for (p = 4; p != 0; p = p >> 1)
+ {
+ if ((vecpar2[f.VecOperation] & p) != 0) {
+ c[0] = ',';
+ c++;
+ c = c + disassemble_source(f.src[b], f, c);
+ }
+ b++;
+ }
+ *c = 0;
+ return 1;
+ }
+ if (o[1] != 0)
+ {
+ o[1] = 0;
+ c = line;
+ strcpy(c, vecops[f.VecOperation]);
+ c = c + strlen(c);
+ *c = ' ';
+ c++;
+ c = c + disassemble_output(f, c);
+ c = c + disassemble_mask(f.OutputWriteMask, c);
+ b = 0;
+ for (p = 4; p != 0; p = p >> 1)
+ {
+ if ((vecpar2[f.VecOperation] & p) != 0) {
+ *c = ',';
+ c++;
+ c = c + disassemble_source(f.src[b], f, c);
+ }
+ b++;
+ }
+ *c = 0;
+ return 1;
+ }
+ if (o[2] != 0)
+ {
+ o[2] = 0;
+ c = line;
+ strcpy(c, scaops[f.ScaOperation]);
+ c = c + strlen(c);
+ *c = ' ';
+ c++;
+ c = c + disassemble_output(f, c);
+ c = c + disassemble_mask(f.OutputWriteMask, c);
+ b = 0;
+ for (p = 4; p != 0; p = p >> 1)
+ {
+ if ((scapar2[f.ScaOperation] & p) != 0) {
+ *c = ',';
+ c++;
+ c = c + disassemble_source(f.src[b], f, c);
+ }
+ b++;
+ }
+ *c = 0;
+ return 1;
+ }
+ if (o[3] != 0)
+ {
+ if (f.VecOperation > 0)
+ b = 1;
+ else
+ b = f.VecTempIndex;
+ o[3] = 0;
+ c = line;
+ strcpy(c, scaops[f.ScaOperation]);
+ c = c + strlen(c);
+ strcpy(c, " r");
+ c = c + 2;
+ c = c + sprintf(c, "%d", b);
+ c = c + disassemble_mask(f.ScaTempWriteMask, c);
+ b = 0;
+ for (p = 4; p != 0; p = p >> 1)
+ {
+ if ((scapar2[f.ScaOperation] & p) != 0) {
+ *c = ',';
+ c++;
+ c = c + disassemble_source(f.src[b], f, c);
+ }
+ b++;
+ }
+ *c = 0;
+ return 1;
+ }
+ if (o[4] != 0)
+ {
+ o[4] = 0;
+ c = line;
+ c = c + sprintf(c, "MOV a0.x,");
+ c = c + disassemble_source(f.src[0], f, c);
+ *c = 0;
+ return 1;
+ }
+ if (o[5] != 0)
+ {
+ o[5] = 0;
+ strcpy(line, "END");
+ return 1;
+ }
+ state = 0;
+ return 0;
+}
+
+vertex_program_simulator::vertex_program_simulator()
+{
+ for (int i = 0; i < 256; i++)
+ op[i].modified = 0;
+ initialize_constants();
+}
+
+void vertex_program_simulator::set_data(vertex_nv *in, vertex_nv *out)
+{
+ input = in;
+ output = out;
+}
+
+void vertex_program_simulator::reset()
+{
+ ip = 0;
+ a0x = 0;
+ initialize_outputs();
+ initialize_temps();
+}
+
+void vertex_program_simulator::decode_instruction(int address)
+{
+ instruction *i;
+
+ i = &op[address];
+ i->d.SignA = i->i[1] & (1 << 8);
+ i->d.ParameterTypeA = (i->i[2] >> 26) & 3;
+ i->d.TempIndexA = (i->i[2] >> 28) & 15;
+ i->d.SwizzleA[0] = (i->i[1] >> 6) & 3;
+ i->d.SwizzleA[1] = (i->i[1] >> 4) & 3;
+ i->d.SwizzleA[2] = (i->i[1] >> 2) & 3;
+ i->d.SwizzleA[3] = (i->i[1] >> 0) & 3;
+ i->d.SignB = i->i[2] & (1 << 25);
+ i->d.ParameterTypeB = (i->i[2] >> 11) & 3;
+ i->d.TempIndexB = (i->i[2] >> 13) & 15;
+ i->d.SwizzleB[0] = (i->i[2] >> 23) & 3;
+ i->d.SwizzleB[1] = (i->i[2] >> 21) & 3;
+ i->d.SwizzleB[2] = (i->i[2] >> 19) & 3;
+ i->d.SwizzleB[3] = (i->i[2] >> 17) & 3;
+ i->d.SignC = i->i[2] & (1 << 10);
+ i->d.ParameterTypeC = (i->i[3] >> 28) & 3;
+ i->d.TempIndexC = ((i->i[2] & 3) << 2) + (i->i[3] >> 30);
+ i->d.SwizzleC[0] = (i->i[2] >> 8) & 3;
+ i->d.SwizzleC[1] = (i->i[2] >> 6) & 3;
+ i->d.SwizzleC[2] = (i->i[2] >> 4) & 3;
+ i->d.SwizzleC[3] = (i->i[2] >> 2) & 3;
+ i->d.VecOperation = (i->i[1] >> 21) & 15;
+ i->d.ScaOperation = (i->i[1] >> 25) & 15;
+ i->d.OutputWriteMask = ((i->i[3] >> 12) & 15);
+ i->d.MultiplexerControl = i->i[3] & 4; // 0 : output Rn from vectorial operation 4 : output Rn from scalar operation
+ i->d.VecTempIndex = (i->i[3] >> 20) & 15;
+ i->d.OutputIndex = (i->i[3] >> 3) & 255;
+ i->d.OutputSelect = i->i[3] & 0x800;
+ i->d.VecTempWriteMask = (i->i[3] >> 24) & 15;
+ i->d.ScaTempWriteMask = (i->i[3] >> 16) & 15;
+ i->d.InputIndex = (i->i[1] >> 9) & 15;
+ i->d.SourceConstantIndex = (i->i[1] >> 13) & 255;
+ i->d.Usea0x = i->i[3] & 2;
+ i->d.EndOfProgram = i->i[3] & 1;
+}
+
+int vertex_program_simulator::step()
+{
+ int p1, p2;
+ float tmp[3 * 4];
+ float tmpv[4];
+ float tmps[4];
+ instruction::decoded *d;
+
+#if 0 // useful while debugging to see what instrucion is being executed
+ static int debugvpi = 0;
+ char disbuffer[256];
+ if (debugvpi) {
+ char *pp;
+ vertex_program_disassembler vdis;
+
+ pp = disbuffer;
+ while (vdis.disassemble(op[ip].i, pp) != 0) {
+ pp = pp + strlen(pp);
+ *pp = '\n';
+ pp++;
+ *pp = 0;
+ }
+ }
+#endif
+
+ if (op[ip].modified)
+ decode_instruction(ip);
+ d = &(op[ip].d);
+ // prepare inputs
+ // input A
+ generate_input(&tmp[0], d->SignA, d->ParameterTypeA, d->TempIndexA, d->SwizzleA);
+ // input B
+ generate_input(&tmp[4], d->SignB, d->ParameterTypeB, d->TempIndexB, d->SwizzleB);
+ // input C
+ generate_input(&tmp[8], d->SignC, d->ParameterTypeC, d->TempIndexC, d->SwizzleC);
+ // compute 2 instructions
+ // vectorial
+ compute_vectorial_operation(tmpv, d->VecOperation, tmp);
+ // scalar
+ compute_scalar_operation(tmps, d->ScaOperation, tmp);
+ // assign destinations
+ if (d->VecOperation > 0) {
+ if (d->VecOperation == 13)
+ //o[4] = 1;
+ a0x = (int)tmpv[0];
+ else {
+ if (d->VecTempWriteMask != 0) { // assign to Rn
+ //o[0] = 1;
+ int wm = d->VecTempWriteMask;
+ for (p1 = 0; p1 < 4; p1++) {
+ if (wm & 8)
+ r_temp[d->VecTempIndex].fv[p1] = tmpv[p1];
+ wm = wm << 1;
+ }
+ }
+ if ((d->OutputWriteMask != 0) && (d->MultiplexerControl == 0)) {
+ //o[1] = 1;
+ if (d->OutputSelect) { // assign to output
+ int wm = d->OutputWriteMask;
+ for (p1 = 0; p1 < 4; p1++) {
+ if (wm & 8)
+ output->attribute[d->OutputIndex].fv[p1] = tmpv[p1];
+ wm = wm << 1;
+ }
+ // remeber, output position == r12
+ if (d->OutputIndex == 0)
+ for (p1 = 0; p1 < 4; p1++) {
+ r_temp[12].fv[p1] = output->attribute[d->OutputIndex].fv[p1];
+ }
+ }
+ else { // assign to constant
+ int wm = d->OutputWriteMask;
+ for (p1 = 0; p1 < 4; p1++) {
+ if (wm & 8)
+ c_constant[d->OutputIndex].fv[p1] = tmpv[p1];
+ wm = wm << 1;
+ }
+ }
+ }
+ }
+ }
+ if (d->ScaOperation > 0) {
+ if (d->ScaTempWriteMask != 0) { // assign to Rn
+ //o[3] = 1;
+ if (d->VecOperation > 0)
+ p2 = 1;
+ else
+ p2 = d->VecTempIndex;
+ int wm = d->ScaTempWriteMask;
+ for (p1 = 0; p1 < 4; p1++) {
+ if (wm & 8)
+ r_temp[p2].fv[p1] = tmps[p1];
+ wm = wm << 1;
+ }
+ }
+ if ((d->OutputWriteMask != 0) && (d->MultiplexerControl != 0)) { // assign to output
+ //o[2] = 1;
+ int wm = d->OutputWriteMask;
+ for (p1 = 0; p1 < 4; p1++) {
+ if (wm & 8)
+ output->attribute[d->OutputIndex].fv[p1] = tmps[p1];
+ wm = wm << 1;
+ }
+ // remeber, output position == r12
+ if (d->OutputIndex == 0) {
+ for (p1 = 0; p1 < 4; p1++) {
+ r_temp[12].fv[p1] = output->attribute[d->OutputIndex].fv[p1];
+ }
+ }
+ }
+ }
+ return d->EndOfProgram;
+}
+
+void vertex_program_simulator::execute()
+{
+ int c;
+
+ c = 0;
+ do {
+ c = step();
+ ip++;
+ } while (c == 0);
+}
+
+void vertex_program_simulator::jump(int address)
+{
+ ip = address;
+}
+
+void vertex_program_simulator::process(int address, vertex_nv *in, vertex_nv *out, int count)
+{
+#if 0 // useful while debugging to see what is being executed
+ static int debugvps = 0;
+ if (debugvps) {
+ char *pp;
+ vertex_program_disassembler vdis;
+ char disbuffer[128];
+
+ jump(address);
+ debugvps--;
+ for (int t = 0; t < 128; t++) {
+ pp = disbuffer;
+ while (vdis.disassemble(op[ip + t].i, pp) != 0) {
+ pp = pp + strlen(pp);
+ *pp = '\n';
+ pp++;
+ *pp = 0;
+ }
+ printf("%08X %08X %08X %s", op[ip + t].i[1], op[ip + t].i[2], op[ip + t].i[3], disbuffer);
+ if (op[ip + t].i[3] & 1)
+ break;
+ }
+ }
+#endif
+ set_data(in, out);
+ while (count > 0) {
+ reset();
+ jump(address);
+ execute();
+ input++;
+ output++;
+ count--;
+ }
+}
+
+int vertex_program_simulator::status()
+{
+ return ip;
+}
+
+void vertex_program_simulator::initialize_outputs()
+{
+ for (int n = 0; n < 16; n++) {
+ output->attribute[n].fv[0] = output->attribute[n].fv[1] = output->attribute[n].fv[2] = 0;
+ output->attribute[n].fv[3] = 1;
+ }
+}
+
+void vertex_program_simulator::initialize_temps()
+{
+ for (int n = 0; n < 32; n++) {
+ for (int m = 0; m < 4; m++)
+ r_temp[n].fv[m] = 0;
+ }
+}
+
+void vertex_program_simulator::initialize_constants()
+{
+ for (int n = 0; n < 192; n++) {
+ for (int m = 0; m < 4;m++)
+ c_constant[n].fv[m] = 0;
+ }
+}
+
+void vertex_program_simulator::generate_input(float t[4], int sign, int type, int temp, int swizzle[4])
+{
+ float sgn = 1;
+
+ if (sign)
+ sgn = -1;
+ if (type == 1) {
+ t[0] = sgn*r_temp[temp].fv[swizzle[0]];
+ t[1] = sgn*r_temp[temp].fv[swizzle[1]];
+ t[2] = sgn*r_temp[temp].fv[swizzle[2]];
+ t[3] = sgn*r_temp[temp].fv[swizzle[3]];
+ }
+ else if (type == 2) {
+ int InputIndex = op[ip].d.InputIndex;
+ t[0] = sgn*input->attribute[InputIndex].fv[swizzle[0]];
+ t[1] = sgn*input->attribute[InputIndex].fv[swizzle[1]];
+ t[2] = sgn*input->attribute[InputIndex].fv[swizzle[2]];
+ t[3] = sgn*input->attribute[InputIndex].fv[swizzle[3]];
+ }
+ else if (type == 3) {
+ int SourceConstantIndex = op[ip].d.SourceConstantIndex;
+ if (op[ip].d.Usea0x)
+ SourceConstantIndex = SourceConstantIndex + a0x;
+ t[0] = sgn*c_constant[SourceConstantIndex].fv[swizzle[0]];
+ t[1] = sgn*c_constant[SourceConstantIndex].fv[swizzle[1]];
+ t[2] = sgn*c_constant[SourceConstantIndex].fv[swizzle[2]];
+ t[3] = sgn*c_constant[SourceConstantIndex].fv[swizzle[3]];
+ }
+}
+
+void vertex_program_simulator::compute_vectorial_operation(float t_out[4], int instruction, float par_in[3 * 4])
+{
+ const int p1_A = 0;
+ const int p2_B = 4;
+ const int p3_C = 8;
+
+ // t_out <= instruction(par_in)
+ switch (instruction) {
+ case 0: // "NOP"
+ break;
+ case 1: // "MOV"
+ t_out[0] = par_in[p1_A + 0];
+ t_out[1] = par_in[p1_A + 1];
+ t_out[2] = par_in[p1_A + 2];
+ t_out[3] = par_in[p1_A + 3];
+ break;
+ case 2: // "MUL"
+ t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0];
+ t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1];
+ t_out[2] = par_in[p1_A + 2] * par_in[p2_B + 2];
+ t_out[3] = par_in[p1_A + 3] * par_in[p2_B + 3];
+ break;
+ case 3: // "ADD"
+ t_out[0] = par_in[p1_A + 0] + par_in[p3_C + 0];
+ t_out[1] = par_in[p1_A + 1] + par_in[p3_C + 1];
+ t_out[2] = par_in[p1_A + 2] + par_in[p3_C + 2];
+ t_out[3] = par_in[p1_A + 3] + par_in[p3_C + 3];
+ break;
+ case 4: // "MAD"
+ t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p3_C + 0];
+ t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p3_C + 1];
+ t_out[2] = par_in[p1_A + 2] * par_in[p2_B + 2] + par_in[p3_C + 2];
+ t_out[3] = par_in[p1_A + 3] * par_in[p2_B + 3] + par_in[p3_C + 3];
+ break;
+ case 5: // "DP3"
+ t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p1_A + 2] * par_in[p2_B + 2];
+ t_out[1] = t_out[2] = t_out[3] = t_out[0];
+ break;
+ case 6: // "DPH"
+ t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p1_A + 2] * par_in[p2_B + 2] + par_in[p2_B + 3];
+ t_out[1] = t_out[2] = t_out[3] = t_out[0];
+ break;
+ case 7: // "DP4"
+ t_out[0] = par_in[p1_A + 0] * par_in[p2_B + 0] + par_in[p1_A + 1] * par_in[p2_B + 1] + par_in[p1_A + 2] * par_in[p2_B + 2] + par_in[p1_A + 3] * par_in[p2_B + 3];
+ t_out[1] = t_out[2] = t_out[3] = t_out[0];
+ break;
+ case 8: // "DST"
+ t_out[0] = 1.0;
+ t_out[1] = par_in[p1_A + 1] * par_in[p2_B + 1];
+ t_out[2] = par_in[p1_A + 2];
+ t_out[3] = par_in[p2_B + 3];
+ break;
+ case 9: // "MIN"
+ t_out[0] = fmin(par_in[p1_A + 0], par_in[p2_B + 0]);
+ t_out[1] = fmin(par_in[p1_A + 1], par_in[p2_B + 1]);
+ t_out[2] = fmin(par_in[p1_A + 2], par_in[p2_B + 2]);
+ t_out[3] = fmin(par_in[p1_A + 3], par_in[p2_B + 3]);
+ break;
+ case 10: // "MAX"
+ t_out[0] = fmax(par_in[p1_A + 0], par_in[p2_B + 0]);
+ t_out[1] = fmax(par_in[p1_A + 1], par_in[p2_B + 1]);
+ t_out[2] = fmax(par_in[p1_A + 2], par_in[p2_B + 2]);
+ t_out[3] = fmax(par_in[p1_A + 3], par_in[p2_B + 3]);
+ break;
+ case 11: // "SLT"
+ t_out[0] = (par_in[p1_A + 0] < par_in[p2_B + 0]) ? 1.0 : 0;
+ t_out[1] = (par_in[p1_A + 1] < par_in[p2_B + 1]) ? 1.0 : 0;
+ t_out[2] = (par_in[p1_A + 2] < par_in[p2_B + 2]) ? 1.0 : 0;
+ t_out[3] = (par_in[p1_A + 3] < par_in[p2_B + 3]) ? 1.0 : 0;
+ break;
+ case 12: // "SGE"
+ t_out[0] = (par_in[p1_A + 0] >= par_in[p2_B + 0]) ? 1.0 : 0;
+ t_out[1] = (par_in[p1_A + 1] >= par_in[p2_B + 1]) ? 1.0 : 0;
+ t_out[2] = (par_in[p1_A + 2] >= par_in[p2_B + 2]) ? 1.0 : 0;
+ t_out[3] = (par_in[p1_A + 3] >= par_in[p2_B + 3]) ? 1.0 : 0;
+ break;
+ case 13: // "ARL"
+ t_out[0] = par_in[p1_A + 0];
+ }
+}
+
+void vertex_program_simulator::compute_scalar_operation(float t_out[4], int instruction, float par_in[3 * 4])
+{
+ //const int p1_A = 0;
+ //const int p2_B = 4;
+ const int p3_C = 8;
+ union {
+ float f;
+ unsigned int i;
+ } t;
+ int e;
+
+ // t_out <= instruction(par_in)
+ switch (instruction) {
+ case 0: // "NOP"
+ break;
+ case 1: // "IMV"
+ t_out[0] = par_in[p3_C + 0];
+ t_out[1] = par_in[p3_C + 1];
+ t_out[2] = par_in[p3_C + 2];
+ t_out[3] = par_in[p3_C + 3];
+ break;
+ case 2: // "RCP"
+ t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / par_in[p3_C + 0];
+ break;
+ case 3: // "RCC"
+ t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / par_in[p3_C + 0]; // ?
+ break;
+ case 4: // "RSQ"
+ t_out[0] = t_out[1] = t_out[2] = t_out[3] = 1.0 / sqrt(abs(par_in[p3_C + 0]));
+ break;
+ case 5: // "EXP"
+ t_out[0] = pow(2, floor(par_in[p3_C + 0]));
+ t_out[1] = par_in[p3_C + 0] - floor(par_in[p3_C + 0]);
+ t.f = pow(2, par_in[p3_C + 0]);
+ t.i = t.i & 0xffffff00;
+ t_out[2] = t.f;
+ t_out[3] = 1.0;
+ break;
+ case 6: // "LOG"
+ t_out[1] = frexp(par_in[p3_C + 0], &e)*2.0; // frexp gives mantissa as 0.5....1
+ t_out[0] = e - 1;
+ t.f = log2(abs(par_in[p3_C + 0]));
+ t.i = t.i & 0xffffff00;
+ t_out[2] = t.f;
+ t_out[3] = 1.0;
+ break;
+ case 7: // "LIT"
+ t_out[0] = 1.0;
+ t_out[1] = fmax(0, fmin(par_in[p3_C + 0], 1.0f));
+ t_out[2] = par_in[p3_C + 0] > 0 ? pow(fmax(par_in[p3_C + 1], 0), par_in[p3_C + 3]) : 0;
+ t_out[3] = 1.0;
+ break;
+ }
+}
+
+/*
+ * Graphics
+ */
+
+UINT32 nv2a_renderer::dilate0(UINT32 value, int bits) // dilate first "bits" bits in "value"
+{
+ UINT32 x, m1, m2, m3;
+ int a;
+
+ x = value;
+ for (a = 0; a < bits; a++)
+ {
+ m2 = 1 << (a << 1);
+ m1 = m2 - 1;
+ m3 = (~m1) << 1;
+ x = (x & m1) + (x & m2) + ((x & m3) << 1);
+ }
+ return x;
+}
+
+UINT32 nv2a_renderer::dilate1(UINT32 value, int bits) // dilate first "bits" bits in "value"
+{
+ UINT32 x, m1, m2, m3;
+ int a;
+
+ x = value;
+ for (a = 0; a < bits; a++)
+ {
+ m2 = 1 << (a << 1);
+ m1 = m2 - 1;
+ m3 = (~m1) << 1;
+ x = (x & m1) + ((x & m2) << 1) + ((x & m3) << 1);
+ }
+ return x;
+}
+
+void nv2a_renderer::computedilated(void)
+{
+ int a, b;
+
+ for (b = 0; b < 16; b++)
+ for (a = 0; a < 2048; a++) {
+ dilated0[b][a] = dilate0(a, b);
+ dilated1[b][a] = dilate1(a, b);
+ }
+ for (b = 0; b < 16; b++)
+ for (a = 0; a < 16; a++)
+ dilatechose[(b << 4) + a] = (a < b ? a : b);
+}
+
+int nv2a_renderer::geforce_commandkind(UINT32 word)
+{
+ if ((word & 0x00000003) == 0x00000002)
+ return 7; // call
+ if ((word & 0x00000003) == 0x00000001)
+ return 6; // jump
+ if ((word & 0xE0030003) == 0x40000000)
+ return 5; // non increasing
+ if ((word & 0xE0000003) == 0x20000000)
+ return 4; // old jump
+ if ((word & 0xFFFF0003) == 0x00030000)
+ return 3; // long non icreasing
+ if ((word & 0xFFFFFFFF) == 0x00020000)
+ return 2; // return
+ if ((word & 0xFFFF0003) == 0x00010000)
+ return 1; // sli conditional
+ if ((word & 0xE0030003) == 0x00000000)
+ return 0; // increasing
+ return -1;
+}
+
+UINT32 nv2a_renderer::geforce_object_offset(UINT32 handle)
+{
+ UINT32 h = ((((handle >> 11) ^ handle) >> 11) ^ handle) & 0x7ff;
+ UINT32 o = (pfifo[0x210 / 4] & 0x1f) << 8; // or 12 ?
+ UINT32 e = o + h * 8; // at 0xfd000000+0x00700000
+ UINT32 w;
+
+ if (ramin[e / 4] != handle)
+ e = 0;
+ w = ramin[e / 4 + 1];
+ return (w & 0xffff) * 0x10;
+}
+
+void nv2a_renderer::geforce_read_dma_object(UINT32 handle, UINT32 &offset, UINT32 &size)
+{
+ //UINT32 objclass,pt_present,pt_linear,access,target,rorw;
+ UINT32 dma_adjust, dma_frame;
+ UINT32 o = geforce_object_offset(handle);
+
+ o = o / 4;
+ //objclass=ramin[o] & 0xfff;
+ //pt_present=(ramin[o] >> 12) & 1;
+ //pt_linear=(ramin[o] >> 13) & 1;
+ //access=(ramin[o] >> 14) & 3;
+ //target=(ramin[o] >> 16) & 3;
+ dma_adjust = (ramin[o] >> 20) & 0xfff;
+ size = ramin[o + 1];
+ //rorw=ramin[o+2] & 1;
+ dma_frame = ramin[o + 2] & 0xfffff000;
+ offset = dma_frame + dma_adjust;
+}
+
+/*void myline(bitmap_rgb32 &bmp,float x1,float y1,float x2,float y2)
+{
+int xx1,yy1,xx2,yy2;
+
+ xx1=x1;
+ xx2=x2;
+ yy1=y1;
+ yy2=y2;
+ if (xx1 == xx2) {
+ if (yy1 > yy2) {
+ int t=yy1;
+ yy1=yy2;
+ yy2=t;
+ }
+ for (int y=yy1;y <= yy2;y++)
+ *((UINT32 *)bmp.raw_pixptr(y,xx1))= -1;
+ } else if (yy1 == yy2) {
+ if (xx1 > xx2) {
+ int t=xx1;
+ xx1=xx2;
+ xx2=t;
+ }
+ for (int x=xx1;x <= xx2;x++)
+ *((UINT32 *)bmp.raw_pixptr(yy1,x))= -1;
+ }
+}*/
+
+inline UINT32 convert_a4r4g4b4_a8r8g8b8(UINT32 a4r4g4b4)
+{
+ UINT32 a8r8g8b8;
+ int ca, cr, cg, cb;
+
+ cb = pal4bit(a4r4g4b4 & 0x000f);
+ cg = pal4bit((a4r4g4b4 & 0x00f0) >> 4);
+ cr = pal4bit((a4r4g4b4 & 0x0f00) >> 8);
+ ca = pal4bit((a4r4g4b4 & 0xf000) >> 12);
+ a8r8g8b8 = (ca << 24) | (cr << 16) | (cg << 8) | (cb); // color converted to 8 bits per component
+ return a8r8g8b8;
+}
+
+inline UINT32 convert_a1r5g5b5_a8r8g8b8(UINT32 a1r5g5b5)
+{
+ UINT32 a8r8g8b8;
+ int ca, cr, cg, cb;
+
+ cb = pal5bit(a1r5g5b5 & 0x001f);
+ cg = pal5bit((a1r5g5b5 & 0x03e0) >> 5);
+ cr = pal5bit((a1r5g5b5 & 0x7c00) >> 10);
+ ca = a1r5g5b5 & 0x8000 ? 0xff : 0;
+ a8r8g8b8 = (ca << 24) | (cr << 16) | (cg << 8) | (cb); // color converted to 8 bits per component
+ return a8r8g8b8;
+}
+
+inline UINT32 convert_r5g6b5_r8g8b8(UINT32 r5g6b5)
+{
+ UINT32 r8g8b8;
+ int cr, cg, cb;
+
+ cb = pal5bit(r5g6b5 & 0x001f);
+ cg = pal6bit((r5g6b5 & 0x07e0) >> 5);
+ cr = pal5bit((r5g6b5 & 0xf800) >> 11);
+ r8g8b8 = (cr << 16) | (cg << 8) | (cb); // color converted to 8 bits per component
+ return r8g8b8;
+}
+
+UINT32 nv2a_renderer::texture_get_texel(int number, int x, int y)
+{
+ UINT32 to, s, c, sa, ca;
+ UINT32 a4r4g4b4, a1r5g5b5, r5g6b5;
+ int bx, by;
+ int color0, color1, color0m2, color1m2, alpha0, alpha1;
+ UINT32 codes;
+ UINT64 alphas;
+ int cr, cg, cb;
+
+ // force to [0,size-1]
+ x = (unsigned int)x & (texture[number].sizeu - 1);
+ y = (unsigned int)y & (texture[number].sizev - 1);
+ switch (texture[number].format) {
+ case A8R8G8B8:
+ to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
+ return *(((UINT32 *)texture[number].buffer) + to); // get texel color
+ case DXT1:
+ bx = x >> 2;
+ by = y >> 2;
+ x = x & 3;
+ y = y & 3;
+ to = bx + by*(texture[number].sizeu >> 2);
+ color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 0);
+ color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 1);
+ codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 1);
+ s = (y << 3) + (x << 1);
+ c = (codes >> s) & 3;
+ c = c + (color0 > color1 ? 0 : 4);
+ color0m2 = color0 << 1;
+ color1m2 = color1 << 1;
+ switch (c) {
+ case 0:
+ return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
+ case 1:
+ return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
+ case 2:
+ cb = pal5bit(((color0m2 & 0x003e) + (color1 & 0x001f)) / 3);
+ cg = pal6bit(((color0m2 & 0x0fc0) + (color1 & 0x07e0)) / 3 >> 5);
+ cr = pal5bit(((color0m2 & 0x1f000) + color1) / 3 >> 11);
+ return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
+ case 3:
+ cb = pal5bit(((color1m2 & 0x003e) + (color0 & 0x001f)) / 3);
+ cg = pal6bit(((color1m2 & 0x0fc0) + (color0 & 0x07e0)) / 3 >> 5);
+ cr = pal5bit(((color1m2 & 0x1f000) + color0) / 3 >> 11);
+ return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
+ case 4:
+ return 0xff000000 + convert_r5g6b5_r8g8b8(color0);
+ case 5:
+ return 0xff000000 + convert_r5g6b5_r8g8b8(color1);
+ case 6:
+ cb = pal5bit(((color0 & 0x001f) + (color1 & 0x001f)) / 2);
+ cg = pal6bit(((color0 & 0x07e0) + (color1 & 0x07e0)) / 2 >> 5);
+ cr = pal5bit(((color0 & 0xf800) + (color1 & 0xf800)) / 2 >> 11);
+ return 0xff000000 | (cr << 16) | (cg << 8) | (cb);
+ default:
+ return 0xff000000;
+ }
+ case DXT3:
+ bx = x >> 2;
+ by = y >> 2;
+ x = x & 3;
+ y = y & 3;
+ to = (bx + by*(texture[number].sizeu >> 2)) << 1;
+ color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
+ color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
+ codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
+ alphas = *(((UINT64 *)texture[number].buffer) + to);
+ s = (y << 3) + (x << 1);
+ sa = ((y << 2) + x) << 2;
+ c = (codes >> s) & 3;
+ ca = (alphas >> sa) & 15;
+ switch (c) {
+ case 0:
+ return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color0);
+ case 1:
+ return ((ca + (ca << 4)) << 24) + convert_r5g6b5_r8g8b8(color1);
+ case 2:
+ cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
+ cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
+ cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
+ return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
+ default:
+ cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
+ cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
+ cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
+ return ((ca + (ca << 4)) << 24) | (cr << 16) | (cg << 8) | (cb);
+ }
+ case A4R4G4B4:
+ to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
+ a4r4g4b4 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
+ return convert_a4r4g4b4_a8r8g8b8(a4r4g4b4);
+ case A1R5G5B5:
+ to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
+ a1r5g5b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
+ return convert_a1r5g5b5_a8r8g8b8(a1r5g5b5);
+ case R5G6B5:
+ to = dilated0[texture[number].dilate][x] + dilated1[texture[number].dilate][y]; // offset of texel in texture memory
+ r5g6b5 = *(((UINT16 *)texture[number].buffer) + to); // get texel color
+ return 0xff000000 + convert_r5g6b5_r8g8b8(r5g6b5);
+ case R8G8B8_RECT:
+ to = texture[number].rectangle_pitch*y + (x << 2);
+ return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
+ case A8R8G8B8_RECT:
+ to = texture[number].rectangle_pitch*y + (x << 2);
+ return *((UINT32 *)(((UINT8 *)texture[number].buffer) + to));
+ case DXT5:
+ bx = x >> 2;
+ by = y >> 2;
+ x = x & 3;
+ y = y & 3;
+ to = (bx + by*(texture[number].sizeu >> 2)) << 1;
+ color0 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 4);
+ color1 = *((UINT16 *)(((UINT64 *)texture[number].buffer) + to) + 5);
+ codes = *((UINT32 *)(((UINT64 *)texture[number].buffer) + to) + 3);
+ alpha0 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 0);
+ alpha1 = *((UINT8 *)(((UINT64 *)texture[number].buffer) + to) + 1);
+ alphas = *(((UINT64 *)texture[number].buffer) + to);
+ s = (y << 3) + (x << 1);
+ sa = ((y << 2) + x) * 3;
+ c = (codes >> s) & 3;
+ ca = (alphas >> sa) & 7;
+ ca = ca + (alpha0 > alpha1 ? 0 : 8);
+ switch (ca) {
+ case 0:
+ ca = alpha0;
+ break;
+ case 1:
+ ca = alpha1;
+ break;
+ case 2:
+ ca = (6 * alpha0 + 1 * alpha1) / 7;
+ break;
+ case 3:
+ ca = (5 * alpha0 + 2 * alpha1) / 7;
+ break;
+ case 4:
+ ca = (4 * alpha0 + 3 * alpha1) / 7;
+ break;
+ case 5:
+ ca = (3 * alpha0 + 4 * alpha1) / 7;
+ break;
+ case 6:
+ ca = (2 * alpha0 + 5 * alpha1) / 7;
+ break;
+ case 7:
+ ca = (1 * alpha0 + 6 * alpha1) / 7;
+ break;
+ case 8:
+ ca = alpha0;
+ break;
+ case 9:
+ ca = alpha1;
+ break;
+ case 10:
+ ca = (4 * alpha0 + 1 * alpha1) / 5;
+ break;
+ case 11:
+ ca = (3 * alpha0 + 2 * alpha1) / 5;
+ break;
+ case 12:
+ ca = (2 * alpha0 + 3 * alpha1) / 5;
+ break;
+ case 13:
+ ca = (1 * alpha0 + 4 * alpha1) / 5;
+ break;
+ case 14:
+ ca = 0;
+ break;
+ case 15:
+ ca = 255;
+ break;
+ }
+ switch (c) {
+ case 0:
+ return (ca << 24) + convert_r5g6b5_r8g8b8(color0);
+ case 1:
+ return (ca << 24) + convert_r5g6b5_r8g8b8(color1);
+ case 2:
+ cb = pal5bit((2 * (color0 & 0x001f) + (color1 & 0x001f)) / 3);
+ cg = pal6bit((2 * (color0 & 0x07e0) + (color1 & 0x07e0)) / 3 >> 5);
+ cr = pal5bit((2 * (color0 & 0xf800) + (color1 & 0xf800)) / 3 >> 11);
+ return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
+ default:
+ cb = pal5bit(((color0 & 0x001f) + 2 * (color1 & 0x001f)) / 3);
+ cg = pal6bit(((color0 & 0x07e0) + 2 * (color1 & 0x07e0)) / 3 >> 5);
+ cr = pal5bit(((color0 & 0xf800) + 2 * (color1 & 0xf800)) / 3 >> 11);
+ return (ca << 24) | (cr << 16) | (cg << 8) | (cb);
+ }
+ default:
+ return 0xff00ff00;
+ }
+}
+
+void nv2a_renderer::write_pixel(int x, int y, UINT32 color)
+{
+ void *addr;
+ UINT32 fbcolor;
+ UINT32 c[4], fb[4], s[4], d[4], cc[4];
+
+ addr = this->fb.raw_pixptr(y, x);
+ fbcolor = *((UINT32 *)addr);
+ c[3] = color >> 24;
+ c[2] = (color >> 16) & 255;
+ c[1] = (color >> 8) & 255;
+ c[0] = color & 255;
+ fb[3] = fbcolor >> 24;
+ fb[2] = (fbcolor >> 16) & 255;
+ fb[1] = (fbcolor >> 8) & 255;
+ fb[0] = fbcolor & 255;
+ cc[3] = blend_color >> 24;
+ cc[2] = (blend_color >> 16) & 255;
+ cc[1] = (blend_color >> 8) & 255;
+ cc[0] = blend_color & 255;
+ // ownership test and scissor test not done
+ // alpha test
+ if (alpha_test_enabled) {
+ switch (alpha_func) {
+ case nv2a_renderer::NEVER:
+ return;
+ case nv2a_renderer::ALWAYS:
+ default:
+ break;
+ case nv2a_renderer::LESS:
+ if (c[3] >= alpha_reference)
+ return;
+ break;
+ case nv2a_renderer::LEQUAL:
+ if (c[3] > alpha_reference)
+ return;
+ break;
+ case nv2a_renderer::EQUAL:
+ if (c[3] != alpha_reference)
+ return;
+ break;
+ case nv2a_renderer::GEQUAL:
+ if (c[3] < alpha_reference)
+ return;
+ break;
+ case nv2a_renderer::GREATER:
+ if (c[3] <= alpha_reference)
+ return;
+ break;
+ case nv2a_renderer::NOTEQUAL:
+ if (c[3] == alpha_reference)
+ return;
+ break;
+ }
+ }
+ // stencil test not done
+ // depth buffer test not done
+ // blending
+ if (blending_enabled) {
+ switch (blend_function_source) {
+ case nv2a_renderer::ZERO:
+ s[3] = s[2] = s[1] = s[0] = 0;
+ break;
+ case nv2a_renderer::ONE:
+ default:
+ s[3] = s[2] = s[1] = s[0] = 255;
+ break;
+ case nv2a_renderer::DST_COLOR:
+ s[3] = fb[3];
+ s[2] = fb[2];
+ s[1] = fb[1];
+ s[0] = fb[0];
+ break;
+ case nv2a_renderer::ONE_MINUS_DST_COLOR:
+ s[3] = fb[3] ^ 255;
+ s[2] = fb[2] ^ 255;
+ s[1] = fb[1] ^ 255;
+ s[0] = fb[0] ^ 255;
+ break;
+ case nv2a_renderer::SRC_ALPHA:
+ s[3] = s[2] = s[1] = s[0] = c[3];
+ break;
+ case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
+ s[3] = s[2] = s[1] = s[0] = c[3] ^ 255;
+ break;
+ case nv2a_renderer::DST_ALPHA:
+ s[3] = s[2] = s[1] = s[0] = fb[3];
+ break;
+ case nv2a_renderer::ONE_MINUS_DST_ALPHA:
+ s[3] = s[2] = s[1] = s[0] = fb[3] ^ 255;
+ break;
+ case nv2a_renderer::CONSTANT_COLOR:
+ s[3] = cc[3];
+ s[2] = cc[2];
+ s[1] = cc[1];
+ s[0] = cc[0];
+ break;
+ case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
+ s[3] = cc[3] ^ 255;
+ s[2] = cc[2] ^ 255;
+ s[1] = cc[1] ^ 255;
+ s[0] = cc[0] ^ 255;
+ break;
+ case nv2a_renderer::CONSTANT_ALPHA:
+ s[3] = s[2] = s[1] = s[0] = cc[3];
+ break;
+ case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
+ s[3] = s[2] = s[1] = s[0] = cc[3] ^ 255;
+ break;
+ case nv2a_renderer::SRC_ALPHA_SATURATE:
+ s[3] = 255;
+ if (c[3] < (fb[3] ^ 255))
+ s[2] = c[3];
+ else
+ s[2] = fb[3];
+ s[1] = s[0] = s[2];
+ break;
+ }
+ switch (blend_function_destination) {
+ case nv2a_renderer::ZERO:
+ default:
+ d[3] = d[2] = d[1] = d[0] = 0;
+ break;
+ case nv2a_renderer::ONE:
+ d[3] = d[2] = d[1] = d[0] = 255;
+ break;
+ case nv2a_renderer::SRC_COLOR:
+ d[3] = c[3];
+ d[2] = c[2];
+ d[1] = c[1];
+ d[0] = c[0];
+ break;
+ case nv2a_renderer::ONE_MINUS_SRC_COLOR:
+ d[3] = c[3] ^ 255;
+ d[2] = c[2] ^ 255;
+ d[1] = c[1] ^ 255;
+ d[0] = c[0] ^ 255;
+ break;
+ case nv2a_renderer::SRC_ALPHA:
+ d[3] = d[2] = d[1] = d[0] = c[3];
+ break;
+ case nv2a_renderer::ONE_MINUS_SRC_ALPHA:
+ d[3] = d[2] = d[1] = d[0] = c[3] ^ 255;
+ break;
+ case nv2a_renderer::DST_ALPHA:
+ d[3] = d[2] = d[1] = d[0] = fb[3];
+ break;
+ case nv2a_renderer::ONE_MINUS_DST_ALPHA:
+ d[3] = d[2] = d[1] = d[0] = fb[3] ^ 255;
+ break;
+ case nv2a_renderer::CONSTANT_COLOR:
+ d[3] = cc[3];
+ d[2] = cc[2];
+ d[1] = cc[1];
+ d[0] = cc[0];
+ break;
+ case nv2a_renderer::ONE_MINUS_CONSTANT_COLOR:
+ d[3] = cc[3] ^ 255;
+ d[2] = cc[2] ^ 255;
+ d[1] = cc[1] ^ 255;
+ d[0] = cc[0] ^ 255;
+ break;
+ case nv2a_renderer::CONSTANT_ALPHA:
+ d[3] = d[2] = d[1] = d[0] = cc[3];
+ break;
+ case nv2a_renderer::ONE_MINUS_CONSTANT_ALPHA:
+ d[3] = d[2] = d[1] = d[0] = cc[3] ^ 255;
+ break;
+ }
+ switch (blend_equation) {
+ case nv2a_renderer::FUNC_ADD:
+ c[3] = (c[3] * s[3] + fb[3] * d[3]) / 255;
+ if (c[3] > 255)
+ c[3] = 255;
+ c[2] = (c[2] * s[2] + fb[2] * d[2]) / 255;
+ if (c[2] > 255)
+ c[2] = 255;
+ c[1] = (c[1] * s[1] + fb[1] * d[1]) / 255;
+ if (c[1] > 255)
+ c[1] = 255;
+ c[0] = (c[0] * s[0] + fb[0] * d[0]) / 255;
+ if (c[0] > 255)
+ c[0] = 255;
+ break;
+ case nv2a_renderer::FUNC_SUBTRACT:
+ c[3] = (c[3] * s[3] - fb[3] * d[3]) / 255;
+ if (c[3] < 0)
+ c[3] = 255;
+ c[2] = (c[2] * s[2] - fb[2] * d[2]) / 255;
+ if (c[2] < 0)
+ c[2] = 255;
+ c[1] = (c[1] * s[1] - fb[1] * d[1]) / 255;
+ if (c[1] < 0)
+ c[1] = 255;
+ c[0] = (c[0] * s[0] - fb[0] * d[0]) / 255;
+ if (c[0] < 0)
+ c[0] = 255;
+ break;
+ case nv2a_renderer::FUNC_REVERSE_SUBTRACT:
+ c[3] = (fb[3] * d[3] - c[3] * s[3]) / 255;
+ if (c[3] < 0)
+ c[3] = 255;
+ c[2] = (fb[2] * d[2] - c[2] * s[2]) / 255;
+ if (c[2] < 0)
+ c[2] = 255;
+ c[1] = (fb[1] * d[1] - c[1] * s[1]) / 255;
+ if (c[1] < 0)
+ c[1] = 255;
+ c[0] = (fb[0] * d[0] - c[0] * s[0]) / 255;
+ if (c[0] < 0)
+ c[0] = 255;
+ break;
+ case nv2a_renderer::MIN:
+ c[3] = s[3];
+ if (d[3] < c[3])
+ c[3] = d[3];
+ c[2] = s[2];
+ if (d[2] < c[2])
+ c[2] = d[2];
+ c[1] = s[1];
+ if (d[1] < c[1])
+ c[1] = d[1];
+ c[0] = s[0];
+ if (d[0] < c[0])
+ c[0] = d[0];
+ break;
+ case nv2a_renderer::MAX:
+ c[3] = s[3];
+ if (d[3] > c[3])
+ c[3] = d[3];
+ c[2] = s[2];
+ if (d[2] > c[2])
+ c[2] = d[2];
+ c[1] = s[1];
+ if (d[1] > c[1])
+ c[1] = d[1];
+ c[0] = s[0];
+ if (d[0] > c[0])
+ c[0] = d[0];
+ break;
+ }
+ }
+ // dithering not done
+ // logical operation
+ if (logical_operation_enabled) {
+ switch (logical_operation) {
+ case nv2a_renderer::CLEAR:
+ c[3] = 0;
+ c[2] = 0;
+ c[1] = 0;
+ c[0] = 0;
+ break;
+ case nv2a_renderer::AND:
+ c[3] = c[3] & fb[3];
+ c[2] = c[2] & fb[2];
+ c[1] = c[1] & fb[1];
+ c[0] = c[0] & fb[0];
+ break;
+ case nv2a_renderer::AND_REVERSE:
+ c[3] = c[3] & (fb[3] ^ 255);
+ c[2] = c[2] & (fb[2] ^ 255);
+ c[1] = c[1] & (fb[1] ^ 255);
+ c[0] = c[0] & (fb[0] ^ 255);
+ break;
+ case nv2a_renderer::COPY:
+ default:
+ break;
+ case nv2a_renderer::AND_INVERTED:
+ c[3] = (c[3] ^ 255) & fb[3];
+ c[2] = (c[2] ^ 255) & fb[2];
+ c[1] = (c[1] ^ 255) & fb[1];
+ c[0] = (c[0] ^ 255) & fb[0];
+ break;
+ case nv2a_renderer::NOOP:
+ c[3] = fb[3];
+ c[2] = fb[2];
+ c[1] = fb[1];
+ c[0] = fb[0];
+ break;
+ case nv2a_renderer::XOR:
+ c[3] = c[3] ^ fb[3];
+ c[2] = c[2] ^ fb[2];
+ c[1] = c[1] ^ fb[1];
+ c[0] = c[0] ^ fb[0];
+ break;
+ case nv2a_renderer::OR:
+ c[3] = c[3] | fb[3];
+ c[2] = c[2] | fb[2];
+ c[1] = c[1] | fb[1];
+ c[0] = c[0] | fb[0];
+ break;
+ case nv2a_renderer::NOR:
+ c[3] = (c[3] | fb[3]) ^ 255;
+ c[2] = (c[2] | fb[2]) ^ 255;
+ c[1] = (c[1] | fb[1]) ^ 255;
+ c[0] = (c[0] | fb[0]) ^ 255;
+ break;
+ case nv2a_renderer::EQUIV:
+ c[3] = (c[3] ^ fb[3]) ^ 255;
+ c[2] = (c[2] ^ fb[2]) ^ 255;
+ c[1] = (c[1] ^ fb[1]) ^ 255;
+ c[0] = (c[0] ^ fb[0]) ^ 255;
+ break;
+ case nv2a_renderer::INVERT:
+ c[3] = fb[3] ^ 255;
+ c[2] = fb[2] ^ 255;
+ c[1] = fb[1] ^ 255;
+ c[0] = fb[0] ^ 255;
+ break;
+ case nv2a_renderer::OR_REVERSE:
+ c[3] = c[3] | (fb[3] ^ 255);
+ c[2] = c[2] | (fb[2] ^ 255);
+ c[1] = c[1] | (fb[1] ^ 255);
+ c[0] = c[0] | (fb[0] ^ 255);
+ break;
+ case nv2a_renderer::COPY_INVERTED:
+ c[3] = c[3] ^ 255;
+ c[2] = c[2] ^ 255;
+ c[1] = c[1] ^ 255;
+ c[0] = c[0] ^ 255;
+ break;
+ case nv2a_renderer::OR_INVERTED:
+ c[3] = (c[3] ^ 255) | fb[3];
+ c[2] = (c[2] ^ 255) | fb[2];
+ c[1] = (c[1] ^ 255) | fb[1];
+ c[0] = (c[0] ^ 255) | fb[0];
+ break;
+ case nv2a_renderer::NAND:
+ c[3] = (c[3] & fb[3]) ^ 255;
+ c[2] = (c[2] & fb[2]) ^ 255;
+ c[1] = (c[1] & fb[1]) ^ 255;
+ c[0] = (c[0] & fb[0]) ^ 255;
+ break;
+ case nv2a_renderer::SET:
+ c[3] = 255;
+ c[2] = 255;
+ c[1] = 255;
+ c[0] = 255;
+ break;
+ }
+ }
+ fbcolor = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0];
+ *((UINT32 *)addr) = fbcolor;
+}
+
+void nv2a_renderer::render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
+{
+ int x;
+
+ if ((extent.startx < 0) || (extent.stopx > 640))
+ return;
+ x = extent.stopx - extent.startx - 1; // number of pixels to draw
+ while (x >= 0) {
+ UINT32 a8r8g8b8;
+ int ca, cr, cg, cb;
+ int xp = extent.startx + x; // x coordinate of current pixel
+
+ cb = ((extent.param[0].start + (float)x*extent.param[0].dpdx))*255.0;
+ cg = ((extent.param[1].start + (float)x*extent.param[1].dpdx))*255.0;
+ cr = ((extent.param[2].start + (float)x*extent.param[2].dpdx))*255.0;
+ ca = ((extent.param[3].start + (float)x*extent.param[3].dpdx))*255.0;
+ a8r8g8b8 = (ca << 24) + (cr << 16) + (cg << 8) + cb; // pixel color obtained by interpolating the colors of the vertices
+ write_pixel(xp, scanline, a8r8g8b8);
+ x--;
+ }
+}
+
+void nv2a_renderer::render_texture_simple(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
+{
+ int x;
+ UINT32 a8r8g8b8;
+
+ if (!objectdata.data->texture[0].enabled) {
+ return;
+ }
+ if ((extent.startx < 0) || (extent.stopx > 640))
+ return;
+ x = extent.stopx - extent.startx - 1;
+ while (x >= 0) {
+ int up, vp;
+ int xp = extent.startx + x; // x coordinate of current pixel
+
+ up = (extent.param[4].start + (float)x*extent.param[4].dpdx)*(float)(objectdata.data->texture[0].sizeu - 1); // x coordinate of texel in texture
+ vp = extent.param[5].start*(float)(objectdata.data->texture[0].sizev - 1); // y coordinate of texel in texture
+ a8r8g8b8 = texture_get_texel(0, up, vp);
+ write_pixel(xp, scanline, a8r8g8b8);
+ x--;
+ }
+}
+
+void nv2a_renderer::render_register_combiners(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
+{
+ int x, xp;
+ int up, vp;
+ int ca, cr, cg, cb;
+ UINT32 color[6];
+ UINT32 a8r8g8b8;
+ int n;//,m,i,j,k;
+
+ color[0] = color[1] = color[2] = color[3] = color[4] = color[5] = 0;
+
+ if ((extent.startx < 0) || (extent.stopx > 640))
+ return;
+ osd_lock_acquire(combiner.lock); // needed since multithreading is not supported yet
+ x = extent.stopx - extent.startx - 1; // number of pixels to draw
+ while (x >= 0) {
+ xp = extent.startx + x;
+ // 1: fetch data
+ // 1.1: interpolated color from vertices
+ cb = ((extent.param[0].start + (float)x*extent.param[0].dpdx))*255.0;
+ cg = ((extent.param[1].start + (float)x*extent.param[1].dpdx))*255.0;
+ cr = ((extent.param[2].start + (float)x*extent.param[2].dpdx))*255.0;
+ ca = ((extent.param[3].start + (float)x*extent.param[3].dpdx))*255.0;
+ color[0] = (ca << 24) + (cr << 16) + (cg << 8) + cb; // pixel color obtained by interpolating the colors of the vertices
+ color[1] = 0; // lighting not yet
+ // 1.2: color for each of the 4 possible textures
+ for (n = 0; n < 4; n++) {
+ if (texture[n].enabled) {
+ up = (extent.param[4 + n * 2].start + (float)x*extent.param[4 + n * 2].dpdx)*(float)(objectdata.data->texture[n].sizeu - 1);
+ vp = extent.param[5 + n * 2].start*(float)(objectdata.data->texture[n].sizev - 1);
+ color[n + 2] = texture_get_texel(n, up, vp);
+ }
+ }
+ // 2: compute
+ // 2.1: initialize
+ combiner_initialize_registers(color);
+ // 2.2: general cmbiner stages
+ for (n = 0; n < combiner.stages; n++) {
+ // 2.2.1 initialize
+ combiner_initialize_stage(n);
+ // 2.2.2 map inputs
+ combiner_map_input(n);
+ // 2.2.3 compute possible outputs
+ combiner_compute_rgb_outputs(n);
+ combiner_compute_a_outputs(n);
+ // 2.2.4 map outputs to registers
+ combiner_map_output(n);
+ }
+ // 2.3: final cmbiner stage
+ combiner_initialize_final();
+ combiner_map_final_input();
+ combiner_final_output();
+ a8r8g8b8 = combiner_float_argb8(combiner.output);
+ // 3: write pixel
+ write_pixel(xp, scanline, a8r8g8b8);
+ x--;
+ }
+ osd_lock_release(combiner.lock);
+}
+
+#if 0
+const char *rc_mapping_str[] = {
+ "UNSIGNED_IDENTITY",
+ "UNSIGNED_INVERT",
+ "EXPAND_NORMAL",
+ "EXPAND_NEGATE",
+ "HALF_BIAS_NORMAL",
+ "HALF_BIAS_NEGATE",
+ "SIGNED_IDENTITY",
+ "SIGNED_NEGATE"
+};
+
+const char *rc_usage_rgb_str[] = {
+ "RGB",
+ "ALPHA"
+};
+
+const char *rc_usage_alpha_str[] = {
+ "BLUE",
+ "ALPHA"
+};
+
+const char *rc_variable_str[] = {
+ "ZERO",
+ "CONSTANT_COLOR0",
+ "CONSTANT_COLOR1",
+ "FOG",
+ "PRIMARY_COLOR",
+ "SECONDARY_COLOR",
+ "???",
+ "???",
+ "TEXTURE0",
+ "TEXTURE1",
+ "TEXTURE2",
+ "TEXTURE3",
+ "SPARE0",
+ "SPARE1",
+ "SPARE0_PLUS_SECONDARY_COLOR",
+ "E_TIMES_F"
+};
+
+const char *rc_bias_str[] = {
+ "NONE",
+ "BIAS_BY_NEGATIVE_ONE_HALF"
+};
+
+const char *rc_scale_str[] = {
+ "NONE",
+ "SCALE_BY_TWO",
+ "SCALE_BY_FOUR",
+ "SCALE_BY_ONE_HALF"
+};
+
+/* Dump the current setup of the register combiners */
+void dumpcombiners(UINT32 *m)
+{
+ int a, b, n, v;
+
+ n = m[0x1e60 / 4] & 0xf;
+ printf("Combiners active: %d\n\r", n);
+ for (a = 0; a < n; a++) {
+ printf("Combiner %d\n\r", a + 1);
+ printf(" RC_IN_ALPHA %08X\n\r", m[0x0260 / 4 + a]);
+ for (b = 24; b >= 0; b = b - 8) {
+ v = (m[0x0260 / 4 + a] >> b) & 0xf;
+ printf(" %c_INPUT %s\n\r", 'A' + 3 - b / 8, rc_variable_str[v]);
+ v = (m[0x0260 / 4 + a] >> (b + 4)) & 1;
+ printf(" %c_COMPONENT_USAGE %s\n\r", 'A' + 3 - b / 8, rc_usage_alpha_str[v]);
+ v = (m[0x0260 / 4 + a] >> (b + 5)) & 7;
+ printf(" %c_MAPPING %s\n\r", 'A' + 3 - b / 8, rc_mapping_str[v]);
+ }
+ printf(" RC_IN_RGB %08X\n\r", m[0x0ac0 / 4 + a]);
+ for (b = 24; b >= 0; b = b - 8) {
+ v = (m[0x0ac0 / 4 + a] >> b) & 0xf;
+ printf(" %c_INPUT %s\n\r", 'A' + 3 - b / 8, rc_variable_str[v]);
+ v = (m[0x0ac0 / 4 + a] >> (b + 4)) & 1;
+ printf(" %c_COMPONENT_USAGE %s\n\r", 'A' + 3 - b / 8, rc_usage_rgb_str[v]);
+ v = (m[0x0ac0 / 4 + a] >> (b + 5)) & 7;
+ printf(" %c_MAPPING %s\n\r", 'A' + 3 - b / 8, rc_mapping_str[v]);
+ }
+ printf(" RC_OUT_ALPHA %08X\n\r", m[0x0aa0 / 4 + a]);
+ v = m[0x0aa0 / 4 + a] & 0xf;
+ printf(" CD_OUTPUT %s\n\r", rc_variable_str[v]);
+ v = (m[0x0aa0 / 4 + a] >> 4) & 0xf;
+ printf(" AB_OUTPUT %s\n\r", rc_variable_str[v]);
+ v = (m[0x0aa0 / 4 + a] >> 8) & 0xf;
+ printf(" SUM_OUTPUT %s\n\r", rc_variable_str[v]);
+ v = (m[0x0aa0 / 4 + a] >> 12) & 1;
+ printf(" CD_DOT_PRODUCT %d\n\r", v);
+ v = (m[0x0aa0 / 4 + a] >> 13) & 1;
+ printf(" AB_DOT_PRODUCT %d\n\r", v);
+ v = (m[0x0aa0 / 4 + a] >> 14) & 1;
+ printf(" MUX_SUM %d\n\r", v);
+ v = (m[0x0aa0 / 4 + a] >> 15) & 1;
+ printf(" BIAS %s\n\r", rc_bias_str[v]);
+ v = (m[0x0aa0 / 4 + a] >> 16) & 3;
+ printf(" SCALE %s\n\r", rc_scale_str[v]);
+ //v=(m[0x0aa0/4+a] >> 27) & 7;
+ printf(" RC_OUT_RGB %08X\n\r", m[0x1e40 / 4 + a]);
+ v = m[0x1e40 / 4 + a] & 0xf;
+ printf(" CD_OUTPUT %s\n\r", rc_variable_str[v]);
+ v = (m[0x1e40 / 4 + a] >> 4) & 0xf;
+ printf(" AB_OUTPUT %s\n\r", rc_variable_str[v]);
+ v = (m[0x1e40 / 4 + a] >> 8) & 0xf;
+ printf(" SUM_OUTPUT %s\n\r", rc_variable_str[v]);
+ v = (m[0x1e40 / 4 + a] >> 12) & 1;
+ printf(" CD_DOT_PRODUCT %d\n\r", v);
+ v = (m[0x1e40 / 4 + a] >> 13) & 1;
+ printf(" AB_DOT_PRODUCT %d\n\r", v);
+ v = (m[0x1e40 / 4 + a] >> 14) & 1;
+ printf(" MUX_SUM %d\n\r", v);
+ v = (m[0x1e40 / 4 + a] >> 15) & 1;
+ printf(" BIAS %s\n\r", rc_bias_str[v]);
+ v = (m[0x1e40 / 4 + a] >> 16) & 3;
+ printf(" SCALE %s\n\r", rc_scale_str[v]);
+ //v=(m[0x1e40/4+a] >> 27) & 7;
+ printf("\n\r");
+ }
+ printf("Combiner final %08X %08X\n\r", m[0x0288 / 4], m[0x028c / 4]);
+ for (a = 24; a >= 0; a = a - 8) {
+ n = (m[0x0288 / 4] >> a) & 0xf;
+ printf(" %c_INPUT %s\n\r", 'A' + 3 - a / 8, rc_variable_str[n]);
+ n = (m[0x0288 / 4] >> (a + 4)) & 1;
+ printf(" %c_COMPONENT_USAGE %s\n\r", 'A' + 3 - a / 8, rc_usage_rgb_str[n]);
+ n = (m[0x0288 / 4] >> (a + 5)) & 7;
+ printf(" %c_MAPPING %s\n\r", 'A' + 3 - a / 8, rc_mapping_str[n]);
+ }
+ for (a = 24; a >= 8; a = a - 8) {
+ n = (m[0x028c / 4] >> a) & 0xf;
+ printf(" %c_INPUT %s\n\r", 'E' + 3 - a / 8, rc_variable_str[n]);
+ n = (m[0x028c / 4] >> (a + 4)) & 1;
+ printf(" %c_COMPONENT_USAGE %s\n\r", 'E' + 3 - a / 8, rc_usage_rgb_str[n]);
+ n = (m[0x028c / 4] >> (a + 5)) & 7;
+ printf(" %c_MAPPING %s\n\r", 'E' + 3 - a / 8, rc_mapping_str[n]);
+ }
+ n = (m[0x028c / 4] >> 7) & 1;
+ printf(" color sum clamp: %d\n\r", n);
+}
+#endif
+
+void nv2a_renderer::read_vertex(address_space & space, offs_t address, vertex_nv &vertex, int attrib)
+{
+ UINT32 u;
+ int c, d, l;
+
+ l = vertexbuffer_size[attrib];
+ switch (vertexbuffer_kind[attrib]) {
+ case NV2A_VTXBUF_TYPE_FLOAT:
+ default:
+ vertex.attribute[attrib].fv[0] = 0;
+ vertex.attribute[attrib].fv[1] = 0;
+ vertex.attribute[attrib].fv[2] = 0;
+ vertex.attribute[attrib].fv[3] = 1.0;
+ for (c = d = 0; c < l; c++) {
+ vertex.attribute[attrib].iv[c] = space.read_dword(address + d);
+ d = d + 4;
+ }
+ break;
+ case NV2A_VTXBUF_TYPE_UBYTE:
+ break;
+ case NV2A_VTXBUF_TYPE_UNKNOWN_0:
+ u = space.read_dword(address + 0);
+ for (c = 0; c < l; c++) {
+ vertex.attribute[attrib].fv[c] = (u & 0xff) / 255.0;
+ u = u >> 8;
+ }
+ break;
+ case NV2A_VTXBUF_TYPE_UNKNOWN_6: // ???
+ u = space.read_dword(address + 0);
+ vertex.attribute[attrib].fv[0] = (u & 0xff) / 255.0; // b
+ vertex.attribute[attrib].fv[1] = ((u & 0xff00) >> 8) / 255.0; // g
+ vertex.attribute[attrib].fv[2] = ((u & 0xff0000) >> 16) / 255.0; // r
+ vertex.attribute[attrib].fv[3] = ((u & 0xff000000) >> 24) / 255.0; // a
+ break;
+ }
+}
+
+/* Read vertices data from system memory. Method 0x1810 */
+int nv2a_renderer::read_vertices_0x1810(address_space & space, vertex_nv *destination, int offset, int limit)
+{
+ UINT32 m;
+ int a, b;
+
+#ifdef MAME_DEBUG
+ memset(destination, 0, sizeof(vertex_nv)*limit);
+#endif
+ for (m = 0; m < limit; m++) {
+ b = enabled_vertex_attributes;
+ for (a = 0; a < 16; a++) {
+ if (b & 1) {
+ read_vertex(space, vertexbuffer_address[a] + (m + offset)*vertexbuffer_stride[a], destination[m], a);
+ }
+ b = b >> 1;
+ }
+ }
+ return m;
+}
+
+/* Read vertices data from system memory. Method 0x1800 */
+int nv2a_renderer::read_vertices_0x1800(address_space & space, vertex_nv *destination, UINT32 address, int limit)
+{
+ UINT32 data;
+ UINT32 m, i, c;
+ int a, b;
+
+#ifdef MAME_DEBUG
+ memset(destination, 0, sizeof(vertex_nv)*limit);
+#endif
+ c = 0;
+ for (m = 0; m < limit; m++) {
+ if (indexesleft_count == 0) {
+ data = space.read_dword(address);
+ i = (indexesleft_first + indexesleft_count) & 7;
+ indexesleft[i] = data & 0xffff;
+ indexesleft[(i + 1) & 7] = (data >> 16) & 0xffff;
+ indexesleft_count = indexesleft_count + 2;
+ address += 4;
+ c++;
+ }
+ b = enabled_vertex_attributes;
+ for (a = 0; a < 16; a++) {
+ if (b & 1) {
+ read_vertex(space, vertexbuffer_address[a] + indexesleft[indexesleft_first] * vertexbuffer_stride[a], destination[m], a);
+ }
+ b = b >> 1;
+ }
+ indexesleft_first = (indexesleft_first + 1) & 7;
+ indexesleft_count--;
+ }
+ return (int)c;
+}
+
+/* Read vertices data from system memory. Method 0x1818 */
+int nv2a_renderer::read_vertices_0x1818(address_space & space, vertex_nv *destination, UINT32 address, int limit)
+{
+ UINT32 m, vwords;
+ int a, b;
+
+#ifdef MAME_DEBUG
+ memset(destination, 0, sizeof(vertex_nv)*limit);
+#endif
+ vwords = vertex_attribute_words[15] + vertex_attribute_offset[15];
+ for (m = 0; m < limit; m++) {
+ b = enabled_vertex_attributes;
+ for (a = 0; a < 16; a++) {
+ if (b & 1) {
+ read_vertex(space, address + vertex_attribute_offset[a] * 4, destination[m], a);
+ }
+ b = b >> 1;
+ }
+ address = address + vwords * 4;
+ }
+ return (int)(m*vwords);
+}
+
+void nv2a_renderer::convert_vertices_poly(vertex_nv *source, vertex_t *destination, int count)
+{
+ int m, u;
+
+ // take each vertex with its attributes and obtain data for drawing
+ // should use either the vertex program or transformation matrices
+ if (vertex_pipeline == 4) {
+ // transformation matrices
+ // it is not implemented, so we pretend its always using screen coordinates
+ for (m = 0; m < count; m++) {
+ destination[m].x = source[m].attribute[0].fv[0];
+ destination[m].y = source[m].attribute[0].fv[1];
+ for (u = 0; u < 4; u++) // 0=b 1=g 2=r 3=a
+ destination[m].p[u] = source[m].attribute[3].fv[u];
+ for (u = 0; u < 4; u++) {
+ destination[m].p[4 + u * 2] = source[m].attribute[9 + u].fv[0];
+ destination[m].p[5 + u * 2] = source[m].attribute[9 + u].fv[1];
+ }
+ }
+ }
+ else {
+ // vertex program
+ vertex_nv vert[4];
+ // run vertex program
+ vertexprogram.exec.process(vertexprogram.start_instruction, source, vert, count);
+ // copy data for poly.c
+ for (m = 0; m < count; m++) {
+ destination[m].x = vert[m].attribute[0].fv[0];
+ destination[m].y = vert[m].attribute[0].fv[1];
+ for (u = 0; u < 4; u++) // 0=b 1=g 2=r 3=a
+ destination[m].p[u] = vert[m].attribute[3].fv[u];
+ for (u = 0; u < 4; u++) {
+ destination[m].p[4 + u * 2] = vert[m].attribute[9 + u].fv[0];
+ destination[m].p[5 + u * 2] = vert[m].attribute[9 + u].fv[1];
+ }
+ }
+ }
+}
+
+void nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen)
+{
+ UINT32 maddress;
+ UINT32 data;
+
+ maddress = method * 4;
+ data = space.read_dword(address);
+ channel[chanel][subchannel].object.method[method] = data;
+ if (maddress == 0x17fc) {
+ indexesleft_count = 0;
+ indexesleft_first = 0;
+ primitives_count = 0;
+ countlen--;
+ }
+ if (maddress == 0x1810) {
+ // draw vertices
+ int offset, count, type;
+ UINT32 n;
+ render_delegate renderspans;
+
+ offset = data & 0xffffff;
+ count = (data >> 24) & 0xff;
+ type = channel[chanel][subchannel].object.method[0x17fc / 4];
+ if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
+ }
+ else if (texture[0].enabled) {
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
+ }
+ else
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
+#ifdef LOG_NV2A
+ printf("vertex %d %d %d\n\r", type, offset, count);
+#endif
+ if (type == nv2a_renderer::QUADS) {
+ for (n = 0; n <= count; n += 4) {
+ vertex_nv vert[4];
+ vertex_t xy[4];
+
+ read_vertices_0x1810(space, vert, n + offset, 4);
+ convert_vertices_poly(vert, xy, 4);
+ render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
+ }
+ wait();
+ }
+ else if (type == nv2a_renderer::TRIANGLE_STRIP) {
+ vertex_nv vert[4];
+ vertex_t xy[4];
+
+ read_vertices_0x1810(space, vert, offset, 2);
+ convert_vertices_poly(vert, xy, 2);
+ count = count - 2;
+ offset = offset + 2;
+ for (n = 0; n <= count; n++) {
+ read_vertices_0x1810(space, vert + ((n + 2) & 3), offset + n, 1);
+ convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
+ render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
+ }
+ wait();
+ }
+ else {
+ logerror("Unsupported primitive %d for method 0x1810\n", type);
+ }
+ countlen--;
+ }
+ if (maddress == 0x1800) {
+ UINT32 type, n;
+ render_delegate renderspans;
+
+ if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
+ }
+ else if (texture[0].enabled) {
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
+ }
+ else
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
+ // vertices are selected from the vertex buffer using an array of indexes
+ // each dword after 1800 contains two 16 bit index values to select the vartices
+ type = channel[chanel][subchannel].object.method[0x17fc / 4];
+#ifdef LOG_NV2A
+ printf("vertex %d %d %d\n\r", type, offset, count);
+#endif
+ if (type == nv2a_renderer::QUADS) {
+ while (1) {
+ vertex_nv vert[4];
+ vertex_t xy[4];
+ int c;
+
+ if ((countlen * 2 + indexesleft_count) < 4)
+ break;
+ c = read_vertices_0x1800(space, vert, address, 4);
+ address = address + c * 4;
+ countlen = countlen - c;
+ convert_vertices_poly(vert, xy, 4);
+ render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
+ }
+ while (countlen > 0) {
+ data = space.read_dword(address);
+ n = (indexesleft_first + indexesleft_count) & 7;
+ indexesleft[n] = data & 0xffff;
+ indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
+ indexesleft_count = indexesleft_count + 2;
+ address += 4;
+ countlen--;
+ }
+ wait();
+ }
+ else if (type == nv2a_renderer::TRIANGLES) {
+ while (1) {
+ vertex_nv vert[3];
+ vertex_t xy[3];
+ int c;
+
+ if ((countlen * 2 + indexesleft_count) < 3)
+ break;
+ c = read_vertices_0x1800(space, vert, address, 3);
+ address = address + c * 4;
+ countlen = countlen - c;
+ convert_vertices_poly(vert, xy, 3);
+ render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv
+ }
+ while (countlen > 0) {
+ data = space.read_dword(address);
+ n = (indexesleft_first + indexesleft_count) & 7;
+ indexesleft[n] = data & 0xffff;
+ indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
+ indexesleft_count = indexesleft_count + 2;
+ address += 4;
+ countlen--;
+ }
+ wait();
+ }
+ else if (type == nv2a_renderer::TRIANGLE_STRIP) {
+ if ((countlen * 2 + indexesleft_count) >= 3) {
+ vertex_nv vert[4];
+ vertex_t xy[4];
+ int c, count;
+
+ c = read_vertices_0x1800(space, vert, address, 2);
+ convert_vertices_poly(vert, xy, 2);
+ address = address + c * 4;
+ countlen = countlen - c;
+ count = countlen * 2 + indexesleft_count;
+ for (n = 0; n < count; n++) { // <=
+ c = read_vertices_0x1800(space, vert + ((n + 2) & 3), address, 1);
+ address = address + c * 4;
+ countlen = countlen - c;
+ convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
+ if (xy[(n + 2) & 3].y > 293800000.0)
+ xy[(n + 2) & 3].y = xy[(n + 2) & 3].y + 1.0;
+ render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
+ }
+ }
+ while (countlen > 0) {
+ data = space.read_dword(address);
+ n = (indexesleft_first + indexesleft_count) & 7;
+ indexesleft[n] = data & 0xffff;
+ indexesleft[(n + 1) & 7] = (data >> 16) & 0xffff;
+ indexesleft_count = indexesleft_count + 2;
+ address += 4;
+ countlen--;
+ }
+ wait();
+ }
+ else {
+ logerror("Unsupported primitive %d for method 0x1800\n", type);
+ countlen = 0;
+ }
+ }
+ if (maddress == 0x1818) {
+ int n;
+ int type;
+ render_delegate renderspans;
+
+ if (((channel[chanel][subchannel].object.method[0x1e60 / 4] & 7) > 0) && (combiner.used != 0)) {
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_register_combiners), this);
+ }
+ else if (texture[0].enabled) {
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_texture_simple), this);
+ }
+ else
+ renderspans = render_delegate(FUNC(nv2a_renderer::render_color), this);
+ // vertices are taken from the next words, not from a vertex buffer
+ // first send primitive type with 17fc
+ // then countlen number of dwords with 1818
+ // end with 17fc primitive type 0
+ // at 1760 16 words specify the vertex format:for each possible vertex attribute the number of components (0=not present) and type of each
+ type = channel[chanel][subchannel].object.method[0x17fc / 4];
+ if (type == nv2a_renderer::TRIANGLE_FAN) {
+ vertex_nv vert[3];
+ vertex_t xy[3];
+ int c;
+
+ c = read_vertices_0x1818(space, vert, address, 2);
+ convert_vertices_poly(vert, xy, 2);
+ countlen = countlen - c;
+ if (countlen < 0) {
+ logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
+ countlen = 0;
+ return;
+ }
+ address = address + c * 4;
+ for (n = 1; countlen > 0; n++) {
+ c = read_vertices_0x1818(space, vert + ((n & 1) + 1), address, 1);
+ countlen = countlen - c;
+ if (countlen < 0) {
+ logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
+ countlen = 0;
+ break;
+ }
+ address = address + c * 4;
+ convert_vertices_poly(vert + ((n & 1) + 1), xy + ((n & 1) + 1), 1);
+ render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[0], xy[(~n & 1) + 1], xy[(n & 1) + 1]);
+ }
+ wait();
+ }
+ else if (type == nv2a_renderer::TRIANGLE_STRIP) {
+ vertex_nv vert[4];
+ vertex_t xy[4];
+ int c;
+
+ c = read_vertices_0x1818(space, vert, address, 2);
+ convert_vertices_poly(vert, xy, 2);
+ countlen = countlen - c;
+ if (countlen < 0) {
+ logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
+ countlen = 0;
+ return;
+ }
+ address = address + c * 4;
+ for (n = 0; countlen > 0; n++) {
+ c = read_vertices_0x1818(space, vert + ((n + 2) & 3), address, 1);
+ convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 1);
+ countlen = countlen - c;
+ if (countlen < 0) {
+ logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
+ countlen = 0;
+ break;
+ }
+ address = address + c * 4;
+ render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
+ }
+ wait();
+ }
+ else if (type == nv2a_renderer::QUADS) {
+ while (countlen > 0) {
+ vertex_nv vert[4];
+ vertex_t xy[4];
+ int c;
+
+ c = read_vertices_0x1818(space, vert, address, 4);
+ convert_vertices_poly(vert, xy, 4);
+ countlen = countlen - c;
+ if (countlen < 0) {
+ logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
+ countlen = 0;
+ break;
+ }
+ address = address + c * 4;
+ render_polygon<4>(fb.cliprect(), renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
+ }
+ wait();
+ }
+ else if (type == nv2a_renderer::QUAD_STRIP) {
+ vertex_nv vert[4];
+ vertex_t xy[4];
+ int c;
+
+ c = read_vertices_0x1818(space, vert, address, 2);
+ convert_vertices_poly(vert, xy, 2);
+ countlen = countlen - c;
+ if (countlen < 0) {
+ logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
+ countlen = 0;
+ return;
+ }
+ address = address + c * 4;
+ for (n = 0; countlen > 0; n += 2) {
+ c = read_vertices_0x1818(space, vert + ((n + 2) & 3), address + ((n + 2) & 3), 2);
+ convert_vertices_poly(vert + ((n + 2) & 3), xy + ((n + 2) & 3), 2);
+ countlen = countlen - c;
+ if (countlen < 0) {
+ logerror("Method 0x1818 missing %d words to draw a complete primitive\n", -countlen);
+ countlen = 0;
+ return;
+ }
+ address = address + c * 4;
+ render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[n & 3], xy[(n + 1) & 3], xy[(n + 2) & 3]);
+ render_triangle(fb.cliprect(), renderspans, 4 + 4 * 2, xy[(n + 2) & 3], xy[(n + 1) & 3], xy[(n + 3) & 3]);
+ }
+ wait();
+ }
+ else {
+ logerror("Unsupported primitive %d for method 0x1818\n", type);
+ countlen = 0;
+ }
+ }
+ if ((maddress >= 0x1720) && (maddress < 0x1760)) {
+ int bit = method - 0x1720 / 4;
+
+ if (data & 0x80000000)
+ vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[1];
+ else
+ vertexbuffer_address[bit] = (data & 0x0fffffff) + dma_offset[0];
+ }
+ if ((maddress >= 0x1760) && (maddress < 0x17A0)) {
+ int bit = method - 0x1760 / 4;
+
+ vertexbuffer_stride[bit] = (data >> 8) & 255;
+ vertexbuffer_kind[bit] = data & 15;
+ vertexbuffer_size[bit] = (data >> 4) & 15;
+ switch (vertexbuffer_kind[bit]) {
+ case NV2A_VTXBUF_TYPE_UNKNOWN_0:
+ vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 1) >> 2;
+ break;
+ case NV2A_VTXBUF_TYPE_FLOAT:
+ vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 4) >> 2;
+ break;
+ case NV2A_VTXBUF_TYPE_UBYTE:
+ vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 1) >> 2;
+ break;
+ case NV2A_VTXBUF_TYPE_USHORT:
+ vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 2) >> 2;
+ break;
+ case NV2A_VTXBUF_TYPE_UNKNOWN_6:
+ vertex_attribute_words[bit] = (vertexbuffer_size[bit] * 4) >> 2;
+ break;
+ default:
+ vertex_attribute_words[bit] = 0;
+ }
+ if (vertexbuffer_size[bit] > 0)
+ enabled_vertex_attributes |= (1 << bit);
+ else
+ enabled_vertex_attributes &= ~(1 << bit);
+ for (int n = bit + 1; n < 16; n++) {
+ if ((enabled_vertex_attributes & (1 << (n - 1))) != 0)
+ vertex_attribute_offset[n] = vertex_attribute_offset[n - 1] + vertex_attribute_words[n - 1];
+ else
+ vertex_attribute_offset[n] = vertex_attribute_offset[n - 1];
+ }
+ countlen--;
+ }
+ if ((maddress == 0x1d6c) || (maddress == 0x1d70) || (maddress == 0x1a4))
+ countlen--;
+ if (maddress == 0x019c) {
+ geforce_read_dma_object(data, dma_offset[0], dma_size[0]);
+ }
+ if (maddress == 0x01a0) {
+ geforce_read_dma_object(data, dma_offset[1], dma_size[1]);
+ }
+ if (maddress == 0x1d70) {
+ // with 1d70 write the value at offest [1d6c] inside dma object [1a4]
+ UINT32 offset, base;
+ UINT32 dmahand, dmaoff, smasiz;
+
+ offset = channel[chanel][subchannel].object.method[0x1d6c / 4];
+ dmahand = channel[chanel][subchannel].object.method[0x1a4 / 4];
+ geforce_read_dma_object(dmahand, dmaoff, smasiz);
+ base = dmaoff;
+ space.write_dword(base + offset, data);
+ countlen--;
+ }
+ if (maddress == 0x1d94) {
+ // possible buffers: color, depth, stencil, and accumulation
+ // clear framebuffer
+ if (data & 0xf0) {
+ // clear colors
+ UINT32 color = channel[chanel][subchannel].object.method[0x1d90 / 4];
+ fb.fill(color);
+ //printf("clearscreen\n\r");
+ }
+ if (data & 0x03) {
+ // clear stencil+zbuffer
+ }
+ countlen--;
+ }
+ if (maddress == 0x0210) {
+ // framebuffer offset ?
+ countlen--;
+ }
+ if (maddress == 0x0214) {
+ // zbuffer offset ?
+ countlen--;
+ }
+ if (maddress == 0x0300) {
+ alpha_test_enabled = data != 0;
+ }
+ if (maddress == 0x033c) {
+ alpha_func = data;
+ }
+ if (maddress == 0x0340) {
+ alpha_reference = data;
+ }
+ if (maddress == 0x0304) {
+ if (logical_operation_enabled)
+ blending_enabled = false;
+ else
+ blending_enabled = data != 0;
+ }
+ if (maddress == 0x0344) {
+ blend_function_source = data;
+ }
+ if (maddress == 0x0348) {
+ blend_function_destination = data;
+ }
+ if (maddress == 0x034c) {
+ blend_color = data;
+ }
+ if (maddress == 0x0350) {
+ blend_equation = data;
+ }
+ if (maddress == 0x0d40) {
+ if (data != 0)
+ blending_enabled = false;
+ else
+ blending_enabled = channel[chanel][subchannel].object.method[0x0304 / 4] != 0;
+ logical_operation_enabled = data != 0;
+ }
+ if (maddress == 0x0d44) {
+ logical_operation = data;
+ }
+ // Texture Units
+ if ((maddress >= 0x1b00) && (maddress < 0x1c00)) {
+ int unit;//,off;
+
+ unit = (maddress >> 6) & 3;
+ //off=maddress & 0xc0;
+ maddress = maddress & ~0xc0;
+ if (maddress == 0x1b00) {
+ UINT32 offset;//,base;
+ //UINT32 dmahand,dmaoff,dmasiz;
+
+ offset = data;
+ texture[unit].buffer = space.get_read_ptr(offset);
+ /*if (dma0 != 0) {
+ dmahand=channel[channel][subchannel].object.method[0x184/4];
+ geforce_read_dma_object(dmahand,dmaoff,smasiz);
+ } else if (dma1 != 0) {
+ dmahand=channel[channel][subchannel].object.method[0x188/4];
+ geforce_read_dma_object(dmahand,dmaoff,smasiz);
+ }*/
+ }
+ if (maddress == 0x1b04) {
+ //int dma0,dma1,cubic,noborder,dims,mipmap;
+ int basesizeu, basesizev, basesizew, format;
+
+ //dma0=(data >> 0) & 1;
+ //dma1=(data >> 1) & 1;
+ //cubic=(data >> 2) & 1;
+ //noborder=(data >> 3) & 1;
+ //dims=(data >> 4) & 15;
+ //mipmap=(data >> 19) & 1;
+ format = (data >> 8) & 255;
+ basesizeu = (data >> 20) & 15;
+ basesizev = (data >> 24) & 15;
+ basesizew = (data >> 28) & 15;
+ texture[unit].sizeu = 1 << basesizeu;
+ texture[unit].sizev = 1 << basesizev;
+ texture[unit].sizew = 1 << basesizew;
+ texture[unit].dilate = dilatechose[(basesizeu << 4) + basesizev];
+ texture[unit].format = format;
+ if (debug_grab_texttype == format) {
+ FILE *f;
+ int written;
+
+ debug_grab_texttype = -1;
+ f = fopen(debug_grab_textfile, "wb");
+ if (f) {
+ written = (int)fwrite(texture[unit].buffer, texture[unit].sizeu*texture[unit].sizev * 4, 1, f);
+ fclose(f);
+ logerror("Written %d bytes of texture to specified file\n", written);
+ }
+ else
+ logerror("Unable to save texture to specified file\n");
+ }
+ }
+ if (maddress == 0x1b0c) {
+ // enable texture
+ int enable;
+
+ enable = (data >> 30) & 1;
+ texture[unit].enabled = enable;
+ }
+ if (maddress == 0x1b10) {
+ texture[unit].rectangle_pitch = data >> 16;
+ }
+ countlen--;
+ }
+ // modelview matrix
+ if ((maddress >= 0x0480) && (maddress < 0x04c0)) {
+ maddress = (maddress - 0x0480) / 4;
+ *(UINT32 *)(&matrix.modelview[maddress]) = data;
+ countlen--;
+ }
+ // inverse modelview matrix
+ if ((maddress >= 0x0580) && (maddress < 0x05c0)) {
+ maddress = (maddress - 0x0580) / 4;
+ *(UINT32 *)(&matrix.modelview_inverse[maddress]) = data;
+ countlen--;
+ }
+ // projection matrix
+ if ((maddress >= 0x0680) && (maddress < 0x06c0)) {
+ maddress = (maddress - 0x0680) / 4;
+ *(UINT32 *)(&matrix.projection[maddress]) = data;
+ countlen--;
+ }
+ // viewport translate
+ if ((maddress >= 0x0a20) && (maddress < 0x0a30)) {
+ maddress = (maddress - 0x0a20) / 4;
+ *(UINT32 *)(&matrix.translate[maddress]) = data;
+ // set corresponding vertex shader constant too
+ vertexprogram.exec.c_constant[59].iv[maddress] = data; // constant -37
+ countlen--;
+ }
+ // viewport scale
+ if ((maddress >= 0x0af0) && (maddress < 0x0b00)) {
+ maddress = (maddress - 0x0af0) / 4;
+ *(UINT32 *)(&matrix.scale[maddress]) = data;
+ // set corresponding vertex shader constant too
+ vertexprogram.exec.c_constant[58].iv[maddress] = data; // constant -38
+ countlen--;
+ }
+ // Vertex program (shader)
+ if (maddress == 0x1e94) {
+ /*if (data == 2)
+ logerror("Enabled vertex program\n");
+ else if (data == 4)
+ logerror("Enabled fixed function pipeline\n");
+ else if (data == 6)
+ logerror("Enabled both fixed function pipeline and vertex program ?\n");
+ else
+ logerror("Unknown value %d to method 0x1e94\n",data);*/
+ vertex_pipeline = data & 6;
+ countlen--;
+ }
+ if (maddress == 0x1e9c) {
+ //logerror("VP_UPLOAD_FROM_ID %d\n",data);
+ vertexprogram.upload_instruction_index = data;
+ vertexprogram.upload_instruction_component = 0;
+ countlen--;
+ }
+ if (maddress == 0x1ea0) {
+ //logerror("VP_START_FROM_ID %d\n",data);
+ vertexprogram.instructions = vertexprogram.upload_instruction_index;
+ vertexprogram.start_instruction = data;
+ countlen--;
+ }
+ if (maddress == 0x1ea4) {
+ //logerror("VP_UPLOAD_CONST_ID %d\n",data);
+ vertexprogram.upload_parameter_index = data;
+ vertexprogram.upload_parameter_component = 0;
+ countlen--;
+ }
+ if ((maddress >= 0x0b00) && (maddress < 0x0b80)) {
+ //logerror("VP_UPLOAD_INST\n");
+ if (vertexprogram.upload_instruction_index < 192) {
+ vertexprogram.exec.op[vertexprogram.upload_instruction_index].i[vertexprogram.upload_instruction_component] = data;
+ vertexprogram.exec.op[vertexprogram.upload_instruction_index].modified |= (1 << vertexprogram.upload_instruction_component);
+ }
+ else
+ logerror("Need to increase size of vertexprogram.instruction to %d\n\r", vertexprogram.upload_instruction_index);
+ if (vertexprogram.exec.op[vertexprogram.upload_instruction_index].modified == 15) {
+ vertexprogram.exec.op[vertexprogram.upload_instruction_index].modified = 0;
+ vertexprogram.exec.decode_instruction(vertexprogram.upload_instruction_index);
+ }
+ vertexprogram.upload_instruction_component++;
+ if (vertexprogram.upload_instruction_component >= 4) {
+ vertexprogram.upload_instruction_component = 0;
+ vertexprogram.upload_instruction_index++;
+ }
+ }
+ if ((maddress >= 0x0b80) && (maddress < 0x0c00)) {
+ //logerror("VP_UPLOAD_CONST\n");
+ if (vertexprogram.upload_parameter_index < 256)
+ vertexprogram.exec.c_constant[vertexprogram.upload_parameter_index].iv[vertexprogram.upload_parameter_component] = data;
+ else
+ logerror("Need to increase size of vertexprogram.parameter to %d\n\r", vertexprogram.upload_parameter_index);
+ vertexprogram.upload_parameter_component++;
+ if (vertexprogram.upload_parameter_component >= 4) {
+ vertexprogram.upload_parameter_component = 0;
+ vertexprogram.upload_parameter_index++;
+ }
+ }
+ // Register combiners
+ if (maddress == 0x1e60) {
+ combiner.stages = data & 15;
+ countlen--;
+ }
+ if (maddress == 0x0288) {
+ combiner.final.mapin_rgbD_input = data & 15;
+ combiner.final.mapin_rgbD_component = (data >> 4) & 1;
+ combiner.final.mapin_rgbD_mapping = (data >> 5) & 7;
+ combiner.final.mapin_rgbC_input = (data >> 8) & 15;
+ combiner.final.mapin_rgbC_component = (data >> 12) & 1;
+ combiner.final.mapin_rgbC_mapping = (data >> 13) & 7;
+ combiner.final.mapin_rgbB_input = (data >> 16) & 15;
+ combiner.final.mapin_rgbB_component = (data >> 20) & 1;
+ combiner.final.mapin_rgbB_mapping = (data >> 21) & 7;
+ combiner.final.mapin_rgbA_input = (data >> 24) & 15;
+ combiner.final.mapin_rgbA_component = (data >> 28) & 1;
+ combiner.final.mapin_rgbA_mapping = (data >> 29) & 7;
+ countlen--;
+ }
+ if (maddress == 0x028c) {
+ combiner.final.color_sum_clamp = (data >> 7) & 1;
+ combiner.final.mapin_aG_input = (data >> 8) & 15;
+ combiner.final.mapin_aG_component = (data >> 12) & 1;
+ combiner.final.mapin_aG_mapping = (data >> 13) & 7;
+ combiner.final.mapin_rgbF_input = (data >> 16) & 15;
+ combiner.final.mapin_rgbF_component = (data >> 20) & 1;
+ combiner.final.mapin_rgbF_mapping = (data >> 21) & 7;
+ combiner.final.mapin_rgbE_input = (data >> 24) & 15;
+ combiner.final.mapin_rgbE_component = (data >> 28) & 1;
+ combiner.final.mapin_rgbE_mapping = (data >> 29) & 7;
+ countlen--;
+ }
+ if (maddress == 0x1e20) {
+ combiner_argb8_float(data, combiner.final.register_constantcolor0);
+ countlen--;
+ }
+ if (maddress == 0x1e24) {
+ combiner_argb8_float(data, combiner.final.register_constantcolor1);
+ countlen--;
+ }
+ if ((maddress >= 0x0260) && (maddress < 0x0280)) {
+ int n;
+
+ n = (maddress - 0x0260) >> 2;
+ combiner.stage[n].mapin_aD_input = data & 15;
+ combiner.stage[n].mapin_aD_component = (data >> 4) & 1;
+ combiner.stage[n].mapin_aD_mapping = (data >> 5) & 7;
+ combiner.stage[n].mapin_aC_input = (data >> 8) & 15;
+ combiner.stage[n].mapin_aC_component = (data >> 12) & 1;
+ combiner.stage[n].mapin_aC_mapping = (data >> 13) & 7;
+ combiner.stage[n].mapin_aB_input = (data >> 16) & 15;
+ combiner.stage[n].mapin_aB_component = (data >> 20) & 1;
+ combiner.stage[n].mapin_aB_mapping = (data >> 21) & 7;
+ combiner.stage[n].mapin_aA_input = (data >> 24) & 15;
+ combiner.stage[n].mapin_aA_component = (data >> 28) & 1;
+ combiner.stage[n].mapin_aA_mapping = (data >> 29) & 7;
+ countlen--;
+ }
+ if ((maddress >= 0x0ac0) && (maddress < 0x0ae0)) {
+ int n;
+
+ n = (maddress - 0x0ac0) >> 2;
+ combiner.stage[n].mapin_rgbD_input = data & 15;
+ combiner.stage[n].mapin_rgbD_component = (data >> 4) & 1;
+ combiner.stage[n].mapin_rgbD_mapping = (data >> 5) & 7;
+ combiner.stage[n].mapin_rgbC_input = (data >> 8) & 15;
+ combiner.stage[n].mapin_rgbC_component = (data >> 12) & 1;
+ combiner.stage[n].mapin_rgbC_mapping = (data >> 13) & 7;
+ combiner.stage[n].mapin_rgbB_input = (data >> 16) & 15;
+ combiner.stage[n].mapin_rgbB_component = (data >> 20) & 1;
+ combiner.stage[n].mapin_rgbB_mapping = (data >> 21) & 7;
+ combiner.stage[n].mapin_rgbA_input = (data >> 24) & 15;
+ combiner.stage[n].mapin_rgbA_component = (data >> 28) & 1;
+ combiner.stage[n].mapin_rgbA_mapping = (data >> 29) & 7;
+ countlen--;
+ }
+ if ((maddress >= 0x0a60) && (maddress < 0x0a80)) {
+ int n;
+
+ n = (maddress - 0x0a60) >> 2;
+ combiner_argb8_float(data, combiner.stage[n].register_constantcolor0);
+ countlen--;
+ }
+ if ((maddress >= 0x0a80) && (maddress < 0x0aa0)) {
+ int n;
+
+ n = (maddress - 0x0a80) >> 2;
+ combiner_argb8_float(data, combiner.stage[n].register_constantcolor1);
+ countlen--;
+ }
+ if ((maddress >= 0x0aa0) && (maddress < 0x0ac0)) {
+ int n;
+
+ n = (maddress - 0x0aa0) >> 2;
+ combiner.stage[n].mapout_aCD_output = data & 15;
+ combiner.stage[n].mapout_aAB_output = (data >> 4) & 15;
+ combiner.stage[n].mapout_aSUM_output = (data >> 8) & 15;
+ combiner.stage[n].mapout_aCD_dotproduct = (data >> 12) & 1;
+ combiner.stage[n].mapout_aAB_dotproduct = (data >> 13) & 1;
+ combiner.stage[n].mapout_a_muxsum = (data >> 14) & 1;
+ combiner.stage[n].mapout_a_bias = (data >> 15) & 1;
+ combiner.stage[n].mapout_a_scale = (data >> 16) & 3;
+ //combiner.=(data >> 27) & 7;
+ countlen--;
+ }
+ if ((maddress >= 0x1e40) && (maddress < 0x1e60)) {
+ int n;
+
+ n = (maddress - 0x1e40) >> 2;
+ combiner.stage[n].mapout_rgbCD_output = data & 15;
+ combiner.stage[n].mapout_rgbAB_output = (data >> 4) & 15;
+ combiner.stage[n].mapout_rgbSUM_output = (data >> 8) & 15;
+ combiner.stage[n].mapout_rgbCD_dotproduct = (data >> 12) & 1;
+ combiner.stage[n].mapout_rgbAB_dotproduct = (data >> 13) & 1;
+ combiner.stage[n].mapout_rgb_muxsum = (data >> 14) & 1;
+ combiner.stage[n].mapout_rgb_bias = (data >> 15) & 1;
+ combiner.stage[n].mapout_rgb_scale = (data >> 16) & 3;
+ //combiner.=(data >> 27) & 7;
+ countlen--;
+ }
+}
+
+int nv2a_renderer::toggle_register_combiners_usage()
+{
+ combiner.used = 1 - combiner.used;
+ return combiner.used;
+}
+
+void nv2a_renderer::debug_grab_texture(int type, const char *filename)
+{
+ debug_grab_texttype = type;
+ if (debug_grab_textfile == NULL)
+ debug_grab_textfile = (char *)malloc(128);
+ strncpy(debug_grab_textfile, filename, 127);
+}
+
+void nv2a_renderer::debug_grab_vertex_program_slot(int slot, UINT32 *instruction)
+{
+ if (slot >= 1024 / 4)
+ return;
+ instruction[0] = vertexprogram.exec.op[slot].i[0];
+ instruction[1] = vertexprogram.exec.op[slot].i[1];
+ instruction[2] = vertexprogram.exec.op[slot].i[2];
+ instruction[3] = vertexprogram.exec.op[slot].i[3];
+}
+
+void nv2a_renderer::savestate_items()
+{
+}
+
+void nv2a_renderer::combiner_argb8_float(UINT32 color, float reg[4])
+{
+ reg[0] = (float)(color & 0xff) / 255.0;
+ reg[1] = (float)((color >> 8) & 0xff) / 255.0;
+ reg[2] = (float)((color >> 16) & 0xff) / 255.0;
+ reg[3] = (float)((color >> 24) & 0xff) / 255.0;
+}
+
+UINT32 nv2a_renderer::combiner_float_argb8(float reg[4])
+{
+ UINT32 r, g, b, a;
+
+ a = reg[3] * 255.0;
+ b = reg[2] * 255.0;
+ g = reg[1] * 255.0;
+ r = reg[0] * 255.0;
+ return (a << 24) | (r << 16) | (g << 8) | b;
+}
+
+float nv2a_renderer::combiner_map_input_select(int code, int index)
+{
+ switch (code) {
+ case 0:
+ default:
+ return combiner.register_zero[index];
+ case 1:
+ return combiner.register_color0[index];
+ case 2:
+ return combiner.register_color1[index];
+ case 3:
+ return combiner.register_fogcolor[index];
+ case 4:
+ return combiner.register_primarycolor[index];
+ case 5:
+ return combiner.register_secondarycolor[index];
+ case 8:
+ return combiner.register_texture0color[index];
+ case 9:
+ return combiner.register_texture1color[index];
+ case 10:
+ return combiner.register_texture2color[index];
+ case 11:
+ return combiner.register_texture3color[index];
+ case 12:
+ return combiner.register_spare0[index];
+ case 13:
+ return combiner.register_spare1[index];
+ case 14:
+ return combiner.variable_sumclamp[index];
+ case 15:
+ return combiner.variable_EF[index];
+ }
+
+ // never executed
+ //return 0;
+}
+
+float *nv2a_renderer::combiner_map_input_select3(int code)
+{
+ switch (code) {
+ case 0:
+ default:
+ return combiner.register_zero;
+ case 1:
+ return combiner.register_color0;
+ case 2:
+ return combiner.register_color1;
+ case 3:
+ return combiner.register_fogcolor;
+ case 4:
+ return combiner.register_primarycolor;
+ case 5:
+ return combiner.register_secondarycolor;
+ case 8:
+ return combiner.register_texture0color;
+ case 9:
+ return combiner.register_texture1color;
+ case 10:
+ return combiner.register_texture2color;
+ case 11:
+ return combiner.register_texture3color;
+ case 12:
+ return combiner.register_spare0;
+ case 13:
+ return combiner.register_spare1;
+ case 14:
+ return combiner.variable_sumclamp;
+ case 15:
+ return combiner.variable_EF;
+ }
+
+ // never executed
+ //return 0;
+}
+
+float *nv2a_renderer::combiner_map_output_select3(int code)
+{
+ switch (code) {
+ case 0:
+ return 0;
+ case 1:
+ return 0;
+ case 2:
+ return 0;
+ case 3:
+ return 0;
+ case 4:
+ return combiner.register_primarycolor;
+ case 5:
+ return combiner.register_secondarycolor;
+ case 8:
+ return combiner.register_texture0color;
+ case 9:
+ return combiner.register_texture1color;
+ case 10:
+ return combiner.register_texture2color;
+ case 11:
+ return combiner.register_texture3color;
+ case 12:
+ return combiner.register_spare0;
+ case 13:
+ return combiner.register_spare1;
+ case 14:
+ return 0;
+ case 15:
+ default:
+ return 0;
+ }
+}
+
+float nv2a_renderer::combiner_map_input_function(int code, float value)
+{
+ float t;
+
+ switch (code) {
+ case 0:
+ return MAX(0.0, value);
+ case 1:
+ t = MAX(value, 0.0);
+ return 1.0 - MIN(t, 1.0);
+ case 2:
+ return 2.0 * MAX(0.0, value) - 1.0;
+ case 3:
+ return -2.0 * MAX(0.0, value) + 1.0;
+ case 4:
+ return MAX(0.0, value) - 0.5;
+ case 5:
+ return -MAX(0.0, value) + 0.5;
+ case 6:
+ return value;
+ case 7:
+ default:
+ return -value;
+ }
+
+ // never executed
+ //return 0;
+}
+
+void nv2a_renderer::combiner_map_input_function3(int code, float *data)
+{
+ float t;
+
+ switch (code) {
+ case 0:
+ data[0] = MAX(0.0, data[0]);
+ data[1] = MAX(0.0, data[1]);
+ data[2] = MAX(0.0, data[2]);
+ break;
+ case 1:
+ t = MAX(data[0], 0.0);
+ data[0] = 1.0 - MIN(t, 1.0);
+ t = MAX(data[1], 0.0);
+ data[1] = 1.0 - MIN(t, 1.0);
+ t = MAX(data[2], 0.0);
+ data[2] = 1.0 - MIN(t, 1.0);
+ break;
+ case 2:
+ data[0] = 2.0 * MAX(0.0, data[0]) - 1.0;
+ data[1] = 2.0 * MAX(0.0, data[1]) - 1.0;
+ data[2] = 2.0 * MAX(0.0, data[2]) - 1.0;
+ break;
+ case 3:
+ data[0] = -2.0 * MAX(0.0, data[0]) + 1.0;
+ data[1] = -2.0 * MAX(0.0, data[1]) + 1.0;
+ data[2] = -2.0 * MAX(0.0, data[2]) + 1.0;
+ break;
+ case 4:
+ data[0] = MAX(0.0, data[0]) - 0.5;
+ data[1] = MAX(0.0, data[1]) - 0.5;
+ data[2] = MAX(0.0, data[2]) - 0.5;
+ break;
+ case 5:
+ data[0] = -MAX(0.0, data[0]) + 0.5;
+ data[1] = -MAX(0.0, data[1]) + 0.5;
+ data[2] = -MAX(0.0, data[2]) + 0.5;
+ break;
+ case 6:
+ return;
+ case 7:
+ default:
+ data[0] = -data[0];
+ data[1] = -data[1];
+ data[2] = -data[2];
+ break;
+ }
+}
+
+void nv2a_renderer::combiner_initialize_registers(UINT32 argb8[6])
+{
+ combiner_argb8_float(argb8[0], combiner.register_primarycolor);
+ combiner_argb8_float(argb8[1], combiner.register_secondarycolor);
+ combiner_argb8_float(argb8[2], combiner.register_texture0color);
+ combiner_argb8_float(argb8[3], combiner.register_texture1color);
+ combiner_argb8_float(argb8[4], combiner.register_texture2color);
+ combiner_argb8_float(argb8[5], combiner.register_texture3color);
+ combiner.register_spare0[3] = combiner.register_texture0color[3];
+ combiner.register_zero[0] = combiner.register_zero[1] = combiner.register_zero[2] = combiner.register_zero[3] = 0;
+}
+
+void nv2a_renderer::combiner_initialize_stage(int stage_number)
+{
+ int n = stage_number;
+
+ // put register_constantcolor0 in register_color0
+ combiner.register_color0[0] = combiner.stage[n].register_constantcolor0[0];
+ combiner.register_color0[1] = combiner.stage[n].register_constantcolor0[1];
+ combiner.register_color0[2] = combiner.stage[n].register_constantcolor0[2];
+ combiner.register_color0[3] = combiner.stage[n].register_constantcolor0[3];
+ // put register_constantcolor1 in register_color1
+ combiner.register_color1[0] = combiner.stage[n].register_constantcolor1[0];
+ combiner.register_color1[1] = combiner.stage[n].register_constantcolor1[1];
+ combiner.register_color1[2] = combiner.stage[n].register_constantcolor1[2];
+ combiner.register_color1[3] = combiner.stage[n].register_constantcolor1[3];
+}
+
+void nv2a_renderer::combiner_initialize_final()
+{
+ // put register_constantcolor0 in register_color0
+ combiner.register_color0[0] = combiner.final.register_constantcolor0[0];
+ combiner.register_color0[1] = combiner.final.register_constantcolor0[1];
+ combiner.register_color0[2] = combiner.final.register_constantcolor0[2];
+ combiner.register_color0[3] = combiner.final.register_constantcolor0[3];
+ // put register_constantcolor1 in register_color1
+ combiner.register_color1[0] = combiner.final.register_constantcolor1[0];
+ combiner.register_color1[1] = combiner.final.register_constantcolor1[1];
+ combiner.register_color1[2] = combiner.final.register_constantcolor1[2];
+ combiner.register_color1[3] = combiner.final.register_constantcolor1[3];
+}
+
+void nv2a_renderer::combiner_map_input(int stage_number)
+{
+ int n = stage_number;
+ int c, d, i;
+ float v, *pv;
+
+ // A
+ v = combiner_map_input_select(combiner.stage[n].mapin_aA_input, 2 + combiner.stage[n].mapin_aA_component);
+ combiner.variable_A[3] = combiner_map_input_function(combiner.stage[n].mapin_aA_mapping, v);
+ // B
+ v = combiner_map_input_select(combiner.stage[n].mapin_aB_input, 2 + combiner.stage[n].mapin_aB_component);
+ combiner.variable_B[3] = combiner_map_input_function(combiner.stage[n].mapin_aB_mapping, v);
+ // C
+ v = combiner_map_input_select(combiner.stage[n].mapin_aC_input, 2 + combiner.stage[n].mapin_aC_component);
+ combiner.variable_C[3] = combiner_map_input_function(combiner.stage[n].mapin_aC_mapping, v);
+ // D
+ v = combiner_map_input_select(combiner.stage[n].mapin_aD_input, 2 + combiner.stage[n].mapin_aD_component);
+ combiner.variable_D[3] = combiner_map_input_function(combiner.stage[n].mapin_aD_mapping, v);
+
+ // A
+ pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbA_input);
+ c = combiner.stage[n].mapin_rgbA_component * 3;
+ i = ~combiner.stage[n].mapin_rgbA_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_A[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.stage[n].mapin_rgbA_mapping, combiner.variable_A);
+ // B
+ pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbB_input);
+ c = combiner.stage[n].mapin_rgbB_component * 3;
+ i = ~combiner.stage[n].mapin_rgbB_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_B[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.stage[n].mapin_rgbB_mapping, combiner.variable_B);
+ // C
+ pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbC_input);
+ c = combiner.stage[n].mapin_rgbC_component * 3;
+ i = ~combiner.stage[n].mapin_rgbC_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_C[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.stage[n].mapin_rgbC_mapping, combiner.variable_C);
+ // D
+ pv = combiner_map_input_select3(combiner.stage[n].mapin_rgbD_input);
+ c = combiner.stage[n].mapin_rgbD_component * 3;
+ i = ~combiner.stage[n].mapin_rgbD_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_D[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.stage[n].mapin_rgbD_mapping, combiner.variable_D);
+}
+
+void nv2a_renderer::combiner_map_output(int stage_number)
+{
+ int n = stage_number;
+ float *f;
+
+ // rgb
+ f = combiner_map_output_select3(combiner.stage[n].mapout_rgbAB_output);
+ if (f) {
+ f[0] = combiner.function_RGBop1[0];
+ f[1] = combiner.function_RGBop1[1];
+ f[2] = combiner.function_RGBop1[2];
+ }
+ f = combiner_map_output_select3(combiner.stage[n].mapout_rgbCD_output);
+ if (f) {
+ f[0] = combiner.function_RGBop2[0];
+ f[1] = combiner.function_RGBop2[1];
+ f[2] = combiner.function_RGBop2[2];
+ }
+ if ((combiner.stage[n].mapout_rgbAB_dotproduct | combiner.stage[n].mapout_rgbCD_dotproduct) == 0) {
+ f = combiner_map_output_select3(combiner.stage[n].mapout_rgbSUM_output);
+ if (f) {
+ f[0] = combiner.function_RGBop3[0];
+ f[1] = combiner.function_RGBop3[1];
+ f[2] = combiner.function_RGBop3[2];
+ }
+ }
+ // a
+ f = combiner_map_output_select3(combiner.stage[n].mapout_aAB_output);
+ if (f)
+ f[3] = combiner.function_Aop1;
+ f = combiner_map_output_select3(combiner.stage[n].mapout_aCD_output);
+ if (f)
+ f[3] = combiner.function_Aop2;
+ f = combiner_map_output_select3(combiner.stage[n].mapout_aSUM_output);
+ if (f)
+ f[3] = combiner.function_Aop3;
+}
+
+void nv2a_renderer::combiner_map_final_input()
+{
+ int i, c, d;
+ float *pv;
+
+ // E
+ pv = combiner_map_input_select3(combiner.final.mapin_rgbE_input);
+ c = combiner.final.mapin_rgbE_component * 3;
+ i = ~combiner.final.mapin_rgbE_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_E[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.final.mapin_rgbE_mapping, combiner.variable_E);
+ // F
+ pv = combiner_map_input_select3(combiner.final.mapin_rgbF_input);
+ c = combiner.final.mapin_rgbF_component * 3;
+ i = ~combiner.final.mapin_rgbF_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_F[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.final.mapin_rgbF_mapping, combiner.variable_F);
+ // EF
+ combiner.variable_EF[0] = combiner.variable_E[0] * combiner.variable_F[0];
+ combiner.variable_EF[1] = combiner.variable_E[1] * combiner.variable_F[1];
+ combiner.variable_EF[2] = combiner.variable_E[2] * combiner.variable_F[2];
+ // sumclamp
+ combiner.variable_sumclamp[0] = MAX(0, combiner.register_spare0[0]) + MAX(0, combiner.register_secondarycolor[0]);
+ combiner.variable_sumclamp[1] = MAX(0, combiner.register_spare0[1]) + MAX(0, combiner.register_secondarycolor[1]);
+ combiner.variable_sumclamp[2] = MAX(0, combiner.register_spare0[2]) + MAX(0, combiner.register_secondarycolor[2]);
+ if (combiner.final.color_sum_clamp != 0) {
+ combiner.variable_sumclamp[0] = MIN(combiner.variable_sumclamp[0], 1.0);
+ combiner.variable_sumclamp[1] = MIN(combiner.variable_sumclamp[1], 1.0);
+ combiner.variable_sumclamp[2] = MIN(combiner.variable_sumclamp[2], 1.0);
+ }
+ // A
+ pv = combiner_map_input_select3(combiner.final.mapin_rgbA_input);
+ c = combiner.final.mapin_rgbA_component * 3;
+ i = ~combiner.final.mapin_rgbA_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_A[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.final.mapin_rgbA_mapping, combiner.variable_A);
+ // B
+ pv = combiner_map_input_select3(combiner.final.mapin_rgbB_input);
+ c = combiner.final.mapin_rgbB_component * 3;
+ i = ~combiner.final.mapin_rgbB_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_B[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.final.mapin_rgbB_mapping, combiner.variable_B);
+ // C
+ pv = combiner_map_input_select3(combiner.final.mapin_rgbC_input);
+ c = combiner.final.mapin_rgbC_component * 3;
+ i = ~combiner.final.mapin_rgbC_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_C[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.final.mapin_rgbC_mapping, combiner.variable_C);
+ // D
+ pv = combiner_map_input_select3(combiner.final.mapin_rgbD_input);
+ c = combiner.final.mapin_rgbD_component * 3;
+ i = ~combiner.final.mapin_rgbD_component & 1;
+ for (d = 0; d < 3; d++) {
+ combiner.variable_D[d] = pv[c];
+ c = c + i;
+ }
+ combiner_map_input_function3(combiner.final.mapin_rgbD_mapping, combiner.variable_D);
+ // G
+ combiner.variable_G = combiner_map_input_select(combiner.final.mapin_aG_input, 2 + combiner.final.mapin_aG_component);
+}
+
+void nv2a_renderer::combiner_final_output()
+{
+ // rgb
+ combiner.output[0] = combiner.variable_A[0] * combiner.variable_B[0] + (1.0 - combiner.variable_A[0])*combiner.variable_C[0] + combiner.variable_D[0];
+ combiner.output[1] = combiner.variable_A[1] * combiner.variable_B[1] + (1.0 - combiner.variable_A[1])*combiner.variable_C[1] + combiner.variable_D[1];
+ combiner.output[2] = combiner.variable_A[2] * combiner.variable_B[2] + (1.0 - combiner.variable_A[2])*combiner.variable_C[2] + combiner.variable_D[2];
+ combiner.output[0] = MIN(combiner.output[0], 1.0);
+ combiner.output[1] = MIN(combiner.output[1], 1.0);
+ combiner.output[2] = MIN(combiner.output[2], 1.0);
+ // a
+ combiner.output[3] = combiner_map_input_function(combiner.final.mapin_aG_mapping, combiner.variable_G);
+}
+
+void nv2a_renderer::combiner_function_AB(float result[4])
+{
+ result[0] = combiner.variable_A[0] * combiner.variable_B[0];
+ result[1] = combiner.variable_A[1] * combiner.variable_B[1];
+ result[2] = combiner.variable_A[2] * combiner.variable_B[2];
+}
+
+void nv2a_renderer::combiner_function_AdotB(float result[4])
+{
+ result[0] = combiner.variable_A[0] * combiner.variable_B[0] + combiner.variable_A[1] * combiner.variable_B[1] + combiner.variable_A[2] * combiner.variable_B[2];
+ result[1] = result[0];
+ result[2] = result[0];
+}
+
+void nv2a_renderer::combiner_function_CD(float result[4])
+{
+ result[0] = combiner.variable_C[0] * combiner.variable_D[0];
+ result[1] = combiner.variable_C[1] * combiner.variable_D[1];
+ result[2] = combiner.variable_C[2] * combiner.variable_D[2];
+}
+
+void nv2a_renderer::combiner_function_CdotD(float result[4])
+{
+ result[0] = combiner.variable_C[0] * combiner.variable_D[0] + combiner.variable_C[1] * combiner.variable_D[1] + combiner.variable_C[2] * combiner.variable_D[2];
+ result[1] = result[0];
+ result[2] = result[0];
+}
+
+void nv2a_renderer::combiner_function_ABmuxCD(float result[4])
+{
+ if (combiner.register_spare0[3] >= 0.5)
+ combiner_function_AB(result);
+ else
+ combiner_function_CD(result);
+}
+
+void nv2a_renderer::combiner_function_ABsumCD(float result[4])
+{
+ result[0] = combiner.variable_A[0] * combiner.variable_B[0] + combiner.variable_C[0] * combiner.variable_D[0];
+ result[1] = combiner.variable_A[1] * combiner.variable_B[1] + combiner.variable_C[1] * combiner.variable_D[1];
+ result[2] = combiner.variable_A[2] * combiner.variable_B[2] + combiner.variable_C[2] * combiner.variable_D[2];
+}
+
+void nv2a_renderer::combiner_compute_rgb_outputs(int stage_number)
+{
+ int n = stage_number;
+ int m;
+ float biasrgb, scalergb;
+
+ if (combiner.stage[n].mapout_rgb_bias)
+ biasrgb = -0.5;
+ else
+ biasrgb = 0;
+ switch (combiner.stage[n].mapout_rgb_scale) {
+ case 0:
+ default:
+ scalergb = 1.0;
+ break;
+ case 1:
+ scalergb = 2.0;
+ break;
+ case 2:
+ scalergb = 4.0;
+ break;
+ case 3:
+ scalergb = 0.5;
+ break;
+ }
+ if (combiner.stage[n].mapout_rgbAB_dotproduct) {
+ m = 1;
+ combiner_function_AdotB(combiner.function_RGBop1);
+ }
+ else {
+ m = 0;
+ combiner_function_AB(combiner.function_RGBop1);
+ }
+ combiner.function_RGBop1[0] = MAX(MIN((combiner.function_RGBop1[0] + biasrgb) * scalergb, 1.0), -1.0);
+ combiner.function_RGBop1[1] = MAX(MIN((combiner.function_RGBop1[1] + biasrgb) * scalergb, 1.0), -1.0);
+ combiner.function_RGBop1[2] = MAX(MIN((combiner.function_RGBop1[2] + biasrgb) * scalergb, 1.0), -1.0);
+ if (combiner.stage[n].mapout_rgbCD_dotproduct) {
+ m = m | 1;
+ combiner_function_CdotD(combiner.function_RGBop2);
+ }
+ else
+ combiner_function_CD(combiner.function_RGBop2);
+ combiner.function_RGBop2[0] = MAX(MIN((combiner.function_RGBop2[0] + biasrgb) * scalergb, 1.0), -1.0);
+ combiner.function_RGBop2[1] = MAX(MIN((combiner.function_RGBop2[1] + biasrgb) * scalergb, 1.0), -1.0);
+ combiner.function_RGBop2[2] = MAX(MIN((combiner.function_RGBop2[2] + biasrgb) * scalergb, 1.0), -1.0);
+ if (m == 0) {
+ if (combiner.stage[n].mapout_rgb_muxsum)
+ combiner_function_ABmuxCD(combiner.function_RGBop3);
+ else
+ combiner_function_ABsumCD(combiner.function_RGBop3);
+ combiner.function_RGBop3[0] = MAX(MIN((combiner.function_RGBop3[0] + biasrgb) * scalergb, 1.0), -1.0);
+ combiner.function_RGBop3[1] = MAX(MIN((combiner.function_RGBop3[1] + biasrgb) * scalergb, 1.0), -1.0);
+ combiner.function_RGBop3[2] = MAX(MIN((combiner.function_RGBop3[2] + biasrgb) * scalergb, 1.0), -1.0);
+ }
+}
+
+void nv2a_renderer::combiner_compute_a_outputs(int stage_number)
+{
+ int n = stage_number;
+ float biasa, scalea;
+
+ if (combiner.stage[n].mapout_a_bias)
+ biasa = -0.5;
+ else
+ biasa = 0;
+ switch (combiner.stage[n].mapout_a_scale) {
+ case 0:
+ default:
+ scalea = 1.0;
+ break;
+ case 1:
+ scalea = 2.0;
+ break;
+ case 2:
+ scalea = 4.0;
+ break;
+ case 3:
+ scalea = 0.5;
+ break;
+ }
+ combiner.function_Aop1 = combiner.variable_A[3] * combiner.variable_B[3];
+ combiner.function_Aop1 = MAX(MIN((combiner.function_Aop1 + biasa) * scalea, 1.0), -1.0);
+ combiner.function_Aop2 = combiner.variable_C[3] * combiner.variable_D[3];
+ combiner.function_Aop2 = MAX(MIN((combiner.function_Aop2 + biasa) * scalea, 1.0), -1.0);
+ if (combiner.stage[n].mapout_a_muxsum) {
+ if (combiner.register_spare0[3] >= 0.5)
+ combiner.function_Aop3 = combiner.variable_A[3] * combiner.variable_B[3];
+ else
+ combiner.function_Aop3 = combiner.variable_C[3] * combiner.variable_D[3];
+ }
+ else
+ combiner.function_Aop3 = combiner.variable_A[3] * combiner.variable_B[3] + combiner.variable_C[3] * combiner.variable_D[3];
+ combiner.function_Aop3 = MAX(MIN((combiner.function_Aop3 + biasa) * scalea, 1.0), -1.0);
+}
+
+bool nv2a_renderer::vblank_callback(screen_device &screen, bool state)
+{
+ //printf("vblank_callback\n\r");
+ if (state == true)
+ pcrtc[0x100 / 4] |= 1;
+ else
+ pcrtc[0x100 / 4] &= ~1;
+ if (pcrtc[0x100 / 4] & pcrtc[0x140 / 4])
+ pmc[0x100 / 4] |= 0x1000000;
+ else
+ pmc[0x100 / 4] &= ~0x1000000;
+ if ((pmc[0x100 / 4] != 0) && (pmc[0x140 / 4] != 0)) {
+ // send interrupt
+ return true;
+ }
+ else
+ return false;
+}
+
+UINT32 nv2a_renderer::screen_update_callback(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ UINT32 *dst = (UINT32 *)bitmap.raw_pixptr(0, 0);
+ UINT32 *src = (UINT32 *)fb.raw_pixptr(0, 0);
+
+ //printf("updatescreen\n\r");
+ memcpy(dst, src, bitmap.rowbytes()*bitmap.height());
+ return 0;
+}
+
+READ32_MEMBER(nv2a_renderer::geforce_r)
+{
+ static int x, ret;
+
+ ret = 0;
+ if (offset == 0x1804f6) {
+ x = x ^ 0x08080808;
+ ret = x;
+ }
+ if ((offset >= 0x00101000 / 4) && (offset < 0x00102000 / 4)) {
+ //logerror("NV_2A: read STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,ret);
+ }
+ else if ((offset >= 0x00002000 / 4) && (offset < 0x00004000 / 4)) {
+ ret = pfifo[offset - 0x00002000 / 4];
+ // PFIFO.CACHE1.STATUS or PFIFO.RUNOUT_STATUS
+ if ((offset == 0x3214 / 4) || (offset == 0x2400 / 4))
+ ret = 0x10;
+ //logerror("NV_2A: read PFIFO[%06X] value %08X\n",offset*4-0x00002000,ret);
+ }
+ else if ((offset >= 0x00700000 / 4) && (offset < 0x00800000 / 4)) {
+ ret = ramin[offset - 0x00700000 / 4];
+ //logerror("NV_2A: read PRAMIN[%06X] value %08X\n",offset*4-0x00700000,ret);
+ }
+ else if ((offset >= 0x00400000 / 4) && (offset < 0x00402000 / 4)) {
+ //logerror("NV_2A: read PGRAPH[%06X] value %08X\n",offset*4-0x00400000,ret);
+ }
+ else if ((offset >= 0x00600000 / 4) && (offset < 0x00601000 / 4)) {
+ ret = pcrtc[offset - 0x00600000 / 4];
+ //logerror("NV_2A: read PCRTC[%06X] value %08X\n",offset*4-0x00600000,ret);
+ }
+ else if ((offset >= 0x00000000 / 4) && (offset < 0x00001000 / 4)) {
+ ret = pmc[offset - 0x00000000 / 4];
+ //logerror("NV_2A: read PMC[%06X] value %08X\n",offset*4-0x00000000,ret);
+ }
+ else if ((offset >= 0x00800000 / 4) && (offset < 0x00900000 / 4)) {
+ // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
+ int chanel, subchannel, suboffset;
+
+ suboffset = offset - 0x00800000 / 4;
+ chanel = (suboffset >> (16 - 2)) & 31;
+ subchannel = (suboffset >> (13 - 2)) & 7;
+ suboffset = suboffset & 0x7ff;
+ if (suboffset < 0x80 / 4)
+ ret = channel[chanel][subchannel].regs[suboffset];
+ //logerror("NV_2A: read channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,ret);
+ return ret;
+ }
+ else;
+ //logerror("NV_2A: read at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,ret);
+ return ret;
+}
+
+WRITE32_MEMBER(nv2a_renderer::geforce_w)
+{
+ if ((offset >= 0x00101000 / 4) && (offset < 0x00102000 / 4)) {
+ //logerror("NV_2A: write STRAPS[%06X] mask %08X value %08X\n",offset*4-0x00101000,mem_mask,data);
+ }
+ else if ((offset >= 0x00002000 / 4) && (offset < 0x00004000 / 4)) {
+ int e = offset - 0x00002000 / 4;
+ if (e >= (sizeof(pfifo) / sizeof(UINT32)))
+ return;
+ COMBINE_DATA(pfifo + e);
+ //logerror("NV_2A: read PFIFO[%06X]=%08X\n",offset*4-0x00002000,data & mem_mask); // 2210 pfifo ramht & 1f0 << 12
+ }
+ else if ((offset >= 0x00700000 / 4) && (offset < 0x00800000 / 4)) {
+ int e = offset - 0x00700000 / 4;
+ if (e >= (sizeof(ramin) / sizeof(UINT32)))
+ return;
+ COMBINE_DATA(ramin + e);
+ //logerror("NV_2A: write PRAMIN[%06X]=%08X\n",offset*4-0x00700000,data & mem_mask);
+ }
+ else if ((offset >= 0x00400000 / 4) && (offset < 0x00402000 / 4)) {
+ //logerror("NV_2A: write PGRAPH[%06X]=%08X\n",offset*4-0x00400000,data & mem_mask);
+ }
+ else if ((offset >= 0x00600000 / 4) && (offset < 0x00601000 / 4)) {
+ int e = offset - 0x00600000 / 4;
+ if (e >= (sizeof(pcrtc) / sizeof(UINT32)))
+ return;
+ COMBINE_DATA(pcrtc + e);
+ //logerror("NV_2A: write PCRTC[%06X]=%08X\n",offset*4-0x00600000,data & mem_mask);
+ }
+ else if ((offset >= 0x00000000 / 4) && (offset < 0x00001000 / 4)) {
+ int e = offset - 0x00000000 / 4;
+ if (e >= (sizeof(pmc) / sizeof(UINT32)))
+ return;
+ COMBINE_DATA(pmc + e);
+ //logerror("NV_2A: write PMC[%06X]=%08X\n",offset*4-0x00000000,data & mem_mask);
+ }
+ else if ((offset >= 0x00800000 / 4) && (offset < 0x00900000 / 4)) {
+ // 32 channels size 0x10000 each, 8 subchannels per channel size 0x2000 each
+ int chanel, subchannel, suboffset;
+ int method, count, handle, objclass;
+#ifdef LOG_NV2A
+ int subch;
+#endif
+
+ suboffset = offset - 0x00800000 / 4;
+ chanel = (suboffset >> (16 - 2)) & 31;
+ subchannel = (suboffset >> (13 - 2)) & 7;
+ suboffset = suboffset & 0x7ff;
+ //logerror("NV_2A: write channel[%02X,%d,%04X]=%08X\n",chanel,subchannel,suboffset*4,data & mem_mask);
+ if (suboffset >= 0x80 / 4)
+ return;
+ COMBINE_DATA(&channel[chanel][subchannel].regs[suboffset]);
+ if ((suboffset == 0x40 / 4) || (suboffset == 0x44 / 4)) { // DMA_PUT or DMA_GET
+ UINT32 *dmaput, *dmaget;
+ UINT32 cmd, cmdtype;
+ int countlen;
+
+ dmaput = &channel[chanel][subchannel].regs[0x40 / 4];
+ dmaget = &channel[chanel][subchannel].regs[0x44 / 4];
+ //printf("dmaget %08X dmaput %08X\n\r",*dmaget,*dmaput);
+ if ((*dmaput == 0x048cf000) && (*dmaget == 0x07f4d000))
+ *dmaget = *dmaput;
+ while (*dmaget != *dmaput) {
+ cmd = space.read_dword(*dmaget);
+ *dmaget += 4;
+ cmdtype = geforce_commandkind(cmd);
+ switch (cmdtype)
+ {
+ case 6: // jump
+#ifdef LOG_NV2A
+ printf("jump dmaget %08X", *dmaget);
+#endif
+ *dmaget = cmd & 0xfffffffc;
+#ifdef LOG_NV2A
+ printf(" -> %08X\n\r", *dmaget);
+#endif
+ break;
+ case 0: // increasing method
+ method = (cmd >> 2) & 2047; // method*4 is address // if method >= 0x40 send it to assigned object
+#ifdef LOG_NV2A
+ subch = (cmd >> 13) & 7;
+#endif
+ count = (cmd >> 18) & 2047;
+ if ((method == 0) && (count == 1)) {
+ handle = space.read_dword(*dmaget);
+ handle = geforce_object_offset(handle);
+#ifdef LOG_NV2A
+ logerror(" assign to subchannel %d object at %d\n", subch, handle);
+#endif
+ channel[chanel][subchannel].object.objhandle = handle;
+ handle = ramin[handle / 4];
+ objclass = handle & 0xff;
+ channel[chanel][subchannel].object.objclass = objclass;
+ *dmaget += 4;
+ }
+ else {
+#ifdef LOG_NV2A
+ logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count);
+#endif
+ while (count > 0) {
+ countlen = 1;
+ geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen);
+ count--;
+ method++;
+ *dmaget += 4;
+ }
+ }
+ break;
+ case 5: // non-increasing method
+ method = (cmd >> 2) & 2047;
+#ifdef LOG_NV2A
+ subch = (cmd >> 13) & 7;
+#endif
+ count = (cmd >> 18) & 2047;
+ if ((method == 0) && (count == 1)) {
+#ifdef LOG_NV2A
+ logerror(" assign channel %d\n", subch);
+#endif
+ handle = space.read_dword(*dmaget);
+ handle = geforce_object_offset(handle);
+#ifdef LOG_NV2A
+ logerror(" assign to subchannel %d object at %d\n", subch, handle);
+#endif
+ channel[chanel][subchannel].object.objhandle = handle;
+ handle = ramin[handle / 4];
+ objclass = handle & 0xff;
+ channel[chanel][subchannel].object.objclass = objclass;
+ *dmaget += 4;
+ }
+ else {
+#ifdef LOG_NV2A
+ logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count);
+#endif
+ while (count > 0) {
+ countlen = count;
+ geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen);
+ *dmaget += 4 * (count - countlen);
+ count = countlen;
+ }
+ }
+ break;
+ case 3: // long non-increasing method
+ method = (cmd >> 2) & 2047;
+#ifdef LOG_NV2A
+ subch = (cmd >> 13) & 7;
+#endif
+ count = space.read_dword(*dmaget);
+ *dmaget += 4;
+ if ((method == 0) && (count == 1)) {
+ handle = space.read_dword(*dmaget);
+ handle = geforce_object_offset(handle);
+#ifdef LOG_NV2A
+ logerror(" assign to subchannel %d object at %d\n", subch, handle);
+#endif
+ channel[chanel][subchannel].object.objhandle = handle;
+ handle = ramin[handle / 4];
+ objclass = handle & 0xff;
+ channel[chanel][subchannel].object.objclass = objclass;
+ *dmaget += 4;
+ }
+ else {
+#ifdef LOG_NV2A
+ logerror(" subch. %d method %04x offset %04x count %d\n", subch, method, method * 4, count);
+#endif
+ while (count > 0) {
+ countlen = count;
+ geforce_exec_method(space, chanel, subchannel, method, *dmaget, countlen);
+ *dmaget += 4 * (count - countlen);
+ count = countlen;
+ }
+ }
+ break;
+ default:
+ logerror(" unimplemented command %08X\n", cmd);
+ }
+ }
+ }
+ }
+ else;
+ // logerror("NV_2A: write at %08X mask %08X value %08X\n",0xfd000000+offset*4,mem_mask,data);
+}
diff --git a/src/mame/video/galpani2.c b/src/mame/video/galpani2.c
index a71c2e2c758..9e565cb3209 100644
--- a/src/mame/video/galpani2.c
+++ b/src/mame/video/galpani2.c
@@ -55,47 +55,6 @@ WRITE16_MEMBER( galpani2_bg8_regs_0_w ) { galpani2_bg8_regs_w(space, offset, dat
WRITE16_MEMBER( galpani2_bg8_regs_1_w ) { galpani2_bg8_regs_w(space, offset, data, mem_mask, 1); }
#endif
-inline void galpani2_state::galpani2_bg8_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_)
-{
- int x,y,pen;
- UINT16 newword = COMBINE_DATA(&m_bg8[_n_][offset]);
- pen = newword & 0xff;
- x = (offset % 512); /* 512 x 256 */
- y = (offset / 512);
- m_bg8_bitmap[_n_]->pix16(y, x) = 0x4000 + pen;
-}
-
-WRITE16_MEMBER( galpani2_state::galpani2_bg8_0_w ) { galpani2_bg8_w(offset, data, mem_mask, 0); }
-WRITE16_MEMBER( galpani2_state::galpani2_bg8_1_w ) { galpani2_bg8_w(offset, data, mem_mask, 1); }
-
-inline void galpani2_state::galpani2_palette_w(offs_t offset, UINT16 data, UINT16 mem_mask, int _n_)
-{
- UINT16 newword = COMBINE_DATA(&m_palette_val[_n_][offset]);
- m_palette->set_pen_color( offset + 0x4000 + _n_ * 0x100, pal5bit(newword >> 5), pal5bit(newword >> 10), pal5bit(newword >> 0) );
-}
-
-WRITE16_MEMBER( galpani2_state::galpani2_palette_0_w ) { galpani2_palette_w(offset, data, mem_mask, 0); }
-WRITE16_MEMBER( galpani2_state::galpani2_palette_1_w ) { galpani2_palette_w(offset, data, mem_mask, 1); }
-
-
-/***************************************************************************
-
-
- xRGB Background Layer
-
-
-***************************************************************************/
-
-/* 8 horizontal pages of 256x256 pixels? */
-WRITE16_MEMBER( galpani2_state::galpani2_bg15_w )
-{
- UINT16 newword = COMBINE_DATA(&m_bg15[offset]);
-
- int x = (offset % 256) + (offset / (256*256)) * 256 ;
- int y = (offset / 256) % 256;
-
- m_bg15_bitmap->pix16(y, x) = 0x4200 + (newword & 0x7fff);
-}
/***************************************************************************
@@ -113,14 +72,11 @@ PALETTE_INIT_MEMBER(galpani2_state, galpani2)
/* initialize 555 RGB lookup */
for (i = 0; i < 0x8000; i++)
- palette.set_pen_color(0x4200+i,pal5bit(i >> 5),pal5bit(i >> 10),pal5bit(i >> 0));
+ palette.set_pen_color(i,pal5bit(i >> 5),pal5bit(i >> 10),pal5bit(i >> 0));
}
void galpani2_state::video_start()
{
- m_bg15_bitmap = auto_bitmap_ind16_alloc(machine(), 256*8, 256);
- m_bg8_bitmap[0] = auto_bitmap_ind16_alloc(machine(), 512, 256);
- m_bg8_bitmap[1] = auto_bitmap_ind16_alloc(machine(), 512, 256);
}
@@ -132,11 +88,53 @@ void galpani2_state::video_start()
***************************************************************************/
-UINT32 galpani2_state::screen_update_galpani2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+// based on videos these 8-bit layers actually get *blended* against the RGB555 layer
+// it should be noted that in the layer at 0x500000 the upper 8 bits are set too, this could be related
+void galpani2_state::copybg8(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int layer)
+{
+ int x = - ( *m_bg8_scrollx[layer] + 0x200 - 0x0f5 );
+ int y = - ( *m_bg8_scrolly[layer] + 0x200 - 0x1be );
+ UINT16* ram = m_bg8[layer];
+
+ const pen_t *clut = &m_bg8palette->pen(0);
+ for (int xx = 0; xx < 320; xx++)
+ {
+ for (int yy = 0; yy < 240; yy++)
+ {
+ UINT16 pen = ram[(((y + yy) & 0xff) * 512) + ((x + xx) & 0x1ff)];
+ if (pen) bitmap.pix32(yy, xx) = clut[pen & 0xff];
+ }
+ }
+}
+
+// this seems to be 256x256 pages (arranged as 1024*256), but the game resolution is 320x240
+// https://www.youtube.com/watch?v=2b2SLFtC0uA is a video of the galpanic2j set, and shows the RGB pattern at
+// startup covering all screen lines - is the hardware mixing bitmaps of different resolutions or is there a
+// line select somewhere? I should find the gal images and find what resolution they're stored at too.
+// (or is this just wrong format / layout due to protection?)
+void galpani2_state::copybg15(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+{
+ UINT16* ram = m_bg15 + 0x40000/2;
+
+ //int x = 0;
+ //int y = 0;
+
+ const pen_t *clut = &m_bg15palette->pen(0);
+ for (int xx = 0; xx < 320; xx++)
+ {
+ for (int yy = 0; yy < 240; yy++)
+ {
+ UINT16 pen = ram[(xx * 0x800) + yy];
+ bitmap.pix32(yy, xx) = clut[pen & 0x7fff];
+ }
+ }
+}
+
+UINT32 galpani2_state::screen_update_galpani2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
int layers_ctrl = -1;
-#ifdef MAME_DEBUG
+#if 1 // MAME_DEBUG
if (machine().input().code_pressed(KEYCODE_Z))
{
int msk = 0;
@@ -151,39 +149,15 @@ if (machine().input().code_pressed(KEYCODE_Z))
bitmap.fill(0, cliprect);
screen.priority().fill(0, cliprect);
- if (layers_ctrl & 0x1)
- {
- int x = 0;
- int y = 0;
- copyscrollbitmap_trans(bitmap, *m_bg15_bitmap,
- 1, &x, 1, &y,
- cliprect,0x4200 + 0);
- }
-
/* test mode:
304000:0040 0000 0100 0000-0000 0000 0000 0000 (Sprite regs)
304010:16C0 0200 16C0 0200-16C0 0200 16C0 0200
16c0/40 = 5b 200/40 = 8
scrollx = f5, on screen x should be 0 (f5+5b = 150) */
- if (layers_ctrl & 0x2)
- {
- int x = - ( *m_bg8_scrollx[0] + 0x200 - 0x0f5 );
- int y = - ( *m_bg8_scrolly[0] + 0x200 - 0x1be );
- copyscrollbitmap_trans(bitmap, *m_bg8_bitmap[0],
- 1, &x, 1, &y,
- cliprect,0x4000 + 0);
- }
-
- if (layers_ctrl & 0x4)
- {
- int x = - ( *m_bg8_scrollx[1] + 0x200 - 0x0f5 );
- int y = - ( *m_bg8_scrolly[1] + 0x200 - 0x1be );
- copyscrollbitmap_trans(bitmap, *m_bg8_bitmap[1],
- 1, &x, 1, &y,
- cliprect,0x4000 + 0);
- }
-
+ if (layers_ctrl & 0x1) copybg15(screen, bitmap, cliprect);
+ if (layers_ctrl & 0x2) copybg8(screen, bitmap, cliprect, 0);
+ if (layers_ctrl & 0x4) copybg8(screen, bitmap, cliprect, 1);
if (layers_ctrl & 0x8) m_kaneko_spr->kaneko16_render_sprites(bitmap, cliprect, screen.priority(), m_spriteram, m_spriteram.bytes());
return 0;
}
diff --git a/src/mame/video/mjkjidai.c b/src/mame/video/mjkjidai.c
index eb668c02590..87a4e15640b 100644
--- a/src/mame/video/mjkjidai.c
+++ b/src/mame/video/mjkjidai.c
@@ -45,12 +45,10 @@ WRITE8_MEMBER(mjkjidai_state::mjkjidai_videoram_w)
WRITE8_MEMBER(mjkjidai_state::mjkjidai_ctrl_w)
{
- UINT8 *rom = memregion("maincpu")->base();
-
// logerror("%04x: port c0 = %02x\n",space.device().safe_pc(),data);
/* bit 0 = NMI enable */
- m_nmi_mask = data & 1;
+ m_nmi_enable = data & 1;
/* bit 1 = flip screen */
flip_screen_set(data & 0x02);
@@ -62,15 +60,7 @@ WRITE8_MEMBER(mjkjidai_state::mjkjidai_ctrl_w)
coin_counter_w(machine(), 0,data & 0x20);
/* bits 6-7 select ROM bank */
- if (data & 0xc0)
- {
- membank("bank1")->set_base(rom + 0x10000-0x4000 + ((data & 0xc0) << 8));
- }
- else
- {
- /* there is code flowing from 7fff to this bank so they have to be contiguous in memory */
- membank("bank1")->set_base(rom + 0x08000);
- }
+ membank("bank1")->set_entry(data >> 6);
}
@@ -83,9 +73,9 @@ WRITE8_MEMBER(mjkjidai_state::mjkjidai_ctrl_w)
void mjkjidai_state::draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect)
{
- UINT8 *spriteram = m_spriteram1;
- UINT8 *spriteram_2 = m_spriteram2;
- UINT8 *spriteram_3 = m_spriteram3;
+ UINT8 *spriteram = &m_videoram[0];
+ UINT8 *spriteram_2 = &m_videoram[0x800];
+ UINT8 *spriteram_3 = &m_videoram[0x1000];
int offs;
for (offs = 0x20-2;offs >= 0;offs -= 2)
diff --git a/src/mame/video/renegade.c b/src/mame/video/renegade.c
index 61f439e5a27..013c219d233 100644
--- a/src/mame/video/renegade.c
+++ b/src/mame/video/renegade.c
@@ -8,17 +8,16 @@
#include "includes/renegade.h"
-WRITE8_MEMBER(renegade_state::renegade_videoram_w)
+WRITE8_MEMBER(renegade_state::bg_videoram_w)
{
- UINT8 *videoram = m_videoram;
- videoram[offset] = data;
+ m_bg_videoram[offset] = data;
offset = offset % (64 * 16);
m_bg_tilemap->mark_tile_dirty(offset);
}
-WRITE8_MEMBER(renegade_state::renegade_videoram2_w)
+WRITE8_MEMBER(renegade_state::fg_videoram_w)
{
- m_videoram2[offset] = data;
+ m_fg_videoram[offset] = data;
offset = offset % (32 * 32);
m_fg_tilemap->mark_tile_dirty(offset);
}
@@ -28,20 +27,19 @@ WRITE8_MEMBER(renegade_state::renegade_flipscreen_w)
flip_screen_set(~data & 0x01);
}
-WRITE8_MEMBER(renegade_state::renegade_scroll0_w)
+WRITE8_MEMBER(renegade_state::scroll_lsb_w)
{
m_scrollx = (m_scrollx & 0xff00) | data;
}
-WRITE8_MEMBER(renegade_state::renegade_scroll1_w)
+WRITE8_MEMBER(renegade_state::scroll_msb_w)
{
m_scrollx = (m_scrollx & 0xff) | (data << 8);
}
TILE_GET_INFO_MEMBER(renegade_state::get_bg_tilemap_info)
{
- UINT8 *videoram = m_videoram;
- const UINT8 *source = &videoram[tile_index];
+ const UINT8 *source = &m_bg_videoram[tile_index];
UINT8 attributes = source[0x400]; /* CCC??BBB */
SET_TILE_INFO_MEMBER(1 + (attributes & 0x7),
source[0],
@@ -51,7 +49,7 @@ TILE_GET_INFO_MEMBER(renegade_state::get_bg_tilemap_info)
TILE_GET_INFO_MEMBER(renegade_state::get_fg_tilemap_info)
{
- const UINT8 *source = &m_videoram2[tile_index];
+ const UINT8 *source = &m_fg_videoram[tile_index];
UINT8 attributes = source[0x400];
SET_TILE_INFO_MEMBER(0,
(attributes & 3) * 256 + source[0],
diff --git a/src/mame/video/tankbust.c b/src/mame/video/tankbust.c
index b271d41f6d6..6ec7001bb1b 100644
--- a/src/mame/video/tankbust.c
+++ b/src/mame/video/tankbust.c
@@ -194,7 +194,7 @@ void tankbust_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprec
color = 0;
- //0x02 - dont know (most of the time this bit is set in tank sprite and others but not all and not always)
+ //0x02 - don't know (most of the time this bit is set in tank sprite and others but not all and not always)
//0x04 - not used
//0x08 - not used
//0x10 - not used
diff --git a/src/mame/video/tigeroad.c b/src/mame/video/tigeroad.c
index d1ae43b4629..76c7d5d6e9b 100644
--- a/src/mame/video/tigeroad.c
+++ b/src/mame/video/tigeroad.c
@@ -66,46 +66,7 @@ WRITE16_MEMBER(tigeroad_state::tigeroad_scroll_w)
}
}
-void tigeroad_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority )
-{
- UINT16 *source = &m_spriteram->buffer()[m_spriteram->bytes()/2] - 4;
- UINT16 *finish = m_spriteram->buffer();
- while (source >= finish)
- {
- int tile_number = source[0];
-
- if (tile_number != 0xfff) {
- int attr = source[1];
- int sy = source[2] & 0x1ff;
- int sx = source[3] & 0x1ff;
-
- int flipx = attr & 0x02;
- int flipy = attr & 0x01;
- int color = (attr >> 2) & 0x0f;
-
- if (sx > 0x100) sx -= 0x200;
- if (sy > 0x100) sy -= 0x200;
-
- if (flip_screen())
- {
- sx = 240 - sx;
- sy = 240 - sy;
- flipx = !flipx;
- flipy = !flipy;
- }
-
-
- m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
- tile_number,
- color,
- flipx, flipy,
- sx, 240 - sy, 15);
- }
-
- source -= 4;
- }
-}
TILE_GET_INFO_MEMBER(tigeroad_state::get_bg_tile_info)
{
@@ -156,9 +117,9 @@ void tigeroad_state::video_start()
UINT32 tigeroad_state::screen_update_tigeroad(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
- draw_sprites(bitmap, cliprect, 0);
+ m_spritegen->draw_sprites(bitmap, cliprect, m_gfxdecode, 2, m_spriteram->buffer(), m_spriteram->bytes(), flip_screen(), 1 );
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 1);
- //draw_sprites(bitmap, cliprect, 1); draw priority sprites?
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 2);
return 0;
}
+
diff --git a/src/mame/video/tigeroad_spr.c b/src/mame/video/tigeroad_spr.c
new file mode 100644
index 00000000000..a180f8ba56a
--- /dev/null
+++ b/src/mame/video/tigeroad_spr.c
@@ -0,0 +1,94 @@
+/*
+
+ very simple sprite scheme, used by some Capcom games and hardware cloned from them
+
+ bionicc.c
+ tigeroad.c
+ supduck.c
+
+ it is unknown if this is handled by a custom chip, or simple logic.
+ y positions are inverted in Bionic Commando, but it seems otherwise the same as
+ Tiger Road
+
+*/
+
+
+#include "emu.h"
+#include "tigeroad_spr.h"
+
+
+const device_type TIGEROAD_SPRITE = &device_creator<tigeroad_spr_device>;
+
+tigeroad_spr_device::tigeroad_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, TIGEROAD_SPRITE, "Simple Capcom (Tiger Road) Sprite", tag, owner, clock, "tigeroad_spr", __FILE__)
+{
+}
+
+
+void tigeroad_spr_device::device_start()
+{
+}
+
+
+
+void tigeroad_spr_device::device_reset()
+{
+}
+
+/*
+ 4 words per sprite
+
+ 0 ---- ---t tttt tttt = tile number
+
+ 1 ---- ---- --cc cc-- = colour
+ 1 ---- ---- ---- --x- = flip x
+ 1 ---- ---- ---- ---y = flip y
+
+ 2 ---- ---x xxxx xxxx = x pos (signed)
+
+ 3 ---- ---y yyyy yyyy = y pos (signed)
+
+*/
+
+
+void tigeroad_spr_device::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, gfxdecode_device *gfxdecode, int region, UINT16* ram, UINT32 size, int flip_screen, int rev_y )
+{
+ UINT16 *source = &ram[size/2] - 4;
+ UINT16 *finish = ram;
+
+ while (source >= finish)
+ {
+ int tile_number = source[0];
+
+ int attr = source[1];
+ int sy = source[2] & 0x1ff;
+ int sx = source[3] & 0x1ff;
+
+ int flipx = attr & 0x02;
+ int flipy = attr & 0x01;
+ int color = (attr >> 2) & 0x0f;
+
+ if (sx > 0x100) sx -= 0x200;
+ if (sy > 0x100) sy -= 0x200;
+
+ if (flip_screen)
+ {
+ sx = 240 - sx;
+ sy = 240 - sy;
+ flipx = !flipx;
+ flipy = !flipy;
+ }
+
+ if (rev_y)
+ sy = 240 - sy;
+
+
+ gfxdecode->gfx(region)->transpen(bitmap,cliprect,
+ tile_number,
+ color,
+ flipx, flipy,
+ sx, sy, 15);
+
+ source -= 4;
+ }
+}
diff --git a/src/mame/video/tigeroad_spr.h b/src/mame/video/tigeroad_spr.h
new file mode 100644
index 00000000000..80aec88b667
--- /dev/null
+++ b/src/mame/video/tigeroad_spr.h
@@ -0,0 +1,16 @@
+
+class tigeroad_spr_device : public device_t
+{
+public:
+ tigeroad_spr_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, gfxdecode_device *gfxdecode, int region, UINT16* ram, UINT32 size, int flip_screen, int rev_y);
+
+protected:
+
+ virtual void device_start();
+ virtual void device_reset();
+private:
+};
+
+extern const device_type TIGEROAD_SPRITE;
diff --git a/src/mame/video/yunsun16.c b/src/mame/video/yunsun16.c
index 8262efde2c5..293f2d89e00 100644
--- a/src/mame/video/yunsun16.c
+++ b/src/mame/video/yunsun16.c
@@ -38,7 +38,7 @@
#define PAGES_PER_TMAP_X (0x4)
#define PAGES_PER_TMAP_Y (0x4)
-TILEMAP_MAPPER_MEMBER(yunsun16_state::yunsun16_tilemap_scan_pages)
+TILEMAP_MAPPER_MEMBER(yunsun16_state::tilemap_scan_pages)
{
return (row / TILES_PER_PAGE_Y) * TILES_PER_PAGE_X * TILES_PER_PAGE_Y * PAGES_PER_TMAP_X +
(row % TILES_PER_PAGE_Y) +
@@ -67,13 +67,13 @@ TILE_GET_INFO_MEMBER(yunsun16_state::get_tile_info_1)
(attr & 0x20) ? TILE_FLIPX : 0);
}
-WRITE16_MEMBER(yunsun16_state::yunsun16_vram_0_w)
+WRITE16_MEMBER(yunsun16_state::vram_0_w)
{
COMBINE_DATA(&m_vram_0[offset]);
m_tilemap_0->mark_tile_dirty(offset / 2);
}
-WRITE16_MEMBER(yunsun16_state::yunsun16_vram_1_w)
+WRITE16_MEMBER(yunsun16_state::vram_1_w)
{
COMBINE_DATA(&m_vram_1[offset]);
m_tilemap_1->mark_tile_dirty(offset / 2);
@@ -90,9 +90,9 @@ WRITE16_MEMBER(yunsun16_state::yunsun16_vram_1_w)
void yunsun16_state::video_start()
{
- m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this),
+ m_tilemap_0 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_0),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this),
16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
- m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::yunsun16_tilemap_scan_pages),this),
+ m_tilemap_1 = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(yunsun16_state::get_tile_info_1),this),tilemap_mapper_delegate(FUNC(yunsun16_state::tilemap_scan_pages),this),
16,16, TILES_PER_PAGE_X*PAGES_PER_TMAP_X,TILES_PER_PAGE_Y*PAGES_PER_TMAP_Y);
m_tilemap_0->set_scrolldx(-0x34, 0);
diff --git a/src/mess/audio/upd1771.c b/src/mess/audio/upd1771.c
index cb156544686..4db60193920 100644
--- a/src/mess/audio/upd1771.c
+++ b/src/mess/audio/upd1771.c
@@ -20,7 +20,7 @@
it is perfectly possible to generate other sounds with different rom code and data.
Most upd17XXX devices are typically 4bit NEC MCUs, however based on information
- in in "Electronic Speech Synthesis" by Geoff Bristow (ISBN 0-07-007912-9, pages 148-152)
+ in "Electronic Speech Synthesis" by Geoff Bristow (ISBN 0-07-007912-9, pages 148-152)
the upd1770/1771 is not one of these 4-bit ones.
The uPD1770/uPD1771 SSM is a 16-bit-wide rom/ram mcu with 8kb (4kw) of rom code,
@@ -138,7 +138,7 @@
pin 6 is tied to the PC3 pin of the upD7801 CPU
pin 26 is tied to the INT1 pin of the upD7801 (CPU pin 12),
- 1,2,3,28,27 dont generate any digital signals
+ 1,2,3,28,27 don't generate any digital signals
6 seems to be lowered 2.5 ms before an audio write
7 is always low.
12 is always high
@@ -404,7 +404,7 @@ WRITE8_MEMBER( upd1771c_device::write )
m_t_timbre = (m_packet[1] & 0xe0) >> 5;
m_t_offset = (m_packet[1] & 0x1f);
m_t_period = m_packet[2];
- //smaller periods dont all equal to 0x20
+ //smaller periods don't all equal to 0x20
if (m_t_period < 0x20)
m_t_period = 0x20;
diff --git a/src/mess/drivers/cnsector.c b/src/mess/drivers/cnsector.c
new file mode 100644
index 00000000000..1af209bb830
--- /dev/null
+++ b/src/mess/drivers/cnsector.c
@@ -0,0 +1,250 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/***************************************************************************
+
+ Parker Brothers Code Name: Sector
+ * MP0905BNL ZA0379 (die labeled 0970F-05B)
+
+ This is a tabletop submarine pursuit game. A grid board and small toy
+ boats are used to remember your locations (a Paint app should be ok too).
+ Refer to the official manual for more information, it is not a simple game.
+
+
+ TODO:
+ - MCU clock is unknown
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/tms0980/tms0980.h"
+
+#include "cnsector.lh"
+
+// master clock is unknown, the value below is an approximation
+#define MASTER_CLOCK (250000)
+
+
+class cnsector_state : public driver_device
+{
+public:
+ cnsector_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_button_matrix(*this, "IN")
+ { }
+
+ required_device<cpu_device> m_maincpu;
+ required_ioport_array<5> m_button_matrix;
+
+ UINT16 m_o;
+
+ UINT16 m_leds_state[0x10];
+ UINT16 m_leds_cache[0x10];
+ UINT8 m_leds_decay[0x100];
+
+ DECLARE_READ8_MEMBER(read_k);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_WRITE16_MEMBER(write_r);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
+ void leds_update();
+
+ virtual void machine_start();
+};
+
+
+
+/***************************************************************************
+
+ LEDs
+
+***************************************************************************/
+
+// The device strobes the outputs very fast, it is unnoticeable to the user.
+// To prevent flickering here, we need to simulate a decay.
+
+// decay time, in steps of 10ms
+#define LEDS_DECAY_TIME 4
+
+void cnsector_state::leds_update()
+{
+ UINT16 active_state[0x10];
+
+ for (int i = 0; i < 0x10; i++)
+ {
+ active_state[i] = 0;
+
+ for (int j = 0; j < 0x10; j++)
+ {
+ int di = j << 4 | i;
+
+ // turn on powered leds
+ if (m_leds_state[i] >> j & 1)
+ m_leds_decay[di] = LEDS_DECAY_TIME;
+
+ // determine active state
+ int ds = (m_leds_decay[di] != 0) ? 1 : 0;
+ active_state[i] |= (ds << j);
+ }
+ }
+
+ // on difference, send to output
+ for (int i = 0; i < 0x10; i++)
+ if (m_leds_cache[i] != active_state[i])
+ output_set_digit_value(i, active_state[i]);
+
+ memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(cnsector_state::leds_decay_tick)
+{
+ // slowly turn off unpowered leds
+ for (int i = 0; i < 0x100; i++)
+ if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
+ m_leds_decay[i]--;
+
+ leds_update();
+}
+
+
+
+/***************************************************************************
+
+ I/O
+
+***************************************************************************/
+
+READ8_MEMBER(cnsector_state::read_k)
+{
+ UINT8 k = 0;
+
+ // read selected button rows
+ for (int i = 0; i < 5; i++)
+ if (m_o >> i & 1)
+ k |= m_button_matrix[i]->read();
+
+ return k;
+}
+
+WRITE16_MEMBER(cnsector_state::write_r)
+{
+ // R0-R5: select digit (right-to-left)
+ for (int i = 0; i < 6; i++)
+ m_leds_state[i] = (data >> i & 1) ? m_o : 0;
+ leds_update();
+
+ // R6-R9: direction leds
+ for (int i = 6; i < 10; i++)
+ output_set_lamp_value(i - 6, data >> i & 1);
+}
+
+WRITE16_MEMBER(cnsector_state::write_o)
+{
+ // O0-O4: input mux
+ // O0-O7: digit segments
+ m_o = data;
+}
+
+
+
+/***************************************************************************
+
+ Inputs
+
+***************************************************************************/
+
+static INPUT_PORTS_START( cnsector )
+ PORT_START("IN.0") // O0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("Next Ship")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("Left")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_NAME("Range")
+
+ PORT_START("IN.1") // O1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("Aim")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("Right")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.2") // O2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("Fire")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("Evasive Sub") // expert button
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("Recall")
+
+ PORT_START("IN.3") // O3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_NAME("Sub Finder") // expert button
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("Slower")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.4") // O4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("Teach Mode")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("Faster")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("Move Ship")
+INPUT_PORTS_END
+
+
+
+/***************************************************************************
+
+ Machine Config
+
+***************************************************************************/
+
+void cnsector_state::machine_start()
+{
+ memset(m_leds_state, 0, sizeof(m_leds_state));
+ memset(m_leds_cache, 0, sizeof(m_leds_cache));
+ memset(m_leds_decay, 0, sizeof(m_leds_decay));
+ m_o = 0;
+
+ save_item(NAME(m_leds_state));
+ save_item(NAME(m_leds_cache));
+ save_item(NAME(m_leds_decay));
+ save_item(NAME(m_o));
+}
+
+
+static MACHINE_CONFIG_START( cnsector, cnsector_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK)
+ MCFG_TMS1XXX_READ_K_CB(READ8(cnsector_state, read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(cnsector_state, write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(cnsector_state, write_r))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", cnsector_state, leds_decay_tick, attotime::from_msec(10))
+
+ MCFG_DEFAULT_LAYOUT(layout_cnsector)
+
+ /* no video! */
+
+ /* no sound! */
+MACHINE_CONFIG_END
+
+
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+ROM_START( cnsector )
+ ROM_REGION( 0x0400, "maincpu", 0 )
+ ROM_LOAD( "mp0905bnl_za0379", 0x0000, 0x0400, CRC(201036e9) SHA1(b37fef86bb2bceaf0ac8bb3745b4702d17366914) )
+
+ ROM_REGION( 782, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) )
+ ROM_REGION( 860, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0970_cnsector_mpla.pla", 0, 860, CRC(059f5bb4) SHA1(2653766f9fd74d41d44013bb6f54c0973a6080c9) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0970_cnsector_opla.pla", 0, 352, CRC(7c0bdcd6) SHA1(dade774097e8095dca5deac7b2367d0c701aca51) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0970_cnsector_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
+ROM_END
+
+
+CONS( 1977, cnsector, 0, 0, cnsector, cnsector, driver_device, 0, "Parker Brothers", "Code Name: Sector", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
diff --git a/src/mess/drivers/comp4.c b/src/mess/drivers/comp4.c
index 6259553bfa7..cf882a4a343 100644
--- a/src/mess/drivers/comp4.c
+++ b/src/mess/drivers/comp4.c
@@ -4,25 +4,26 @@
Milton Bradley Comp IV
* TMC0904NL CP0904A (die labeled 4A0970D-04A)
-
- This is a handheld Mastermind game; a code-breaking game where the player
+
+ This is small tabletop Mastermind game; a code-breaking game where the player
needs to find out the correct sequence of colours (numbers in our case).
It is known as Logic 5 in Europe, and as Pythaligoras in Japan.
-
+
Press the R key to start, followed by a set of unique numbers and E.
Refer to the official manual for more information.
TODO:
- - write_r doesn't look right, maybe something missing in cpu emulation
- - layout
+ - MCU clock is unknown
***************************************************************************/
#include "emu.h"
#include "cpu/tms0980/tms0980.h"
-// master clock is cpu internal, the value below is an approximation
+#include "comp4.lh"
+
+// master clock is unknown, the value below is an approximation
#define MASTER_CLOCK (250000)
@@ -38,19 +39,61 @@ public:
required_device<cpu_device> m_maincpu;
required_ioport_array<3> m_button_matrix;
- UINT16 m_r;
UINT16 m_o;
+ UINT16 m_leds_state;
+ UINT8 m_leds_decay[0x10];
+
DECLARE_READ8_MEMBER(read_k);
DECLARE_WRITE16_MEMBER(write_o);
DECLARE_WRITE16_MEMBER(write_r);
+ TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
+ void leds_update();
+
virtual void machine_start();
};
/***************************************************************************
+ LEDs
+
+***************************************************************************/
+
+// The device strobes the outputs very fast, it is unnoticeable to the user.
+// To prevent flickering here, we need to simulate a decay.
+
+// decay time, in steps of 10ms
+#define LEDS_DECAY_TIME 2
+
+void comp4_state::leds_update()
+{
+ for (int i = 0; i < 0x10; i++)
+ {
+ // turn on powered leds
+ if (m_leds_state >> i & 1)
+ m_leds_decay[i] = LEDS_DECAY_TIME;
+
+ // send to output
+ output_set_lamp_value(i, (m_leds_decay[i] != 0) ? 1 : 0);
+ }
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(comp4_state::leds_decay_tick)
+{
+ // slowly turn off unpowered leds
+ for (int i = 0; i < 0x10; i++)
+ if (!(m_leds_state >> i & 1) && m_leds_decay[i])
+ m_leds_decay[i]--;
+
+ leds_update();
+}
+
+
+
+/***************************************************************************
+
I/O
***************************************************************************/
@@ -61,21 +104,27 @@ READ8_MEMBER(comp4_state::read_k)
// read selected button rows
for (int i = 0; i < 3; i++)
- if (m_o & (1 << (i + 1)))
+ if (m_o >> (i+1) & 1)
k |= m_button_matrix[i]->read();
-
+
return k;
}
WRITE16_MEMBER(comp4_state::write_r)
{
- // R..: LEDs
- m_r = data;
+ // LEDs:
+ // R4 R9
+ // R10! R8
+ // R2 R7
+ // R1 R6
+ // R0 R5
+ m_leds_state = data;
+ leds_update();
}
WRITE16_MEMBER(comp4_state::write_o)
{
- // O0?: LEDs (common)
+ // O0: LEDs common (always writes 1)
// O1-O3: input mux
// other bits: N/C
m_o = data;
@@ -90,23 +139,23 @@ WRITE16_MEMBER(comp4_state::write_o)
***************************************************************************/
static INPUT_PORTS_START( comp4 )
- PORT_START("IN.0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("R")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
-
- PORT_START("IN.1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
-
- PORT_START("IN.2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("E")
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+ PORT_START("IN.0") // O1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("R")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+
+ PORT_START("IN.1") // O2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+
+ PORT_START("IN.2") // O3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("E")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
INPUT_PORTS_END
@@ -119,32 +168,27 @@ INPUT_PORTS_END
void comp4_state::machine_start()
{
- m_r = 0;
+ m_leds_state = 0;
+ memset(m_leds_decay, 0, sizeof(m_leds_decay));
m_o = 0;
-
- save_item(NAME(m_r));
+
+ save_item(NAME(m_leds_state));
+ save_item(NAME(m_leds_decay));
save_item(NAME(m_o));
}
-static const UINT16 comp4_output_pla[0x20] =
-{
- // many unused bits, only O0 is actually used as external out
- 0xda, 0x96, 0x9b, 0x97, 0x98, 0x94, 0x99, 0x95,
- 0x9a, 0xa0, 0x94, 0x02, 0x35, 0x4a, 0x41, 0x00,
- 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00,
- 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00
-};
-
-
static MACHINE_CONFIG_START( comp4, comp4_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK)
- MCFG_TMS1XXX_OUTPUT_PLA(comp4_output_pla)
- MCFG_TMS1XXX_READ_K(READ8(comp4_state, read_k))
- MCFG_TMS1XXX_WRITE_O(WRITE16(comp4_state, write_o))
- MCFG_TMS1XXX_WRITE_R(WRITE16(comp4_state, write_r))
+ MCFG_TMS1XXX_READ_K_CB(READ8(comp4_state, read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(comp4_state, write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(comp4_state, write_r))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", comp4_state, leds_decay_tick, attotime::from_msec(10))
+
+ MCFG_DEFAULT_LAYOUT(layout_comp4)
/* no video! */
@@ -161,8 +205,17 @@ MACHINE_CONFIG_END
ROM_START( comp4 )
ROM_REGION( 0x0400, "maincpu", 0 )
- ROM_LOAD( "cp0904a", 0x0000, 0x0400, CRC(c502c8a1) SHA1(f82ff1a85c4849621d32344964d8b2233fc978d0) )
+ ROM_LOAD( "tmc0904nl_cp0904a", 0x0000, 0x0400, CRC(6233ee1b) SHA1(738e109b38c97804b4ec52bed80b00a8634ad453) )
+
+ ROM_REGION( 782, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0970_default_ipla.pla", 0, 782, CRC(e038fc44) SHA1(dfc280f6d0a5828d1bb14fcd59ac29caf2c2d981) )
+ ROM_REGION( 860, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0970_comp4_mpla.pla", 0, 860, CRC(ee9d7d9e) SHA1(25484e18f6a07f7cdb21a07220e2f2a82fadfe7b) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0970_comp4_opla.pla", 0, 352, CRC(a0f887d1) SHA1(3c666663d484d5bed81e1014f8715aab8a3d489f) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0970_comp4_spla.pla", 0, 157, CRC(e5bddd90) SHA1(4b1c6512c70e5bcd23c2dbf0c88cd8aa2c632a10) )
ROM_END
-CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
+CONS( 1977, comp4, 0, 0, comp4, comp4, driver_device, 0, "Milton Bradley", "Comp IV", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
diff --git a/src/mess/drivers/gamate.c b/src/mess/drivers/gamate.c
index 57adbc5a5e9..1495fcc5479 100644
--- a/src/mess/drivers/gamate.c
+++ b/src/mess/drivers/gamate.c
@@ -1,5 +1,7 @@
/******************************************************************************
PeT mess@utanet.at 2007, 2014
+ Peter Wilhelmsen peter.wilhelmsen@gmail.com
+ Morten Shearman Kirkegaard morten+gamate@afdelingp.dk
******************************************************************************/
#include "emu.h"
@@ -15,157 +17,170 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_cart(*this, "cartslot")
-// , m_gfxdecode(*this, "gfxdecode")
+// , m_gfxdecode(*this, "gfxdecode")
, m_io_joy(*this, "JOY")
- , m_palette(*this, "palette")
+ , m_palette(*this, "palette")
+ , m_cart_rom(*this, "cart_rom")
+ , m_bios(*this, "bios")
{ }
DECLARE_PALETTE_INIT(gamate);
- DECLARE_READ8_MEMBER(video_r);
- DECLARE_READ8_MEMBER(pad_r);
- DECLARE_WRITE8_MEMBER(video_w);
- DECLARE_WRITE8_MEMBER(audio_w);
- DECLARE_WRITE8_MEMBER(bios_w);
+ DECLARE_READ8_MEMBER(protection_r);
+ DECLARE_READ8_MEMBER(gamate_cart_protection_r);
+ DECLARE_WRITE8_MEMBER(gamate_cart_protection_w);
+ DECLARE_READ8_MEMBER(gamate_video_r);
+ DECLARE_READ8_MEMBER(gamate_pad_r);
+ DECLARE_WRITE8_MEMBER(gamate_video_w);
+ DECLARE_READ8_MEMBER(gamate_audio_r);
+ DECLARE_WRITE8_MEMBER(gamate_audio_w);
+ DECLARE_WRITE8_MEMBER(gamate_bios_w);
DECLARE_DRIVER_INIT(gamate);
UINT32 screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(gamate_interrupt);
+ TIMER_CALLBACK_MEMBER(gamate_timer);
+ TIMER_CALLBACK_MEMBER(gamate_timer2);
private:
virtual void machine_start();
struct
{
- UINT8 reg[8];
- struct {
- bool write; // else tilemap
- bool page2; // else page1
- UINT8 data[2][0x100][0x20];
- } bitmap;
- struct {
- UINT8 data[32][32];
- } tilemap;
- UINT8 x, y;
+ UINT8 reg[8];
+ struct {
+ bool write;
+ bool page2; // else page1
+ UINT8 ypos, xpos/*tennis*/;
+ UINT8 data[2][0x100][0x20];
+ } bitmap;
+ UINT8 x, y;
+ bool y_increment;
} video;
-// UINT8 m_ports[5];
-// UINT8 m_ram[0x4000];
+ struct {
+ int bit_shifter;
+ UINT8 cartridge_byte;
+ UINT16 address; // in reality something more like short local cartridge address offset
+ bool unprotected;
+ bool failed;
+ } card_protection;
+
required_device<cpu_device> m_maincpu;
required_device<generic_slot_device> m_cart;
-// required_device<gfxdecode_device> m_gfxdecode;
+// required_device<gfxdecode_device> m_gfxdecode;
required_ioport m_io_joy;
required_device<palette_device> m_palette;
+ required_shared_ptr<UINT8> m_cart_rom;
+ required_shared_ptr<UINT8> m_bios;
+ emu_timer *timer1;
+ emu_timer *timer2;
};
-WRITE8_MEMBER( gamate_state::video_w )
+WRITE8_MEMBER( gamate_state::gamate_cart_protection_w )
{
- if (m_maincpu->pc()<0xf000)
- logerror("%.6f %04x video write %04x %02x\n", machine().time().as_double(), m_maincpu->pc(), offset,data);
- video.reg[offset]=data;
switch (offset) {
- case 1: video.bitmap.write=data&0x40;break; // probably y increment
- case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break;
- case 5: video.y=data;break;
- case 7:
- if (video.bitmap.write) {
- if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
- video.bitmap.data[video.bitmap.page2][video.y][video.x]=data;
- else
- logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x);
- video.y++;
- } else {
- if (video.x<ARRAY_LENGTH(video.tilemap.data[0]) && (video.y&0x1f)<ARRAY_LENGTH(video.tilemap.data))
- video.tilemap.data[video.y&0x1f][video.x]=data;
- else
- logerror("%.6f %04x video tilemap %x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x, video.y);
- video.x++;
- }
+ case 0:
+ card_protection.failed= card_protection.failed || ((card_protection.cartridge_byte&0x80)!=0) != ((data&4)!=0);
+ card_protection.bit_shifter++;
+ if (card_protection.bit_shifter>=8) {
+ card_protection.cartridge_byte=m_cart_rom[card_protection.address++];
+ card_protection.bit_shifter=0;
+ }
+ break;
}
}
-
-READ8_MEMBER( gamate_state::video_r )
+READ8_MEMBER( gamate_state::gamate_cart_protection_r )
{
- if (offset!=6) return 0;
- UINT8 data=0;
- if (video.bitmap.write) {
- if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
- data=video.bitmap.data[video.bitmap.page2][video.y][video.x];
- else
- logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x);
- } else {
- if (video.x<ARRAY_LENGTH(video.tilemap.data[0]) && video.y<ARRAY_LENGTH(video.tilemap.data))
- data=video.tilemap.data[video.y][video.x];
- else
- logerror("%.6f video tilemap %x %x invalid\n",machine().time().as_double(),video.x, video.y);
+ UINT8 ret=1;
+ switch (offset) {
+ case 0:
+ ret=(card_protection.cartridge_byte&0x80)?2:0;
+ card_protection.cartridge_byte<<=1;
+ card_protection.bit_shifter++;
+ if (card_protection.bit_shifter>=8) {
+ card_protection.bit_shifter=0;
+ card_protection.cartridge_byte=m_cart_rom[card_protection.address++];
+ card_protection.unprotected=true;
+ if (!card_protection.failed) {
+ } // now protection chip on cartridge activates cartridge chip select on cpu accesses
+ }
+ break;
}
- if (m_maincpu->pc()<0xf000)
- logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data);
- return data;
+ return ret;
}
-WRITE8_MEMBER( gamate_state::audio_w )
+READ8_MEMBER( gamate_state::protection_r ) { return 1; }
+
+WRITE8_MEMBER( gamate_state::gamate_video_w )
{
- // logerror("%.6f audio write %04x %02x\n",timer_get_time(),offset,data);
+ video.reg[offset]=data;
+ switch (offset) {
+ case 1: video.bitmap.write=data&0xc0; // more addressing mode
+ video.y_increment=data&0x40;
+ break;
+ case 2: video.bitmap.xpos=data;break; // at least 7 bits
+ case 3: video.bitmap.ypos=data;break; // at least 7 bits
+ case 4: video.bitmap.page2=data&0x80;video.x=data&0x7f;break;
+ case 5: video.y=data;break;
+ case 7:
+ if (video.bitmap.write) {
+ if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
+ video.bitmap.data[video.bitmap.page2][video.y][video.x]=data;
+ else
+ logerror("%.6f %04x video bitmap x %x invalid\n",machine().time().as_double(), m_maincpu->pc(), video.x);
+ } else {
+ video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)]=data;
+ }
+ if (video.y_increment) video.y++;
+ else video.x++;
+ }
}
-WRITE8_MEMBER( gamate_state::bios_w )
+READ8_MEMBER( gamate_state::gamate_video_r )
{
- UINT8 *memory = memregion("maincpu")->base(); //memory_region (REGION_CPU1);
+ if (offset!=6) return 0;
+ UINT8 data=0;
+ if (video.bitmap.write) {
+ if (video.x<ARRAY_LENGTH(video.bitmap.data[0][0]) /*&& video.y<ARRAY_LENGTH(video.bitmap.data[0])*/)
+ data=video.bitmap.data[video.bitmap.page2][video.y][video.x];
+ else
+ logerror("%.6f video bitmap x %x invalid\n",machine().time().as_double(),video.x);
+ } else {
+ data=video.bitmap.data[0][video.y][video.x&(ARRAY_LENGTH(video.bitmap.data[0][0])-1)];
+ }
+ if (m_maincpu->pc()<0xf000)
+ logerror("%.6f video read %04x %02x\n",machine().time().as_double(),offset, data);
+ return data;
+}
- unsigned short stack=m_maincpu->sp();//cpu_get_reg(M6502_S)|0x100;
- unsigned short address= memory[stack+1]|(memory[stack+2]<<8);
- switch (offset) {
- case 0x12:
- logerror("%.6f bios api %04x %04x string:%04x x:%02x y:%02x\n",
- machine().time().as_double(), offset|0xf000, address,
- memory[0]|(memory[1]<<8), 0, 0);//cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
- break;
- case 0x15:
- logerror("%.6f bios api %04x %04x string:%04x x:%02x y:%02x\n",
- machine().time().as_double(), offset|0xf000, address,
- memory[0]|(memory[1]<<8), 0, 0); //cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
- break;
- case 0x18:
- logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
- memory[0]|(memory[1]<<8) );
- break;
- case 0x1b:
- logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
- memory[0]|(memory[1]<<8) );
- break;
- case 0x1e:
- logerror("%.6f bios api %04x %04x string:%04x\n",machine().time().as_double(), offset|0xf000, address,
- memory[0]|(memory[1]<<8) );
- break;
- case 0x2a: // cube up menu lighting
- logerror("%.6f bios api %04x %04x 1c1d:%04x a:%02x x:%02x y:%02x\n",
- machine().time().as_double(), offset|0xf000, address,
- memory[0x1c]|(memory[0x1d]<<8),
- 0,0,0);//cpu_get_reg(M6502_A), cpu_get_reg(M6502_X), cpu_get_reg(M6502_Y) );
- break;
- default:
- logerror("%.6f bios api %04x %04x\n",machine().time().as_double(), offset|0xf000, address);
- }
+WRITE8_MEMBER( gamate_state::gamate_audio_w )
+{
+ logerror("%.6f %04x audio write %04x %02x\n",machine().time().as_double(),m_maincpu->pc(),offset,data);
}
-READ8_MEMBER( gamate_state::pad_r )
+READ8_MEMBER( gamate_state::gamate_audio_r )
{
- UINT8 data=m_io_joy->read();//readinputport(0);
- // logerror("%.6f pad read %04x %02x\n",timer_get_time(),offset,data);
- return data;
+ logerror("%.6f %04x audio read %04x \n",machine().time().as_double(),m_maincpu->pc(),offset);
+ return 0;
}
-static ADDRESS_MAP_START( gamate_mem, AS_PROGRAM, 8, gamate_state )
-// AM_RANGE(0x4000, 0x7fff) AM_READWRITE(gmaster_io_r, gmaster_io_w)
- AM_RANGE(0x0000, 0x03ff) AM_RAM
- AM_RANGE(0x4000, 0x400d) AM_WRITE(audio_w)
- AM_RANGE(0x4400, 0x4400) AM_READ(pad_r)
-// AM_RANGE(0x5006, 0x5006) AM_READ(video_r)
-// AM_RANGE(0x5000, 0x5007) AM_WRITE(video_w)
- AM_RANGE(0x5000, 0x5007) AM_READWRITE(video_r, video_w)
+READ8_MEMBER( gamate_state::gamate_pad_r )
+{
+ UINT8 data=m_io_joy->read();
+ return data;
+}
- AM_RANGE(0x6000, 0xdfff) AM_ROM
- AM_RANGE(0xf000, 0xffff) AM_ROM
+static ADDRESS_MAP_START( gamate_mem, AS_PROGRAM, 8, gamate_state )
+ AM_RANGE(0x0000, 0x03ff) AM_RAM
+ AM_RANGE(0x4000, 0x400d) AM_READWRITE(gamate_audio_r, gamate_audio_w)
+ AM_RANGE(0x4400, 0x4400) AM_READ(gamate_pad_r)
+ AM_RANGE(0x5000, 0x5007) AM_READWRITE(gamate_video_r, gamate_video_w)
+ AM_RANGE(0x5a00, 0x5a00) AM_READ(protection_r)
+
+ AM_RANGE(0x6000, 0xdfff) AM_ROM AM_SHARE("cart_rom")
+ AM_RANGE(0x6000, 0x6002) AM_READWRITE(gamate_cart_protection_r, gamate_cart_protection_w)
+// AM_RANGE(0x6000, 0xdfff) AM_READWRITE(gamate_cart_r, gamate_cart_w)
+ AM_RANGE(0xf000, 0xffff) AM_ROM AM_SHARE("bios")
ADDRESS_MAP_END
@@ -173,50 +188,48 @@ static INPUT_PORTS_START( gamate )
PORT_START("JOY")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // left?
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // rechts?
+ PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_NAME("A")
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_NAME("B")
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START) PORT_NAME("start/pause")
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_SELECT) PORT_NAME("select")
INPUT_PORTS_END
-#if 0
+#ifdef UNUSED_CODE
static const struct gfx_layout gamate_charlayout =
{
- 4, /* width of object */
- 1, /* height of object */
- 256,/* 256 characters */
- 2, /* bits per pixel */
- { 0,1 }, /* no bitplanes */
- /* x offsets */
- { 0,2,4,6 },
- /* y offsets */
- { 0 },
- 8*1 /* size of 1 object in bits */
+ 4, /* width of object */
+ 1, /* height of object */
+ 256,/* 256 characters */
+ 2, /* bits per pixel */
+ { 0,1 }, /* no bitplanes */
+ /* x offsets */
+ { 0,2,4,6 },
+ /* y offsets */
+ { 0 },
+ 8*1 /* size of 1 object in bits */
};
static const unsigned short gamate_palette[4] =
{
0,1,2,3
};
+
+static GFXDECODE_START( gamate_charlayout )
+ GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 )
+GFXDECODE_END
#endif
/* palette in red, green, blue tribles */
static const unsigned char gamate_colors[4][3] =
{
- { 255,255,255 },
- { 0xa0, 0xa0, 0xa0 },
- { 0x60, 0x60, 0x60 },
- { 0, 0, 0 }
+ { 255,255,255 },
+ { 0xa0, 0xa0, 0xa0 },
+ { 0x60, 0x60, 0x60 },
+ { 0, 0, 0 }
};
-#if 0
-static GFXDECODE_START( gamate_charlayout )
- GFXDECODE_ENTRY( "gfx1", 0x0000, gamate_charlayout, 0, 0x100 )
-GFXDECODE_END
-#endif
-
PALETTE_INIT_MEMBER(gamate_state, gamate)
{
int i;
@@ -245,79 +258,43 @@ static void BlitPlane(UINT16* line, UINT8 plane1, UINT8 plane2)
UINT32 gamate_state::screen_update_gamate(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- int x, y, j;
- for (y=0;y<160;y++) {
- for (x=0, j=0;x<160;x+=8, j++) {
-// for (y=0;y<256;y++) {
-// for (x=0, j=0;x<256;x+=8, j++) {
- UINT8 d1=video.bitmap.data[0][y][j];
- UINT8 d2=video.bitmap.data[1][y][j];
-#if 0
- UINT16 data=PLANES2_2_PACKED(d1, d2);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), (data>>8)&0xff,0,0,0, x, y);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), data&0xff,0,0,0, x+4, y);
-#else
+ int x, y, j;
+ for (y=0;y<160;y++) {
+ for (x=0, j=0;x<160;x+=8, j++) {
+// UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)&0xff][j+video.bitmap.xpos/8];
+// UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)&0xff][j+video.bitmap.xpos/8];
+ UINT8 d1=video.bitmap.data[0][(y+video.bitmap.ypos)%200][j]; // kill shot, tornade
+ UINT8 d2=video.bitmap.data[1][(y+video.bitmap.ypos)%200][j];
BlitPlane(&bitmap.pix16(y, x+4), d1, d2);
BlitPlane(&bitmap.pix16(y, x), d1>>4, d2>>4);
-#endif
- }
- }
- for (y=0; y<32; y++) {
- for (x=0; x<32; x++) {
-#if 0
- UINT8 d=video.tilemap.data[y][x];
- if (d) {
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+1);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+2);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+3);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+4);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+5);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+6);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 256+x*8, y*8+7);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+1);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+2);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+3);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+4);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+5);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+6);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0xff,0,0,0, 260+x*8, y*8+7);
- } else {
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+1);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+2);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+3);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+4);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+5);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+6);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 256+x*8, y*8+7);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+1);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+2);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+3);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+4);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+5);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+6);
- m_gfxdecode->gfx(0)->opaque(bitmap, bitmap.cliprect(), 0,0,0,0, 260+x*8, y*8+7);
- }
-#endif
- }
- }
+ }
+ }
return 0;
}
DRIVER_INIT_MEMBER(gamate_state,gamate)
{
memset(&video, 0, sizeof(video));/* memset(m_ram, 0, sizeof(m_ram));*/
- UINT8 *gfx=memregion("gfx1")->base(); for (int i=0; i<256; i++) gfx[i]=i;
+ UINT8 *gfx=memregion("gfx1")->base(); for (int i=0; i<256; i++) gfx[i]=i;
+ timer1 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer),this));
+ timer2 = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gamate_state::gamate_timer2),this));
}
void gamate_state::machine_start()
{
- if (m_cart->exists())
+ if (m_cart->exists()) {
m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0xdfff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart));
+// m_maincpu->space(AS_PROGRAM).install_read_handler(0x6000, 0x6000, READ8_DELEGATE(gamate_state, gamate_cart_protection_r));
+ }
+ m_bios[0xdf1]=0xea; m_bios[0xdf2]=0xea; // $47 protection readback
+ card_protection.address=0x6005-0x6001;
+ card_protection.bit_shifter=0;
+ card_protection.cartridge_byte=m_cart_rom[card_protection.address++];
+ card_protection.failed=false;
+ card_protection.unprotected=false;
+ timer2->enable(TRUE);
+ timer2->reset(m_maincpu->cycles_to_attotime(1000));
#if 0
save_item(NAME(m_video.data));
save_item(NAME(m_video.index));
@@ -331,14 +308,24 @@ void gamate_state::machine_start()
#endif
}
+TIMER_CALLBACK_MEMBER(gamate_state::gamate_timer)
+{
+ m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
+ timer1->enable(FALSE);
+}
+
+TIMER_CALLBACK_MEMBER(gamate_state::gamate_timer2)
+{
+ m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
+ timer1->enable(TRUE);
+ timer1->reset(m_maincpu->cycles_to_attotime(10/* cycles short enought to clear irq line early enough*/));
+ timer2->enable(TRUE);
+ timer2->reset(m_maincpu->cycles_to_attotime(40000));
+}
+
INTERRUPT_GEN_MEMBER(gamate_state::gamate_interrupt)
{
-// m_maincpu->set_input_line(UPD7810_INTFE1, ASSERT_LINE);
- static bool state=false;
-// m_maincpu->set_input_line(M6502_IRQ_LINE, state?ASSERT_LINE: CLEAR_LINE);
- state=!state;
-// cpu_set_irq_line(0, M6502_INT_IRQ, PULSE_LINE);
}
static MACHINE_CONFIG_START( gamate, gamate_state )
@@ -348,36 +335,37 @@ static MACHINE_CONFIG_START( gamate, gamate_state )
MCFG_SCREEN_ADD("screen", LCD)
MCFG_SCREEN_REFRESH_RATE(60)
-#if 0
- MCFG_SCREEN_SIZE(512, 256)
- MCFG_SCREEN_VISIBLE_AREA(0, 512-1, 0, 256-1)
+#ifdef SHOW_TILEMAP
+ MCFG_SCREEN_SIZE(256, 152+256)
+ MCFG_SCREEN_VISIBLE_AREA(0, 256-1, 0, 152+256-1)
#else
- MCFG_SCREEN_SIZE(160, 160)
- MCFG_SCREEN_VISIBLE_AREA(0, 160-1, 0, 160-1)
+ MCFG_SCREEN_SIZE(160, 152)
+ MCFG_SCREEN_VISIBLE_AREA(0, 160-1, 0, 152-1)
#endif
MCFG_SCREEN_UPDATE_DRIVER(gamate_state, screen_update_gamate)
MCFG_SCREEN_PALETTE("palette")
-// MCFG_GFXDECODE_ADD("gfxdecode", "palette", gamate )
+// MCFG_GFXDECODE_ADD("gfxdecode", "palette", gamate )
MCFG_PALETTE_ADD("palette", ARRAY_LENGTH(gamate_colors))
-// MCFG_PALETTE_INDIRECT_ENTRIES(4)
+// MCFG_PALETTE_INDIRECT_ENTRIES(4)
MCFG_PALETTE_INIT_OWNER(gamate_state, gamate)
MCFG_DEFAULT_LAYOUT(layout_lcd)
MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_linear_slot, "gamate_cart")
MCFG_GENERIC_MANDATORY
- MCFG_SOFTWARE_LIST_ADD("cart_list", "gamate")
+ MCFG_SOFTWARE_LIST_ADD("cart_list","gamate")
MACHINE_CONFIG_END
ROM_START(gamate)
ROM_REGION(0x10000,"maincpu", 0)
- ROM_LOAD("gamate.bin", 0xf000, 0x1000, BAD_DUMP CRC(b8bf539b) SHA1(d00cb43b8a4cb0cc7fea06bee5f08490a71f5690) )
-// ROM_LOAD("gamate.bin", 0xf000, 0x1000, CRC(b8bf539b) SHA1(d00cb43b8a4cb0cc7fea06bee5f08490a71f5690) )
- ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
+ ROM_LOAD("gamate_bios_umc.bin", 0xf000, 0x1000, CRC(07090415) SHA1(ea449dc607601f9a68d855ad6ab53800d2e99297) )
+ ROM_REGION(0x100,"gfx1", ROMREGION_ERASEFF)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
-CONS( 19??, gamate, 0, 0, gamate, gamate, gamate_state, gamate, "Bit Corp", "Gamate", GAME_NOT_WORKING | GAME_NO_SOUND)
+CONS( 19??, gamate, 0, 0, gamate, gamate, gamate_state, gamate, "Bit Corp", "Gamate", GAME_NO_SOUND)
+
+
diff --git a/src/mess/drivers/leapster.c b/src/mess/drivers/leapster.c
index 4ecebe4b2fe..afa79907a65 100644
--- a/src/mess/drivers/leapster.c
+++ b/src/mess/drivers/leapster.c
@@ -207,6 +207,7 @@ PCB - LEAPSTER-TV:
#include "emu.h"
#include "bus/generic/slot.h"
#include "bus/generic/carts.h"
+#include "cpu/arcompact/arcompact.h"
class leapster_state : public driver_device
@@ -247,7 +248,7 @@ DEVICE_IMAGE_LOAD_MEMBER( leapster_state, leapster_cart )
{
UINT32 size = m_cart->common_get_size("rom");
- m_cart->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->rom_alloc(size, GENERIC_ROM32_WIDTH, ENDIANNESS_LITTLE);
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
return IMAGE_INIT_PASS;
@@ -257,17 +258,25 @@ void leapster_state::machine_start()
{
astring region_tag;
m_cart_rom = memregion(region_tag.cpy(m_cart->tag()).cat(GENERIC_ROM_REGION_TAG));
+ membank("cartrom")->set_base(m_cart_rom->base());
}
void leapster_state::machine_reset()
{
}
+static ADDRESS_MAP_START( leapster_map, AS_PROGRAM, 32, leapster_state )
+ AM_RANGE(0x00000000, 0x001fffff) AM_ROM AM_MIRROR(0x40000000) // pointers in the bios region seem to be to the 40xxxxxx region, either we mirror there or something (real bios?) is acutally missing
+ AM_RANGE(0x80000000, 0x807fffff) AM_ROMBANK("cartrom") // game ROM pointers are all to the 80xxxxxx region, so I assume it maps here
+ADDRESS_MAP_END
static MACHINE_CONFIG_START( leapster, leapster_state )
/* basic machine hardware */
- // CPU is ArcTangent A5
+ // CPU is ArcTangent-A5 '5.1' (ARCompact core)
+ MCFG_CPU_ADD("maincpu", ARCA5, 96000000/10)
+ MCFG_CPU_PROGRAM_MAP(leapster_map)
+
/* video hardware */
MCFG_SCREEN_ADD("screen", LCD)
diff --git a/src/mess/drivers/mc1000.c b/src/mess/drivers/mc1000.c
index 20bf97740d9..e543d46a9bb 100644
--- a/src/mess/drivers/mc1000.c
+++ b/src/mess/drivers/mc1000.c
@@ -453,6 +453,8 @@ static MACHINE_CONFIG_START( mc1000, mc1000_state )
MCFG_CASSETTE_ADD("cassette")
MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED)
+ MCFG_SOFTWARE_LIST_ADD("cass_list", "mc1000_cass")
+
MCFG_CENTRONICS_ADD(CENTRONICS_TAG, centronics_devices, "printer")
MCFG_CENTRONICS_BUSY_HANDLER(WRITELINE(mc1000_state, write_centronics_busy))
diff --git a/src/mess/drivers/megadriv.c b/src/mess/drivers/megadriv.c
index 6758b97fc10..4602960d55b 100644
--- a/src/mess/drivers/megadriv.c
+++ b/src/mess/drivers/megadriv.c
@@ -773,16 +773,16 @@ ROM_START( megacdj )
ROM_SYSTEM_BIOS(0, "v100s", "v1.00S")
ROMX_LOAD( "mpr-14088h.bin", 0x000000, 0x020000, CRC(3773d5aa) SHA1(bbf729a1aaa1667b783749299e1ad932aaf5f253), ROM_BIOS(1) | ROM_GROUPWORD | ROM_REVERSE)
/* Confirmed by ElBarto */
- ROM_SYSTEM_BIOS(1, "v100g", "v1.00g")
+ ROM_SYSTEM_BIOS(1, "v100g", "v1.00G")
ROMX_LOAD( "epr-14088b.bin", 0x000000, 0x020000, CRC(69ed6ccd) SHA1(27d11c3836506f01ee81cd142c0cd8b51abebbd2), ROM_BIOS(2) | ROM_GROUPWORD | ROM_REVERSE)
/* Confirmed by ElBarto */
ROM_SYSTEM_BIOS(2, "v100l", "v1.00L")
ROMX_LOAD( "mpr-14088c.bin", 0x000000, 0x020000, CRC(03134289) SHA1(d60cb5a53f26d6b13e354bc149217587f2301718), ROM_BIOS(3) | ROM_GROUPWORD | ROM_REVERSE)
/* Confirmed by ElBarto */
- ROM_SYSTEM_BIOS(3, "v100o", "v1.00o")
+ ROM_SYSTEM_BIOS(3, "v100o", "v1.00O")
ROMX_LOAD( "epr-14088d.bin", 0x000000, 0x020000, CRC(dfa95ee9) SHA1(e13666c76fa0a2e94e2f651b26b0fd625bf55f07), ROM_BIOS(4) | ROM_GROUPWORD | ROM_REVERSE)
- ROM_SYSTEM_BIOS(4, "v100p", "v1.00P")
- ROMX_LOAD( "megacd_model1_bios_1_00p_j.bin", 0x000000, 0x020000, CRC(9d2da8f2) SHA1(4846f448160059a7da0215a5df12ca160f26dd69), ROM_BIOS(5) )
+ ROM_SYSTEM_BIOS(4, "v100p", "v1.00P") // CRC: e2e70bc8 when byteswapped
+ ROMX_LOAD( "epr-14088e.bin", 0x000000, 0x020000, CRC(9d2da8f2) SHA1(4846f448160059a7da0215a5df12ca160f26dd69), ROM_BIOS(5) )
ROM_END
/* Asia bios, when run in USA region will show :
diff --git a/src/mess/drivers/merlin.c b/src/mess/drivers/merlin.c
index 7934b30c4b8..258e84ea29d 100644
--- a/src/mess/drivers/merlin.c
+++ b/src/mess/drivers/merlin.c
@@ -1,8 +1,10 @@
+// license:BSD-3-Clause
+// copyright-holders:Wilbert Pol, hap
/***************************************************************************
Parker Bros Merlin handheld computer game
* TMS1100NLL MP3404A-N2 (has internal ROM)
-
+
To start a game, press NEW GAME, followed by a number:
1: Tic-Tac-Toe
2: Music Machine
@@ -10,15 +12,15 @@
4: Blackjack 13
5: Magic Square
6: Mindbender
-
+
Refer to the official manual for more information on the games.
-
-
+
+
Other handhelds assumed to be on similar hardware:
- Dr. Smith - by Tomy, released in Japan (basically a white version of Merlin,
let's assume for now that the ROM contents is identical)
- Master Merlin
-
+
Another sequel, called Split Second, looks like different hardware.
@@ -45,7 +47,7 @@ public:
merlin_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
- m_button_matrix(*this, "O"),
+ m_button_matrix(*this, "IN"),
m_speaker(*this, "speaker")
{ }
@@ -70,36 +72,13 @@ protected:
***************************************************************************/
-/* The keypad is a 4*4 matrix, connected like so:
-
- +----+ +----+ +----+ +----+
-O0 o---| R0 |--| R1 |--| R2 |--| R3 |
- +----+ +----+ +----+ +----+
- | | | |
- +----+ +----+ +----+ +----+
-O1 o---| R4 |--| R5 |--| R6 |--| R7 |
- +----+ +----+ +----+ +----+
- | | | |
- +----+ +----+ +----+ +----+
-O2 o---| R8 |--| R9 |--|R10 |--| SG |
- +----+ +----+ +----+ +----+
- | | | |
- | +----+ +----+ +----+
-O3 o------+----| CT |--| NG |--| HM |
- | +----+ +----+ +----+
- | | | |
- o o o o
- K1 K2 K8 K4
-
-SG = same game, CT = comp turn, NG = new game, HM = hit me */
-
READ8_MEMBER(merlin_state::read_k)
{
UINT8 k = 0;
-
+
// read selected button rows
for (int i = 0; i < 4; i++)
- if (m_o & (1 << i))
+ if (m_o >> i & 1)
k |= m_button_matrix[i]->read();
return k;
@@ -143,29 +122,29 @@ WRITE16_MEMBER(merlin_state::write_r)
***************************************************************************/
static INPUT_PORTS_START( merlin )
- PORT_START("O.0")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
-
- PORT_START("O.1")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
-
- PORT_START("O.2")
- PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
-
- PORT_START("O.3")
+ PORT_START("IN.0") // O0
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("Button 0")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("Button 1")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON4) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("Button 3")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON3) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("Button 2")
+
+ PORT_START("IN.1") // O1
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON5) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("Button 4")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON6) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("Button 5")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON8) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("Button 7")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON7) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("Button 6")
+
+ PORT_START("IN.2") // O2
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON9) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("Button 8")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON10) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("Button 9")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON12) PORT_CODE(KEYCODE_S) PORT_NAME("Same Game")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON11) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("Button 10")
+
+ PORT_START("IN.3") // O3
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_UNUSED)
- PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
- PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
- PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_N) PORT_NAME("New Game")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON13) PORT_CODE(KEYCODE_C) PORT_NAME("Comp Turn")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_BUTTON15) PORT_CODE(KEYCODE_H) PORT_NAME("Hit Me")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_BUTTON14) PORT_CODE(KEYCODE_N) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("New Game")
INPUT_PORTS_END
@@ -200,9 +179,9 @@ static MACHINE_CONFIG_START( merlin, merlin_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", TMS1100, MERLIN_RC_CLOCK)
MCFG_TMS1XXX_OUTPUT_PLA(merlin_output_pla)
- MCFG_TMS1XXX_READ_K(READ8( merlin_state, read_k))
- MCFG_TMS1XXX_WRITE_O(WRITE16( merlin_state, write_o))
- MCFG_TMS1XXX_WRITE_R(WRITE16( merlin_state, write_r))
+ MCFG_TMS1XXX_READ_K_CB(READ8( merlin_state, read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16( merlin_state, write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16( merlin_state, write_r))
MCFG_DEFAULT_LAYOUT(layout_merlin)
@@ -230,6 +209,11 @@ ROM_START( merlin )
// 0x5E to 0x1E to make 'Music Machine' working.
// The hashes below are from the manually changed dump
ROM_LOAD( "mp3404", 0x0000, 0x800, BAD_DUMP CRC(7515a75d) SHA1(76ca3605d3fde1df62f79b9bb1f534c2a2ae0229) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, BAD_DUMP CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // not verified
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1100_merlin_opla.pla", 0, 365, NO_DUMP )
ROM_END
diff --git a/src/mess/drivers/microvsn.c b/src/mess/drivers/microvsn.c
index 6b73f81c454..ef3e4453ae5 100644
--- a/src/mess/drivers/microvsn.c
+++ b/src/mess/drivers/microvsn.c
@@ -655,9 +655,9 @@ static MACHINE_CONFIG_START( microvision, microvision_state )
MCFG_CPU_IO_MAP( microvision_8021_io )
MCFG_CPU_ADD("maincpu2", TMS1100, 500000) // most games seem to be running at approximately this speed
MCFG_TMS1XXX_OUTPUT_PLA( microvision_output_pla_0 )
- MCFG_TMS1XXX_READ_K( READ8( microvision_state, tms1100_read_k ) )
- MCFG_TMS1XXX_WRITE_O( WRITE16( microvision_state, tms1100_write_o ) )
- MCFG_TMS1XXX_WRITE_R( WRITE16( microvision_state, tms1100_write_r ) )
+ MCFG_TMS1XXX_READ_K_CB( READ8( microvision_state, tms1100_read_k ) )
+ MCFG_TMS1XXX_WRITE_O_CB( WRITE16( microvision_state, tms1100_write_o ) )
+ MCFG_TMS1XXX_WRITE_R_CB( WRITE16( microvision_state, tms1100_write_r ) )
MCFG_SCREEN_ADD("screen", LCD)
MCFG_SCREEN_REFRESH_RATE(60)
@@ -695,6 +695,10 @@ MACHINE_CONFIG_END
ROM_START( microvsn )
ROM_REGION( 0x800, "maincpu1", ROMREGION_ERASE00 )
ROM_REGION( 0x800, "maincpu2", ROMREGION_ERASE00 )
+ ROM_REGION( 867, "maincpu2:mpla", 0 )
+ ROM_LOAD( "tms1100_default_mpla.pla", 0, 867, CRC(62445fc9) SHA1(d6297f2a4bc7a870b76cc498d19dbb0ce7d69fec) ) // verified for: pinball, blockbuster, bowling
+
+ ROM_REGION( 365, "maincpu2:opla", ROMREGION_ERASE00 )
ROM_END
diff --git a/src/mess/drivers/ngen.c b/src/mess/drivers/ngen.c
index f70dfa31bcc..1f147a0da86 100644
--- a/src/mess/drivers/ngen.c
+++ b/src/mess/drivers/ngen.c
@@ -4,6 +4,51 @@
10-11-14 - Skeleton driver
+ Interrupts based on patents:
+ level 1 - SIO
+ level 3 - timer (from PIT, presumably channel 0? Patent says "channel 3")
+ level 4 - "interrupt detector" - keyboard, printer, RTC
+ level 7 - floppy/hard disk
+
+ To get to "menu mode", press Space quickly after reset (might need good timing)
+ The bootstrap ROM version number is displayed, along with "B,D,L,M,P,T:"
+ You can press one of these keys for the following tests:
+ B: Bootstrap
+ Loads the system image file (from disk or master workstation)
+ D: Dump
+ RAM contents are dumped to a local disk drive or master workstation
+ L: Load
+ Loads the system image file, then enters the Panel Debugger. Exiting the Panel
+ Debugger will continue execution of the system image
+ M: Memory Test
+ Continuously performs the Memory Test until the system is reset.
+ P: Panel Debugger
+ Enters the Panel Debugger
+ T: Type of Operating System
+ Gives an "OS:" prompt, at which you can enter the number of the system image to
+ load at the master workstation.
+
+ Panel Debugger:
+ - Open/Modify RAM
+ Enter an address (seg:off) followed by a forward-slash, the contents of this word will
+ appear, you can enter a value to set it to, or just press Next (default: Enter) to leave
+ it as is. It will then go on to the next word. Pressing Return (scan code unknown
+ currently) will return to the debugger prompt.
+ - Open/Modify Register
+ Enter the register only, and the contents will appear, you can leave it or alter it (you
+ must enter all digits (eg: 0A03 if you're modifying DX) then press Return.
+ - I/O to or from a port
+ Input: Address (segment is ignored, and not required) followed by I, a byte is read from
+ the port defined by the offset, and the byte is displayed.
+ Output: Address followed by O, you are now prompted with an '='. Enter the byte to send
+ to the port, and press Return.
+ - Set Haltpoint:
+ Enter an address (seg:off) followed by H. Sets a haltpoint at the specified address. Does
+ not work for ROM addresses. Only one allowed at a time. Haltpoint info is stored at
+ 0000:01F0. Uses a software interrupt (INT 7C), rather than INT 3.
+
+ To start or continue from the current address, enter P.
+ To start from a specific address, enter the address (seg:off) followed by a G.
*/
#include "emu.h"
@@ -16,6 +61,8 @@
#include "machine/pit8253.h"
#include "machine/z80dart.h"
#include "bus/rs232/rs232.h"
+#include "machine/ngen_kb.h"
+#include "machine/clock.h"
class ngen_state : public driver_device
{
@@ -36,21 +83,35 @@ public:
DECLARE_WRITE_LINE_MEMBER(pit_out0_w);
DECLARE_WRITE_LINE_MEMBER(pit_out1_w);
DECLARE_WRITE_LINE_MEMBER(pit_out2_w);
+ DECLARE_WRITE_LINE_MEMBER(cpu_timer_w);
+ DECLARE_WRITE_LINE_MEMBER(timer_clk_out);
DECLARE_WRITE16_MEMBER(cpu_peripheral_cb);
DECLARE_WRITE16_MEMBER(peripheral_w);
DECLARE_READ16_MEMBER(peripheral_r);
DECLARE_WRITE16_MEMBER(port00_w);
DECLARE_READ16_MEMBER(port00_r);
DECLARE_WRITE_LINE_MEMBER(dma_hrq_changed);
+ DECLARE_WRITE_LINE_MEMBER(dma_eop_changed);
DECLARE_WRITE_LINE_MEMBER(dack0_w);
DECLARE_WRITE_LINE_MEMBER(dack1_w);
DECLARE_WRITE_LINE_MEMBER(dack2_w);
DECLARE_WRITE_LINE_MEMBER(dack3_w);
- DECLARE_READ8_MEMBER(dma_read_byte);
- DECLARE_WRITE8_MEMBER(dma_write_byte);
+ DECLARE_READ8_MEMBER(dma_read_word);
+ DECLARE_WRITE8_MEMBER(dma_write_word);
MC6845_UPDATE_ROW(crtc_update_row);
+ // TODO: sort out what devices use which channels
+ DECLARE_READ8_MEMBER( dma_0_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
+ DECLARE_READ8_MEMBER( dma_1_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
+ DECLARE_READ8_MEMBER( dma_2_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
+ DECLARE_READ8_MEMBER( dma_3_dack_r ) { UINT16 ret = 0xffff; m_dma_high_byte = ret & 0xff00; return ret; }
+ DECLARE_WRITE8_MEMBER( dma_0_dack_w ){ popmessage("IOW: data %02x",data); }
+ DECLARE_WRITE8_MEMBER( dma_1_dack_w ){ }
+ DECLARE_WRITE8_MEMBER( dma_2_dack_w ){ }
+ DECLARE_WRITE8_MEMBER( dma_3_dack_w ){ }
protected:
+ virtual void machine_reset();
+
private:
required_device<cpu_device> m_maincpu;
required_device<mc6845_device> m_crtc;
@@ -71,25 +132,39 @@ private:
UINT16 m_periph141;
UINT8 m_dma_offset[4];
INT8 m_dma_channel;
+ UINT16 m_dma_high_byte;
+ UINT16 m_control;
};
WRITE_LINE_MEMBER(ngen_state::pit_out0_w)
{
- //m_pic->ir0_w(state);
- logerror("80186 Timer 1 state %i\n",state);
+ m_pic->ir3_w(state); // Timer interrupt
+ popmessage("PIT Timer 0 state %i\n",state);
}
WRITE_LINE_MEMBER(ngen_state::pit_out1_w)
{
- logerror("PIT Timer 1 state %i\n",state);
+ popmessage("PIT Timer 1 state %i\n",state);
+ m_iouart->rxcb_w(state);
+ m_iouart->txcb_w(state); // channels in the correct order?
}
WRITE_LINE_MEMBER(ngen_state::pit_out2_w)
{
m_iouart->rxca_w(state);
- m_iouart->rxcb_w(state);
m_iouart->txca_w(state);
- m_iouart->txcb_w(state);
+ //logerror("PIT Timer 2 state %i\n",state);
+}
+
+WRITE_LINE_MEMBER(ngen_state::cpu_timer_w)
+{
+ logerror("80186 Timer 1 state %i\n",state);
+}
+
+WRITE_LINE_MEMBER(ngen_state::timer_clk_out)
+{
+ m_viduart->write_rxc(state); // Keyboard UART Rx/Tx clocks
+ m_viduart->write_txc(state);
}
WRITE16_MEMBER(ngen_state::cpu_peripheral_cb)
@@ -184,10 +259,12 @@ WRITE16_MEMBER(ngen_state::peripheral_w)
m_crtc->register_w(space,0,data & 0xff);
break;
case 0x146:
- logerror("Video write offset 0x146 data %04x mask %04x\n",data,mem_mask);
+ if(mem_mask & 0x00ff)
+ m_viduart->data_w(space,0,data & 0xff);
break;
case 0x147:
- //logerror("Video write offset 0x147 data %04x mask %04x\n",data,mem_mask);
+ if(mem_mask & 0x00ff)
+ m_viduart->control_w(space,0,data & 0xff);
break;
case 0x1a0: // serial?
logerror("(PC=%06x) Serial(?) 0x1a0 write offset %04x data %04x mask %04x\n",m_maincpu->device_t::safe_pc(),offset,data,mem_mask);
@@ -257,15 +334,16 @@ READ16_MEMBER(ngen_state::peripheral_r)
ret = m_crtc->register_r(space,0);
break;
case 0x146:
+ if(mem_mask & 0x00ff)
+ ret = m_viduart->data_r(space,0);
break;
- case 0x147: // definitely video related, maybe UART sending data to the monitor?
- // expects bit 0 to be set (Video ready signal?)
- ret = 0;
- ret |= 1;
+ case 0x147: // keyboard UART
+ // expects bit 0 to be set (UART transmit ready)
+ if(mem_mask & 0x00ff)
+ ret = m_viduart->status_r(space,0);
break;
- case 0x1a0: // status?
- ret = 0;
- ret |= 0x02; // end of DMA transfer?
+ case 0x1a0: // I/O control register?
+ ret = m_control; // end of DMA transfer? (maybe a per-channel EOP?) Bit 6 is set during a transfer?
break;
case 0x1b1:
ret = 0;
@@ -299,6 +377,17 @@ WRITE_LINE_MEMBER( ngen_state::dma_hrq_changed )
m_maincpu->set_input_line(INPUT_LINE_HALT, state ? ASSERT_LINE : CLEAR_LINE);
}
+WRITE_LINE_MEMBER( ngen_state::dma_eop_changed )
+{
+ if(m_dma_channel == 0)
+ {
+ if(state)
+ m_control |= 0x02;
+ else
+ m_control &= ~0x02;
+ }
+}
+
void ngen_state::set_dma_channel(int channel, int state)
{
if(!state)
@@ -312,29 +401,30 @@ WRITE_LINE_MEMBER( ngen_state::dack1_w ) { set_dma_channel(1, state); }
WRITE_LINE_MEMBER( ngen_state::dack2_w ) { set_dma_channel(2, state); }
WRITE_LINE_MEMBER( ngen_state::dack3_w ) { set_dma_channel(3, state); }
-READ8_MEMBER(ngen_state::dma_read_byte)
+READ8_MEMBER(ngen_state::dma_read_word)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
- UINT8 result;
+ UINT16 result;
if(m_dma_channel == -1)
return 0xff;
- offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFF0000;
+ offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFE0000;
- result = prog_space.read_byte(page_offset + offset);
- popmessage("DMA byte address %06x read %02x\n",page_offset+offset,result);
- return result;
+ result = prog_space.read_word(page_offset + (offset << 1));
+ m_dma_high_byte = result & 0xFF00;
+ popmessage("DMA byte address %06x read %04x\n",page_offset+(offset<<1),result);
+ return result & 0xff;
}
-WRITE8_MEMBER(ngen_state::dma_write_byte)
+WRITE8_MEMBER(ngen_state::dma_write_word)
{
address_space& prog_space = m_maincpu->space(AS_PROGRAM); // get the right address space
if(m_dma_channel == -1)
return;
- offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFF0000;
+ offs_t page_offset = (((offs_t) m_dma_offset[m_dma_channel]) << 16) & 0xFE0000;
- prog_space.write_byte(page_offset + offset, data);
- popmessage("DMA byte address %06x write %02x\n",page_offset+offset,data);
+ prog_space.write_word(page_offset + (offset << 1), data);
+ popmessage("DMA byte address %06x write %04x\n",page_offset+(offset<<1), m_dma_high_byte | data);
}
@@ -355,6 +445,13 @@ MC6845_UPDATE_ROW( ngen_state::crtc_update_row )
}
}
+void ngen_state::machine_reset()
+{
+ m_control = 0;
+ m_viduart->write_dsr(0);
+ m_viduart->write_cts(0);
+}
+
static ADDRESS_MAP_START( ngen_mem, AS_PROGRAM, 16, ngen_state )
AM_RANGE(0x00000, 0xf7fff) AM_RAM
AM_RANGE(0xf8000, 0xf9fff) AM_RAM AM_SHARE("vram")
@@ -385,32 +482,45 @@ ADDRESS_MAP_END
static INPUT_PORTS_START( ngen )
INPUT_PORTS_END
+static SLOT_INTERFACE_START(keyboard)
+ SLOT_INTERFACE("ngen", NGEN_KEYBOARD)
+SLOT_INTERFACE_END
+
static MACHINE_CONFIG_START( ngen, ngen_state )
// basic machine hardware
MCFG_CPU_ADD("maincpu", I80186, XTAL_16MHz / 2)
MCFG_CPU_PROGRAM_MAP(ngen_mem)
MCFG_CPU_IO_MAP(ngen_io)
MCFG_80186_CHIP_SELECT_CB(WRITE16(ngen_state, cpu_peripheral_cb))
- MCFG_80186_TMROUT1_HANDLER(WRITELINE(ngen_state, pit_out0_w))
+ MCFG_80186_TMROUT1_HANDLER(WRITELINE(ngen_state, cpu_timer_w))
MCFG_PIC8259_ADD( "pic", INPUTLINE("maincpu", 0), VCC, NULL )
MCFG_DEVICE_ADD("pit", PIT8254, 0)
- MCFG_PIT8253_CLK0(XTAL_14_7456MHz/8) // correct?
- MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ngen_state, pit_out0_w))
- MCFG_PIT8253_CLK1(XTAL_14_7456MHz/8)
- MCFG_PIT8253_OUT1_HANDLER(WRITELINE(ngen_state, pit_out1_w))
- MCFG_PIT8253_CLK2(XTAL_14_7456MHz/8)
+ MCFG_PIT8253_CLK0(78120/4) // 19.53kHz, /4 of the CPU timer output?
+ MCFG_PIT8253_OUT0_HANDLER(WRITELINE(ngen_state, pit_out0_w)) // RS232 channel B baud rate
+ MCFG_PIT8253_CLK1(XTAL_14_7456MHz/12) // correct? - based on patent
+ MCFG_PIT8253_OUT1_HANDLER(WRITELINE(ngen_state, pit_out1_w)) // RS232 channel A baud rate
+ MCFG_PIT8253_CLK2(XTAL_14_7456MHz/12)
MCFG_PIT8253_OUT2_HANDLER(WRITELINE(ngen_state, pit_out2_w))
MCFG_DEVICE_ADD("dmac", AM9517A, XTAL_14_7456MHz / 3) // NEC D8237A, divisor unknown
MCFG_I8237_OUT_HREQ_CB(WRITELINE(ngen_state, dma_hrq_changed))
- MCFG_I8237_IN_MEMR_CB(READ8(ngen_state, dma_read_byte))
- MCFG_I8237_OUT_MEMW_CB(WRITE8(ngen_state, dma_write_byte))
+ MCFG_I8237_OUT_EOP_CB(WRITELINE(ngen_state, dma_eop_changed))
+ MCFG_I8237_IN_MEMR_CB(READ8(ngen_state, dma_read_word)) // DMA is always 16-bit
+ MCFG_I8237_OUT_MEMW_CB(WRITE8(ngen_state, dma_write_word))
MCFG_I8237_OUT_DACK_0_CB(WRITELINE(ngen_state, dack0_w))
MCFG_I8237_OUT_DACK_1_CB(WRITELINE(ngen_state, dack1_w))
MCFG_I8237_OUT_DACK_2_CB(WRITELINE(ngen_state, dack2_w))
MCFG_I8237_OUT_DACK_3_CB(WRITELINE(ngen_state, dack3_w))
+ MCFG_I8237_IN_IOR_0_CB(READ8(ngen_state, dma_0_dack_r))
+ MCFG_I8237_IN_IOR_1_CB(READ8(ngen_state, dma_1_dack_r))
+ MCFG_I8237_IN_IOR_2_CB(READ8(ngen_state, dma_2_dack_r))
+ MCFG_I8237_IN_IOR_3_CB(READ8(ngen_state, dma_3_dack_r))
+ MCFG_I8237_OUT_IOW_0_CB(WRITE8(ngen_state, dma_0_dack_w))
+ MCFG_I8237_OUT_IOW_1_CB(WRITE8(ngen_state, dma_1_dack_w))
+ MCFG_I8237_OUT_IOW_2_CB(WRITE8(ngen_state, dma_2_dack_w))
+ MCFG_I8237_OUT_IOW_3_CB(WRITE8(ngen_state, dma_3_dack_w))
// I/O board
MCFG_UPD7201_ADD("iouart",0,0,0,0,0) // clocked by PIT channel 2?
@@ -447,7 +557,15 @@ static MACHINE_CONFIG_START( ngen, ngen_state )
MCFG_MC6845_UPDATE_ROW_CB(ngen_state, crtc_update_row)
MCFG_VIDEO_SET_SCREEN("screen")
- MCFG_DEVICE_ADD("videouart", I8251, 19980000 / 9) // divisor unknown
+ // keyboard UART (patent says i8251 is used for keyboard communications, it is located on the video board)
+ MCFG_DEVICE_ADD("videouart", I8251, 0) // main clock unknown, Rx/Tx clocks are 19.53kHz
+ MCFG_I8251_TXEMPTY_HANDLER(DEVWRITELINE("pic",pic8259_device,ir4_w))
+ MCFG_I8251_TXD_HANDLER(DEVWRITELINE("keyboard", rs232_port_device, write_txd))
+ MCFG_RS232_PORT_ADD("keyboard", keyboard, "ngen")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("videouart", i8251_device, write_rxd))
+
+ MCFG_DEVICE_ADD("refresh_clock", CLOCK, 19200*16) // should be 19530Hz
+ MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(ngen_state,timer_clk_out))
MACHINE_CONFIG_END
@@ -464,7 +582,7 @@ MACHINE_CONFIG_END
ROM_START( ngen )
ROM_REGION( 0x2000, "bios", 0)
- ROM_LOAD16_BYTE( "72-00414_80186_cpu.bin", 0x000000, 0x001000, CRC(e1387a03) SHA1(ddca4eba67fbf8b731a8009c14f6b40edcbc3279) )
+ ROM_LOAD16_BYTE( "72-00414_80186_cpu.bin", 0x000000, 0x001000, CRC(e1387a03) SHA1(ddca4eba67fbf8b731a8009c14f6b40edcbc3279) ) // bootstrap ROM v8.4
ROM_LOAD16_BYTE( "72-00415_80186_cpu.bin", 0x000001, 0x001000, CRC(a6dde7d9) SHA1(b4d15c1bce31460ab5b92ff43a68c15ac5485816) )
ROM_END
diff --git a/src/mess/drivers/simon.c b/src/mess/drivers/simon.c
index 48d1d4b2545..7453fe7d006 100644
--- a/src/mess/drivers/simon.c
+++ b/src/mess/drivers/simon.c
@@ -3,14 +3,14 @@
/***************************************************************************
Milton Bradley Simon
-
+
Revision A hardware:
* TMS1000 (has internal ROM), DS75494 lamp driver
-
+
Newer revisions have a smaller 16-pin MB4850 chip instead of the TMS1000.
This one has been decapped too, but we couldn't find an internal ROM.
It is possibly a cost-reduced custom ASIC specifically for Simon.
-
+
Other games assumed to be on similar hardware:
- Pocket Simon, but there's a chance it only exists with MB4850 chip
- Super Simon (TMS1100)
@@ -61,12 +61,12 @@ public:
READ8_MEMBER(simon_state::read_k)
{
UINT8 k = 0;
-
+
// read selected button rows
for (int i = 0; i < 4; i++)
{
- static int r[4] = { 0, 1, 2, 9 };
- if (m_r & (1 << r[i]))
+ const int ki[4] = { 0, 1, 2, 9 };
+ if (m_r >> ki[i] & 1)
k |= m_button_matrix[i]->read();
}
@@ -82,7 +82,7 @@ WRITE16_MEMBER(simon_state::write_r)
// R7 -> 75494 IN2 -> blue lamp
for (int i = 0; i < 4; i++)
output_set_lamp_value(i, data >> (4 + i) & 1);
-
+
// R8 -> 75494 IN0 -> speaker
m_speaker->level_w(data >> 8 & 1);
@@ -106,26 +106,26 @@ WRITE16_MEMBER(simon_state::write_o)
***************************************************************************/
static INPUT_PORTS_START( simon )
- PORT_START("IN.0")
+ PORT_START("IN.0") // R0
PORT_CONFNAME( 0x07, 0x02, "Game Select")
PORT_CONFSETTING( 0x02, "1" )
PORT_CONFSETTING( 0x01, "2" )
PORT_CONFSETTING( 0x04, "3" )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_START("IN.1")
+ PORT_START("IN.1") // R1
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Green Button")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Red Button")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Yellow Button")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Blue Button")
- PORT_START("IN.2")
+ PORT_START("IN.2") // R2
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("Start")
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Last")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Longest")
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
- PORT_START("IN.3")
+ PORT_START("IN.3") // R9
PORT_CONFNAME( 0x0f, 0x01, "Skill Level")
PORT_CONFSETTING( 0x02, "1" )
PORT_CONFSETTING( 0x04, "2" )
@@ -148,24 +148,13 @@ void simon_state::machine_start()
}
-static const UINT16 simon_output_pla[0x20] =
-{
- /* The output PLA just maps 1 2 4 8 and SL to O0-O4 */
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
- 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
- 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
-};
-
-
static MACHINE_CONFIG_START( simon, simon_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", TMS1000, SIMON_RC_CLOCK)
- MCFG_TMS1XXX_OUTPUT_PLA(simon_output_pla)
- MCFG_TMS1XXX_READ_K(READ8(simon_state, read_k))
- MCFG_TMS1XXX_WRITE_O(WRITE16(simon_state, write_o))
- MCFG_TMS1XXX_WRITE_R(WRITE16(simon_state, write_r))
+ MCFG_TMS1XXX_READ_K_CB(READ8(simon_state, read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(simon_state, write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(simon_state, write_r))
MCFG_DEFAULT_LAYOUT(layout_simon)
@@ -188,6 +177,11 @@ MACHINE_CONFIG_END
ROM_START( simon )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "tms1000.u1", 0x0000, 0x0400, CRC(9961719d) SHA1(35dddb018a8a2b31f377ab49c1f0cb76951b81c0) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1000_simon_mpla.pla", 0, 867, CRC(52f7c1f1) SHA1(dbc2634dcb98eac173ad0209df487cad413d08a5) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1000_simon_opla.pla", 0, 365, CRC(2943c71b) SHA1(bd5bb55c57e7ba27e49c645937ec1d4e67506601) )
ROM_END
diff --git a/src/mess/drivers/starwbc.c b/src/mess/drivers/starwbc.c
new file mode 100644
index 00000000000..3d9b822f636
--- /dev/null
+++ b/src/mess/drivers/starwbc.c
@@ -0,0 +1,297 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/***************************************************************************
+
+ Kenner Star Wars - Electronic Battle Command
+ * TMS1100 MCU, labeled MP3438A
+
+ This is a small tabletop space-dogfighting game. To start the game,
+ press BASIC/INTER/ADV and enter P#(number of players), then
+ START TURN. Refer to the official manual for more information.
+
+
+ TODO:
+ - MCU clock is unknown
+
+***************************************************************************/
+
+#include "emu.h"
+#include "cpu/tms0980/tms0980.h"
+#include "sound/speaker.h"
+
+#include "starwbc.lh"
+
+// master clock is unknown, the value below is an approximation
+// (patent says R=51K, C=47pf, but then it sounds too low pitched)
+#define MASTER_CLOCK (350000)
+
+
+class starwbc_state : public driver_device
+{
+public:
+ starwbc_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_button_matrix(*this, "IN"),
+ m_speaker(*this, "speaker")
+ { }
+
+ required_device<cpu_device> m_maincpu;
+ required_ioport_array<5> m_button_matrix;
+ required_device<speaker_sound_device> m_speaker;
+
+ UINT16 m_r;
+ UINT16 m_o;
+
+ UINT16 m_leds_state[0x10];
+ UINT16 m_leds_cache[0x10];
+ UINT8 m_leds_decay[0x100];
+
+ DECLARE_READ8_MEMBER(read_k);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_WRITE16_MEMBER(write_r);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
+ void leds_update();
+ void prepare_and_update();
+
+ virtual void machine_start();
+};
+
+
+
+/***************************************************************************
+
+ LEDs
+
+***************************************************************************/
+
+// The device strobes the outputs very fast, it is unnoticeable to the user.
+// To prevent flickering here, we need to simulate a decay.
+
+// decay time, in steps of 10ms
+#define LEDS_DECAY_TIME 4
+
+void starwbc_state::leds_update()
+{
+ UINT16 active_state[0x10];
+
+ for (int i = 0; i < 0x10; i++)
+ {
+ active_state[i] = 0;
+
+ for (int j = 0; j < 0x10; j++)
+ {
+ int di = j << 4 | i;
+
+ // turn on powered leds
+ if (m_leds_state[i] >> j & 1)
+ m_leds_decay[di] = LEDS_DECAY_TIME;
+
+ // determine active state
+ int ds = (m_leds_decay[di] != 0) ? 1 : 0;
+ active_state[i] |= (ds << j);
+ }
+ }
+
+ // on difference, send to output
+ for (int i = 0; i < 0x10; i++)
+ if (m_leds_cache[i] != active_state[i])
+ {
+ output_set_digit_value(i, active_state[i]);
+
+ for (int j = 0; j < 8; j++)
+ output_set_lamp_value(i*10 + j, active_state[i] >> j & 1);
+ }
+
+ memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(starwbc_state::leds_decay_tick)
+{
+ // slowly turn off unpowered leds
+ for (int i = 0; i < 0x100; i++)
+ if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
+ m_leds_decay[i]--;
+
+ leds_update();
+}
+
+void starwbc_state::prepare_and_update()
+{
+ UINT8 o = (m_o << 4 & 0xf0) | (m_o >> 4 & 0x0f);
+ const UINT8 mask[5] = { 0x30, 0xff, 0xff, 0x7f, 0x7f };
+
+ // R0,R2,R4,R6,R8
+ for (int i = 0; i < 5; i++)
+ m_leds_state[i*2] = (m_r >> (i*2) & 1) ? (o & mask[i]) : 0;
+
+ leds_update();
+}
+
+
+
+/***************************************************************************
+
+ I/O
+
+***************************************************************************/
+
+READ8_MEMBER(starwbc_state::read_k)
+{
+ UINT8 k = 0;
+
+ // read selected button rows
+ for (int i = 0; i < 5; i++)
+ {
+ const int ki[5] = { 0, 1, 3, 5, 7 };
+ if (m_r >> ki[i] & 1)
+ k |= m_button_matrix[i]->read();
+ }
+
+ return k;
+}
+
+WRITE16_MEMBER(starwbc_state::write_r)
+{
+ // R0,R2,R4: select lamp row
+ // R6,R8: select digit
+ // R0,R1,R3,R5,R7: input mux
+ // R9: piezo speaker
+ m_speaker->level_w(data >> 9 & 1);
+
+ m_r = data;
+ prepare_and_update();
+}
+
+WRITE16_MEMBER(starwbc_state::write_o)
+{
+ // O0-O7: leds state
+ m_o = data;
+ prepare_and_update();
+}
+
+
+
+/***************************************************************************
+
+ Inputs
+
+***************************************************************************/
+
+/* physical button layout and labels is like this:
+
+ (reconnnaissance=yellow) (tactical reaction=green)
+ [MAGNA] [ENEMY] [EM] [BS] [SCR]
+
+ [BASIC] [INTER] [START TURN] [END TURN] [MOVE] [FIRE]
+ [ADV] [P#] [<] [^] [>] [v]
+ (game=blue) (maneuvers=red) */
+
+static INPUT_PORTS_START( starwbc )
+ PORT_START("IN.0") // R0
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_NAME("Basic Game")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_NAME("Intermediate Game")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_NAME("Advanced Game")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_P) PORT_NAME("Player Number")
+
+ PORT_START("IN.1") // R1
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER) PORT_NAME("Start Turn")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("End Turn")
+
+ PORT_START("IN.2") // R3
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_NAME("Magna Scan") // only used in adv. game
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_NAME("Enemy Scan") // only used in adv. game
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_UNUSED)
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_NAME("Screen Up")
+
+ PORT_START("IN.3") // R5
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_NAME("Evasive Maneuvers")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_NAME("Move")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_NAME("Fire")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_NAME("Battle Stations")
+
+ PORT_START("IN.4") // R7
+ PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Left")
+ PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_UP) PORT_NAME("Up")
+ PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Down")
+ PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Right")
+INPUT_PORTS_END
+
+
+
+/***************************************************************************
+
+ Machine Config
+
+***************************************************************************/
+
+void starwbc_state::machine_start()
+{
+ memset(m_leds_state, 0, sizeof(m_leds_state));
+ memset(m_leds_cache, 0, sizeof(m_leds_cache));
+ memset(m_leds_decay, 0, sizeof(m_leds_decay));
+ m_r = 0;
+ m_o = 0;
+
+ save_item(NAME(m_leds_state));
+ save_item(NAME(m_leds_cache));
+ save_item(NAME(m_leds_decay));
+ save_item(NAME(m_r));
+ save_item(NAME(m_o));
+}
+
+
+static MACHINE_CONFIG_START( starwbc, starwbc_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS1100, MASTER_CLOCK)
+ MCFG_TMS1XXX_READ_K_CB(READ8(starwbc_state, read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(starwbc_state, write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(starwbc_state, write_r))
+
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", starwbc_state, leds_decay_tick, attotime::from_msec(10))
+
+ MCFG_DEFAULT_LAYOUT(layout_starwbc)
+
+ /* no video! */
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
+MACHINE_CONFIG_END
+
+
+
+/***************************************************************************
+
+ Game driver(s)
+
+***************************************************************************/
+
+ROM_START( starwbc )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "mp3438a", 0x0000, 0x0800, CRC(c12b7069) SHA1(d1f39c69a543c128023ba11cc6228bacdfab04de) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
+ROM_END
+
+ROM_START( starwbcp )
+ ROM_REGION( 0x0800, "maincpu", 0 )
+ ROM_LOAD( "us4270755", 0x0000, 0x0800, BAD_DUMP CRC(fb3332f2) SHA1(a79ac81e239983cd699b7cfcc55f89b203b2c9ec) ) // from patent US4270755, may have errors
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1100_starwbc_mpla.pla", 0, 867, CRC(03574895) SHA1(04407cabfb3adee2ee5e4218612cb06c12c540f4) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1100_starwbc_opla.pla", 0, 365, CRC(d358a76d) SHA1(06b60b207540e9b726439141acadea9aba718013) )
+ROM_END
+
+
+CONS( 1979, starwbc, 0, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command", GAME_SUPPORTS_SAVE )
+CONS( 1979, starwbcp, starwbc, 0, starwbc, starwbc, driver_device, 0, "Kenner", "Star Wars - Electronic Battle Command (prototype)", GAME_SUPPORTS_SAVE )
diff --git a/src/mess/drivers/stopthie.c b/src/mess/drivers/stopthie.c
index b462d2c17c3..c30943e7bb0 100644
--- a/src/mess/drivers/stopthie.c
+++ b/src/mess/drivers/stopthie.c
@@ -1,82 +1,245 @@
+// license:BSD-3-Clause
+// copyright-holders:hap
+/***************************************************************************
+
+ Parker Brothers Stop Thief
+ * TMS0980NLL MP6101B (die labeled 0980B-01A)
+
+ Stop Thief is actually a board game, the electronic device emulated here
+ (called Electronic Crime Scanner) is an accessory. To start a game, press
+ the ON button. Otherwise, it is in test-mode where you can hear all sounds.
+
+
+ TODO:
+ - ON/OFF button callbacks
+ - MCU clock is unknown
+ - stopthiep: unable to start a game (may be intentional?)
+
+***************************************************************************/
+
#include "emu.h"
#include "cpu/tms0980/tms0980.h"
+#include "sound/speaker.h"
-/* Layout */
#include "stopthie.lh"
+// master clock is unknown, the value below is an approximation
+#define MASTER_CLOCK (425000)
-class stopthie_state : public driver_device
+
+class stopthief_state : public driver_device
{
public:
- stopthie_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag) ,
- m_maincpu(*this, "maincpu") { }
+ stopthief_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_button_matrix(*this, "IN"),
+ m_speaker(*this, "speaker")
+ { }
- DECLARE_READ8_MEMBER(stopthie_read_k);
- DECLARE_WRITE16_MEMBER(stopthie_write_o);
- DECLARE_WRITE16_MEMBER(stopthie_write_r);
required_device<cpu_device> m_maincpu;
+ required_ioport_array<3> m_button_matrix;
+ required_device<speaker_sound_device> m_speaker;
+
+ UINT16 m_o;
+
+ UINT16 m_leds_state[0x10];
+ UINT16 m_leds_cache[0x10];
+ UINT8 m_leds_decay[0x100];
+
+ DECLARE_READ8_MEMBER(read_k);
+ DECLARE_WRITE16_MEMBER(write_o);
+ DECLARE_WRITE16_MEMBER(write_r);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
+ void leds_update();
+
+ virtual void machine_start();
};
-#define LOG 1
+/***************************************************************************
-static INPUT_PORTS_START( stopthie )
-INPUT_PORTS_END
+ LEDs
+***************************************************************************/
-READ8_MEMBER(stopthie_state::stopthie_read_k)
-{
- UINT8 data = 0;
+// The device strobes the outputs very fast, it is unnoticeable to the user.
+// To prevent flickering here, we need to simulate a decay.
- if (LOG)
- logerror( "stopthie_read_k\n" );
+// decay time, in steps of 10ms
+#define LEDS_DECAY_TIME 4
- return data;
+void stopthief_state::leds_update()
+{
+ UINT16 active_state[0x10];
+
+ for (int i = 0; i < 0x10; i++)
+ {
+ active_state[i] = 0;
+
+ for (int j = 0; j < 0x10; j++)
+ {
+ int di = j << 4 | i;
+
+ // turn on powered leds
+ if (m_leds_state[i] >> j & 1)
+ m_leds_decay[di] = LEDS_DECAY_TIME;
+
+ // determine active state
+ int ds = (m_leds_decay[di] != 0) ? 1 : 0;
+ active_state[i] |= (ds << j);
+ }
+ }
+
+ // on difference, send to output
+ for (int i = 0; i < 0x10; i++)
+ if (m_leds_cache[i] != active_state[i])
+ output_set_digit_value(i, active_state[i]);
+
+ memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
}
+TIMER_DEVICE_CALLBACK_MEMBER(stopthief_state::leds_decay_tick)
+{
+ // slowly turn off unpowered leds
+ for (int i = 0; i < 0x100; i++)
+ if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
+ m_leds_decay[i]--;
+
+ leds_update();
+}
+
+
+
+/***************************************************************************
+
+ I/O
+
+***************************************************************************/
-WRITE16_MEMBER(stopthie_state::stopthie_write_o)
+READ8_MEMBER(stopthief_state::read_k)
{
- if (LOG)
- logerror( "stopthie_write_o: write %02x\n", data );
+ // the Vss row is always on
+ UINT8 k = m_button_matrix[2]->read();
+
+ // read selected button rows
+ for (int i = 0; i < 2; i++)
+ {
+ const int ki[2] = { 0, 6 };
+ if (m_o >> ki[i] & 1)
+ k |= m_button_matrix[i]->read();
+ }
+
+ return k;
}
+WRITE16_MEMBER(stopthief_state::write_r)
+{
+ // R0-R2: select digit
+ UINT8 o = BITSWAP8(m_o,3,5,2,1,4,0,6,7) & 0x7f;
+ for (int i = 0; i < 3; i++)
+ m_leds_state[i] = (data >> i & 1) ? o : 0;
+
+ leds_update();
+
+ // R3-R8: speaker on
+ m_speaker->level_w((data & 0x1f8 && m_o & 8) ? 1 : 0);
+}
-WRITE16_MEMBER(stopthie_state::stopthie_write_r)
+WRITE16_MEMBER(stopthief_state::write_o)
{
- if (LOG)
- logerror( "stopthie_write_r: write %04x\n", data );
+ // O0,O6: input mux
+ // O3: speaker out
+ // O0-O2,O4-O7: led segments A-G
+ m_o = data;
}
-static const UINT16 stopthie_output_pla[0x20] =
+
+/***************************************************************************
+
+ Inputs
+
+***************************************************************************/
+
+/* physical button layout and labels is like this:
+
+ [1] [2] [OFF]
+ [3] [4] [ON]
+ [5] [6] [T, TIP]
+ [7] [8] [A, ARREST]
+ [9] [0] [C, CLUE]
+*/
+
+static INPUT_PORTS_START( stopthief )
+ PORT_START("IN.0") // O0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+
+ PORT_START("IN.1") // O6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+
+ // note: even though power buttons are on the matrix, they are not CPU-controlled
+ PORT_START("IN.2") // Vss!
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("On")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("Tip")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("Arrest")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("Clue")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Off")
+INPUT_PORTS_END
+
+
+
+/***************************************************************************
+
+ Machine Config
+
+***************************************************************************/
+
+void stopthief_state::machine_start()
{
- /* O output PLA configuration currently unknown */
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
- 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
- 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
-};
+ memset(m_leds_state, 0, sizeof(m_leds_state));
+ memset(m_leds_cache, 0, sizeof(m_leds_cache));
+ memset(m_leds_decay, 0, sizeof(m_leds_decay));
+ m_o = 0;
+
+ save_item(NAME(m_leds_state));
+ save_item(NAME(m_leds_cache));
+ save_item(NAME(m_leds_decay));
+ save_item(NAME(m_o));
+}
-static MACHINE_CONFIG_START( stopthie, stopthie_state )
+static MACHINE_CONFIG_START( stopthief, stopthief_state )
/* basic machine hardware */
- MCFG_CPU_ADD( "maincpu", TMS0980, 500000 ) /* Clock is wrong */
- MCFG_TMS1XXX_OUTPUT_PLA( stopthie_output_pla )
- MCFG_TMS1XXX_READ_K( READ8( stopthie_state, stopthie_read_k ) )
- MCFG_TMS1XXX_WRITE_O( WRITE16( stopthie_state, stopthie_write_o ) )
- MCFG_TMS1XXX_WRITE_R( WRITE16( stopthie_state, stopthie_write_r ) )
+ MCFG_CPU_ADD("maincpu", TMS0980, MASTER_CLOCK)
+ MCFG_TMS1XXX_READ_K_CB(READ8(stopthief_state, read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(stopthief_state, write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(stopthief_state, write_r))
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", stopthief_state, leds_decay_tick, attotime::from_msec(10))
+
MCFG_DEFAULT_LAYOUT(layout_stopthie)
+
+ /* no video! */
+
+ /* sound hardware */
+ MCFG_SPEAKER_STANDARD_MONO("mono")
+ MCFG_SOUND_ADD("speaker", SPEAKER_SOUND, 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
MACHINE_CONFIG_END
-ROM_START( stopthie )
- ROM_REGION( 0x1000, "maincpu", 0 )
- ROM_LOAD16_WORD( "stopthie.bin", 0x0000, 0x1000, CRC(03691115) SHA1(bdcd212aa50bb1c26cb2d0ee97e5cfc04841c108) )
-ROM_END
+
/***************************************************************************
@@ -84,5 +247,34 @@ ROM_END
***************************************************************************/
-/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-CONS( 1979, stopthie, 0, 0, stopthie, stopthie, driver_device, 0, "Parker Brothers", "Stop Thief", GAME_NOT_WORKING | GAME_NO_SOUND)
+ROM_START( stopthie )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "tms0980nll_mp6101b", 0x0000, 0x1000, CRC(8bde5bb4) SHA1(8c318fcce67acc24c7ae361f575f28ec6f94665a) )
+
+ ROM_REGION( 1246, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
+ ROM_REGION( 1982, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
+ROM_END
+
+ROM_START( stopthiep )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD16_WORD( "us4341385", 0x0000, 0x1000, CRC(07aec38a) SHA1(0a3d0956495c0d6d9ea771feae6c14a473a800dc) ) // from patent US4341385, data should be correct (it included checksums)
+
+ ROM_REGION( 1246, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
+ ROM_REGION( 1982, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0980_stopthie_opla.pla", 0, 352, CRC(50337a48) SHA1(4a9ea62ed797a9ac5190eec3bb6ebebb7814628c) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0980_stopthie_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
+ROM_END
+
+
+CONS( 1979, stopthie, 0, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner)", GAME_SUPPORTS_SAVE )
+CONS( 1979, stopthiep, stopthie, 0, stopthief, stopthief, driver_device, 0, "Parker Brothers", "Stop Thief (Electronic Crime Scanner) (prototype)", GAME_SUPPORTS_SAVE | GAME_NOT_WORKING )
diff --git a/src/mess/drivers/ticalc1x.c b/src/mess/drivers/ticalc1x.c
index 2b5ad7adcda..414c8c6fb75 100644
--- a/src/mess/drivers/ticalc1x.c
+++ b/src/mess/drivers/ticalc1x.c
@@ -2,26 +2,24 @@
// copyright-holders:hap
/***************************************************************************
- Texas Instruments TMS1xxx/0970/0980 handheld calculators
-
- Texas Instruments WIZ-A-TRON
- * TMC0907NL DP0907BS (die labeled 0970F-07B)
-
- Other handhelds assumed to be on similar hardware:
- - Math Magic
- - Little Professor
-
+ Texas Instruments TMS1xxx/0970/0980 handheld calculators (mostly single-chip)
+
+ Refer to their official manuals on how to use them.
+
TODO:
- - the rom goes in an infinite loop very soon, cpu missing emulation?
+ - ON/OFF button callbacks, and support OFF callback from the 0980
+ - MCU clocks are unknown
***************************************************************************/
#include "emu.h"
#include "cpu/tms0980/tms0980.h"
-// master clock is cpu internal, the value below is an approximation
-#define MASTER_CLOCK (250000)
+#include "ti1270.lh"
+#include "ti30.lh"
+#include "tisr16.lh"
+#include "wizatron.lh"
class ticalc1x_state : public driver_device
@@ -34,47 +32,251 @@ public:
{ }
required_device<cpu_device> m_maincpu;
- required_ioport_array<4> m_button_matrix;
+ optional_ioport_array<11> m_button_matrix; // up to 11 rows
UINT16 m_r;
UINT16 m_o;
- DECLARE_READ8_MEMBER(read_k);
- DECLARE_WRITE16_MEMBER(write_o);
- DECLARE_WRITE16_MEMBER(write_r);
+ UINT16 m_leds_state[0x10];
+ UINT16 m_leds_cache[0x10];
+ UINT8 m_leds_decay[0x100];
+
+ DECLARE_READ8_MEMBER(tisr16_read_k);
+ DECLARE_WRITE16_MEMBER(tisr16_write_o);
+ DECLARE_WRITE16_MEMBER(tisr16_write_r);
+ void tisr16_leds_update();
+
+ DECLARE_READ8_MEMBER(ti1270_read_k);
+ DECLARE_WRITE16_MEMBER(ti1270_write_o);
+ DECLARE_WRITE16_MEMBER(ti1270_write_r);
+
+ DECLARE_READ8_MEMBER(wizatron_read_k);
+ DECLARE_WRITE16_MEMBER(wizatron_write_o);
+ DECLARE_WRITE16_MEMBER(wizatron_write_r);
+
+ DECLARE_READ8_MEMBER(ti30_read_k);
+ DECLARE_WRITE16_MEMBER(ti30_write_o);
+ DECLARE_WRITE16_MEMBER(ti30_write_r);
+
+ TIMER_DEVICE_CALLBACK_MEMBER(leds_decay_tick);
+ void leds_update();
virtual void machine_start();
};
+
+/***************************************************************************
+
+ LEDs
+
+***************************************************************************/
+
+// Devices with TMS09x0 strobe the outputs very fast, it is unnoticeable to the user.
+// To prevent flickering here, we need to simulate a decay.
+
+// decay time, in steps of 10ms
+#define LEDS_DECAY_TIME 4
+
+void ticalc1x_state::leds_update()
+{
+ UINT16 active_state[0x10];
+
+ for (int i = 0; i < 0x10; i++)
+ {
+ active_state[i] = 0;
+
+ for (int j = 0; j < 0x10; j++)
+ {
+ int di = j << 4 | i;
+
+ // turn on powered leds
+ if (m_leds_state[i] >> j & 1)
+ m_leds_decay[di] = LEDS_DECAY_TIME;
+
+ // determine active state
+ int ds = (m_leds_decay[di] != 0) ? 1 : 0;
+ active_state[i] |= (ds << j);
+ }
+ }
+
+ // on difference, send to output
+ for (int i = 0; i < 0x10; i++)
+ if (m_leds_cache[i] != active_state[i])
+ output_set_digit_value(i, active_state[i]);
+
+ memcpy(m_leds_cache, active_state, sizeof(m_leds_cache));
+}
+
+TIMER_DEVICE_CALLBACK_MEMBER(ticalc1x_state::leds_decay_tick)
+{
+ // slowly turn off unpowered leds
+ for (int i = 0; i < 0x100; i++)
+ if (!(m_leds_state[i & 0xf] >> (i>>4) & 1) && m_leds_decay[i])
+ m_leds_decay[i]--;
+
+ leds_update();
+}
+
+
+
/***************************************************************************
I/O
***************************************************************************/
-READ8_MEMBER(ticalc1x_state::read_k)
+// SR-16: TMS1000 MCU labeled TMS1001NL. die labeled 1001A
+
+void ticalc1x_state::tisr16_leds_update()
+{
+ // update leds state
+ for (int i = 0; i < 11; i++)
+ if (m_r >> i & 1)
+ m_leds_state[i] = m_o;
+
+ // exponent sign (not 100% sure this is correct)
+ m_leds_state[11] = (m_leds_state[0] | m_leds_state[1]) ? 0x40 : 0;
+
+ // send to output
+ for (int i = 0; i < 12; i++)
+ output_set_digit_value(i, m_leds_state[i]);
+}
+
+READ8_MEMBER(ticalc1x_state::tisr16_read_k)
{
UINT8 k = 0;
// read selected button rows
- for (int i = 0; i < 4; i++)
- if (m_o & (1 << (i + 1)))
+ for (int i = 0; i < 11; i++)
+ if (m_r >> i & 1)
k |= m_button_matrix[i]->read();
return k;
}
-WRITE16_MEMBER(ticalc1x_state::write_r)
+WRITE16_MEMBER(ticalc1x_state::tisr16_write_r)
{
- // R..: select digit
+ // R0-R10: input mux
+ // R0-R10: select digit (right-to-left)
m_r = data;
+
+ tisr16_leds_update();
}
-WRITE16_MEMBER(ticalc1x_state::write_o)
+WRITE16_MEMBER(ticalc1x_state::tisr16_write_o)
+{
+ // O0-O7: digit segments
+ m_o = data;
+
+ tisr16_leds_update();
+}
+
+
+// TI-1270: TMS0970 MCU labeled TMC0974NL ZA0355, DP0974A. die labeled 0970D-74A
+
+READ8_MEMBER(ticalc1x_state::ti1270_read_k)
+{
+ UINT8 k = 0;
+
+ // read selected button rows
+ for (int i = 0; i < 7; i++)
+ if (m_o >> (i+1) & 1)
+ k |= m_button_matrix[i]->read();
+
+ return k;
+}
+
+WRITE16_MEMBER(ticalc1x_state::ti1270_write_r)
+{
+ // R0-R7: select digit (right-to-left)
+ for (int i = 0; i < 8; i++)
+ m_leds_state[i] = (data >> i & 1) ? m_o : 0;
+
+ leds_update();
+}
+
+WRITE16_MEMBER(ticalc1x_state::ti1270_write_o)
+{
+ // O1-O5,O7: input mux
+ // O0-O7: digit segments
+ m_o = data;
+}
+
+
+// WIZ-A-TRON (educational toy): TMS0970 MCU labeled TMC0907NL ZA0379, DP0907BS. die labeled 0970F-07B
+
+READ8_MEMBER(ticalc1x_state::wizatron_read_k)
+{
+ UINT8 k = 0;
+
+ // read selected button rows
+ for (int i = 0; i < 4; i++)
+ if (m_o >> (i+1) & 1)
+ k |= m_button_matrix[i]->read();
+
+ return k;
+}
+
+WRITE16_MEMBER(ticalc1x_state::wizatron_write_r)
+{
+ // R0-R8: select digit (right-to-left)
+ for (int i = 0; i < 9; i++)
+ m_leds_state[i] = (data >> i & 1) ? m_o : 0;
+
+ // 3rd digit has more segments, for math symbols
+ // let's assume it's a 14-seg led
+ m_leds_state[6] = BITSWAP16(m_leds_state[6],15,14,2,1,6,4,3,0,5,5,11,10,9,13,12,8);
+
+ // 6th digit only has A and G for =
+ m_leds_state[3] &= 0x41;
+
+ leds_update();
+}
+
+WRITE16_MEMBER(ticalc1x_state::wizatron_write_o)
{
- // O0-O6: digit segments A-G
// O1-O4: input mux
+ // O0-O6: digit segments A-G
+ // O7: N/C
+ m_o = data & 0x7f;
+}
+
+
+// TI-30: TMS0980 MCU labeled TMC0981NL. die labeled 0980B-81F
+// TI Programmer: TMS0980 MCU labeled ZA0675NL, JP0983AT. die labeled 0980B-83
+// TI Business Analyst-I: TMS0980 MCU labeled TMC0982NL. die labeled 0980B-82F
+
+READ8_MEMBER(ticalc1x_state::ti30_read_k)
+{
+ // the Vss row is always on
+ UINT8 k = m_button_matrix[8]->read();
+
+ // read selected button rows
+ for (int i = 0; i < 8; i++)
+ if (m_o >> i & 1)
+ k |= m_button_matrix[i]->read();
+
+ return k;
+}
+
+WRITE16_MEMBER(ticalc1x_state::ti30_write_r)
+{
+ // R0-R8: select digit
+ UINT8 o = BITSWAP8(m_o,7,5,2,1,4,0,6,3);
+ for (int i = 0; i < 9; i++)
+ m_leds_state[i] = (data >> i & 1) ? o : 0;
+
+ // 1st digit only has segments B,F,G,DP
+ m_leds_state[0] &= 0xe2;
+
+ leds_update();
+}
+
+WRITE16_MEMBER(ticalc1x_state::ti30_write_o)
+{
+ // O1-O5,O7: input mux
+ // O0-O7: digit segments
m_o = data;
}
@@ -86,74 +288,413 @@ WRITE16_MEMBER(ticalc1x_state::write_o)
***************************************************************************/
+static INPUT_PORTS_START( tisr16 )
+ PORT_START("IN.0") // R0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+
+ PORT_START("IN.1") // R1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+
+ PORT_START("IN.2") // R2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+
+ PORT_START("IN.3") // R3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+
+ PORT_START("IN.4") // R4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_NAME("EE")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+
+ PORT_START("IN.5") // R5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME(UTF8_CAPITAL_SIGMA)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+
+ PORT_START("IN.6") // R6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("y"UTF8_POW_X)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+
+ PORT_START("IN.7") // R7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+
+ PORT_START("IN.8") // R8
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("10"UTF8_POW_X)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("e"UTF8_POW_X)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+
+ PORT_START("IN.9") // R9
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+
+ PORT_START("IN.10") // R10
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("C")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("log")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("ln(x)")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( ti1270 )
+ PORT_START("IN.0") // O1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CODE(KEYCODE_DEL) PORT_NAME("CE/C")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
+
+ PORT_START("IN.1") // O2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
+
+ PORT_START("IN.2") // O3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
+
+ PORT_START("IN.3") // O4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
+
+ PORT_START("IN.4") // O5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CODE(KEYCODE_I) PORT_NAME(UTF8_SMALL_PI)
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
+
+ PORT_START("IN.5") // O6
+ PORT_BIT( 0x0f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.6") // O7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( wizatron )
- PORT_START("IN.0")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 )
-
- PORT_START("IN.1")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
-
- PORT_START("IN.2")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
-
- PORT_START("IN.3")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_OTHER )
- PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_OTHER )
+ PORT_START("IN.0") // O1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("CLEAR")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
+
+ PORT_START("IN.1") // O2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
+
+ PORT_START("IN.2") // O3
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
+
+ PORT_START("IN.3") // O4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( ti30 )
+ PORT_START("IN.0") // O0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("y"UTF8_POW_X)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_NAME("K")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("log")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_NAME("EE"UTF8_DOWN)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("ln(x)")
+
+ PORT_START("IN.1") // O1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+
+ PORT_START("IN.2") // O2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+
+ PORT_START("IN.3") // O3
+ PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.4") // O4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME(UTF8_SMALL_PI)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("(")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("%")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(")")
+
+ PORT_START("IN.5") // O5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("SUM")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+
+ PORT_START("IN.6") // O6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("DRG")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("INV")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("cos")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("sin")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_NAME("tan")
+
+ PORT_START("IN.7") // O7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("EXC")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
+
+ // note: even though power buttons are on the matrix, they are not CPU-controlled
+ PORT_START("IN.8") // Vss!
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("1/x")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_NAME(UTF8_SQUAREROOT"x")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF")
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( tiprog )
+ PORT_START("IN.0") // O0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_NAME("K")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("SHF")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("E")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_NAME("d")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("F")
+
+ PORT_START("IN.1") // O1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_NAME("OR")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+
+ PORT_START("IN.2") // O2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("AND")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+
+ PORT_START("IN.3") // O3
+ PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.4") // O4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_NAME("1'sC")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_NAME("b")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_NAME("A")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("C")
+
+ PORT_START("IN.5") // O5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("XOR")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+
+ PORT_START("IN.6") // O6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(")")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME("SUM")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("(")
+
+ PORT_START("IN.7") // O7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_NAME("CE")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
+
+ // note: even though power buttons are on the matrix, they are not CPU-controlled
+ PORT_START("IN.8") // Vss!
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CODE(KEYCODE_PGUP) PORT_NAME("C/ON")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_NAME("DEC")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_NAME("OCT")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_NAME("HEX")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF")
+INPUT_PORTS_END
+
+
+static INPUT_PORTS_START( tibusan1 )
+ // PORT_NAME lists functions under [2nd] as secondaries.
+ PORT_START("IN.0") // O0
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_NAME("y"UTF8_POW_X" "UTF8_POW_X""UTF8_SQUAREROOT"y") // 2nd one implies xth root of y
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_NAME("% "UTF8_CAPITAL_DELTA"%")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_NAME("SEL")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_NAME("CST")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_NAME("MAR")
+
+ PORT_START("IN.1") // O1
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME(UTF8_MULTIPLY)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("STO m")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("8")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("7")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("9")
+
+ PORT_START("IN.2") // O2
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("-")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("RCL b")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("5")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("4")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("6")
+
+ PORT_START("IN.3") // O3
+ PORT_BIT( 0x1f, IP_ACTIVE_HIGH, IPT_UNUSED )
+
+ PORT_START("IN.4") // O4
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME(UTF8_DIVIDE)
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_NAME(UTF8_CAPITAL_SIGMA"+ "UTF8_CAPITAL_SIGMA"-")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("( AN-CI\"")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_NAME("x<>y L.R.")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME(") 1/x")
+
+ PORT_START("IN.5") // O5
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("+")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_NAME("SUM x"UTF8_PRIME)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("2")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("1")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("3")
+
+ PORT_START("IN.6") // O6
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_NAME("FV")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_NAME("N")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_NAME("PMT")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_NAME("%i")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_NAME("PV")
+
+ PORT_START("IN.7") // O7
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_NAME("=")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_NAME("EXC x"UTF8_PRIME)
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME(".")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("0")
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_NAME("+/-")
+
+ // note: even though power buttons are on the matrix, they are not CPU-controlled
+ PORT_START("IN.8") // Vss!
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_CODE(KEYCODE_DEL) PORT_NAME("ON/C")
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_NAME("2nd")
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_NAME("x"UTF8_POW_2" "UTF8_SQUAREROOT"x")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_NAME("ln(x) e"UTF8_POW_X)
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("OFF")
INPUT_PORTS_END
/***************************************************************************
- Machine Config
+ Machine Config(s)
***************************************************************************/
void ticalc1x_state::machine_start()
{
+ memset(m_leds_state, 0, sizeof(m_leds_state));
+ memset(m_leds_cache, 0, sizeof(m_leds_cache));
+ memset(m_leds_decay, 0, sizeof(m_leds_decay));
m_r = 0;
m_o = 0;
+ save_item(NAME(m_leds_state));
+ save_item(NAME(m_leds_cache));
+ save_item(NAME(m_leds_decay));
save_item(NAME(m_r));
save_item(NAME(m_o));
}
-static const UINT16 wizatron_output_pla[0x20] =
-{
- // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, X, /, r
- 0x7e, 0x30, 0x6d, 0x79, 0x33, 0x5b, 0x5f, 0x70,
- 0x7f, 0x7b, 0x26, 0x02, 0x35, 0x4a, 0x05, 0x00,
- 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00,
- 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00, 0xff00
-};
+static MACHINE_CONFIG_START( tisr16, ticalc1x_state )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS1000, 250000)
+ MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, tisr16_read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, tisr16_write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, tisr16_write_r))
+
+ MCFG_DEFAULT_LAYOUT(layout_tisr16)
+MACHINE_CONFIG_END
-static MACHINE_CONFIG_START( wizatron, ticalc1x_state )
+static MACHINE_CONFIG_START( t9base, ticalc1x_state )
/* basic machine hardware */
- MCFG_CPU_ADD("maincpu", TMS0970, MASTER_CLOCK)
- MCFG_TMS1XXX_OUTPUT_PLA(wizatron_output_pla)
- MCFG_TMS1XXX_READ_K(READ8(ticalc1x_state, read_k))
- MCFG_TMS1XXX_WRITE_O(WRITE16(ticalc1x_state, write_o))
- MCFG_TMS1XXX_WRITE_R(WRITE16(ticalc1x_state, write_r))
+ MCFG_TIMER_DRIVER_ADD_PERIODIC("leds_decay", ticalc1x_state, leds_decay_tick, attotime::from_msec(10))
/* no video! */
/* no sound! */
MACHINE_CONFIG_END
+static MACHINE_CONFIG_DERIVED( ti1270, t9base )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS0970, 250000)
+ MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, ti1270_read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, ti1270_write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, ti1270_write_r))
+
+ MCFG_DEFAULT_LAYOUT(layout_ti1270)
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_DERIVED( wizatron, t9base )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS0970, 250000)
+ MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, wizatron_read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, wizatron_write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, wizatron_write_r))
+
+ MCFG_DEFAULT_LAYOUT(layout_wizatron)
+MACHINE_CONFIG_END
+
+
+static MACHINE_CONFIG_DERIVED( ti30, t9base )
+
+ /* basic machine hardware */
+ MCFG_CPU_ADD("maincpu", TMS0980, 250000)
+ MCFG_TMS1XXX_READ_K_CB(READ8(ticalc1x_state, ti30_read_k))
+ MCFG_TMS1XXX_WRITE_O_CB(WRITE16(ticalc1x_state, ti30_write_o))
+ MCFG_TMS1XXX_WRITE_R_CB(WRITE16(ticalc1x_state, ti30_write_r))
+
+ MCFG_DEFAULT_LAYOUT(layout_ti30)
+MACHINE_CONFIG_END
+
/***************************************************************************
@@ -162,10 +703,93 @@ MACHINE_CONFIG_END
***************************************************************************/
+ROM_START( tisr16 )
+ ROM_REGION( 0x0400, "maincpu", 0 )
+ ROM_LOAD( "tms1001nl", 0x0000, 0x0400, CRC(b7ce3c1d) SHA1(95cdb0c6be31043f4fe06314ed41c0ca1337bc46) )
+
+ ROM_REGION( 867, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms1000_sr16_mpla.pla", 0, 867, CRC(5b35019c) SHA1(730d3b9041ed76d57fbedd73b009477fe432b386) )
+ ROM_REGION( 365, "maincpu:opla", 0 )
+ ROM_LOAD( "tms1000_sr16_opla.pla", 0, 365, CRC(29b08739) SHA1(d55f01e40a2d493d45ea422f12e63b01bcde08fb) )
+ROM_END
+
+ROM_START( ti1270 )
+ ROM_REGION( 0x0400, "maincpu", 0 )
+ ROM_LOAD( "tms0974nl", 0x0000, 0x0400, CRC(48e09b4b) SHA1(17f27167164df223f9f06082ece4c3fc3900eda3) )
+
+ ROM_REGION( 782, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0970_ti1270_ipla.pla", 0, 782, CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) )
+ ROM_REGION( 860, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0970_ti1270_mpla.pla", 0, 860, CRC(6ff5d51d) SHA1(59d3e5de290ba57694068ddba78d21a0c1edf427) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0970_ti1270_opla.pla", 0, 352, CRC(f39bf0a4) SHA1(160341490043eb369720d5f487cf0f59f458a93e) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0970_ti1270_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
+ROM_END
+
ROM_START( wizatron )
ROM_REGION( 0x0400, "maincpu", 0 )
ROM_LOAD( "dp0907bs", 0x0000, 0x0400, CRC(5a6af094) SHA1(b1f27e1f13f4db3b052dd50fb08dbf9c4d8db26e) )
+
+ ROM_REGION( 782, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0970_wizatron_ipla.pla", 0, 782, CRC(05306ef8) SHA1(60a0a3c49ce330bce0c27f15f81d61461d0432ce) )
+ ROM_REGION( 860, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0970_wizatron_mpla.pla", 0, 860, CRC(7f50ab2e) SHA1(bff3be9af0e322986f6e545b567c97d70e135c93) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0970_wizatron_opla.pla", 0, 352, CRC(745a3900) SHA1(031b55a0cf783c8a88eec4289d4373eb8538f374) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0970_wizatron_spla.pla", 0, 157, CRC(56c37a4f) SHA1(18ecc20d2666e89673739056483aed5a261ae927) )
ROM_END
+ROM_START( ti30 )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD16_WORD( "tmc0981nl", 0x0000, 0x1000, CRC(41298a14) SHA1(06f654c70add4044a612d3a38b0c2831c188fd0c) )
+
+ ROM_REGION( 1246, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
+ ROM_REGION( 1982, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0980_ti30_opla.pla", 0, 352, CRC(38788410) SHA1(cb3d1a61190b887cd2e6d9c60b4fdb9b901f7eed) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0980_ti30_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
+ROM_END
+
+ROM_START( tibusan1 )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD16_WORD( "tmc0982nl", 0x0000, 0x1000, CRC(6954560a) SHA1(6c153a0c9239a811e3514a43d809964c06f8f88e) )
+
+ ROM_REGION( 1246, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
+ ROM_REGION( 1982, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0980_default_mpla.pla", 0, 1982, CRC(3709014f) SHA1(d28ee59ded7f3b9dc3f0594a32a98391b6e9c961) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0980_tibusan1_opla.pla", 0, 352, CRC(38788410) SHA1(cb3d1a61190b887cd2e6d9c60b4fdb9b901f7eed) )
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0980_tibusan1_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
+ROM_END
+
+ROM_START( tiprog )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD16_WORD( "za0675nl", 0x0000, 0x1000, CRC(82355854) SHA1(03fab373bce04df8ea3fe25352525e8539213626) )
+
+ ROM_REGION( 1246, "maincpu:ipla", 0 )
+ ROM_LOAD( "tms0980_default_ipla.pla", 0, 1246, CRC(42db9a38) SHA1(2d127d98028ec8ec6ea10c179c25e447b14ba4d0) )
+ ROM_REGION( 1982, "maincpu:mpla", 0 )
+ ROM_LOAD( "tms0980_tiprog_mpla.pla", 0, 1982, CRC(57043284) SHA1(0fa06d5865830ecdb3d870271cb92ac917bed3ca) )
+ ROM_REGION( 352, "maincpu:opla", 0 )
+ ROM_LOAD( "tms0980_tiprog_opla.pla", 0, 352, BAD_DUMP CRC(2a63956f) SHA1(26a62ca2b5973d8564e580e12230292f6d2888d9) ) // corrected by hand
+ ROM_REGION( 157, "maincpu:spla", 0 )
+ ROM_LOAD( "tms0980_tiprog_spla.pla", 0, 157, CRC(399aa481) SHA1(72c56c58fde3fbb657d69647a9543b5f8fc74279) )
+ROM_END
+
+
+
+COMP( 1974, tisr16, 0, 0, tisr16, tisr16, driver_device, 0, "Texas Instruments", "SR-16 (Texas Instruments)", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
+
+COMP( 1976, ti1270, 0, 0, ti1270, ti1270, driver_device, 0, "Texas Instruments", "TI-1270", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
+COMP( 1977, wizatron, 0, 0, wizatron, wizatron, driver_device, 0, "Texas Instruments", "Wiz-A-Tron", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
-CONS( 1977, wizatron, 0, 0, wizatron, wizatron, driver_device, 0, "Texas Instruments", "Wiz-A-Tron", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
+COMP( 1976, ti30, 0, 0, ti30, ti30, driver_device, 0, "Texas Instruments", "TI-30", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
+COMP( 1977, tiprog, 0, 0, ti30, tiprog, driver_device, 0, "Texas Instruments", "TI Programmer", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
+COMP( 1979, tibusan1, 0, 0, ti30, tibusan1, driver_device, 0, "Texas Instruments", "TI Business Analyst-I", GAME_SUPPORTS_SAVE | GAME_NO_SOUND_HW )
diff --git a/src/mess/drivers/tvc.c b/src/mess/drivers/tvc.c
index 87c70272600..826c70315c3 100644
--- a/src/mess/drivers/tvc.c
+++ b/src/mess/drivers/tvc.c
@@ -827,6 +827,7 @@ static MACHINE_CONFIG_START( tvc, tvc_state )
/* Software lists */
MCFG_SOFTWARE_LIST_ADD("cart_list", "tvc_cart")
MCFG_SOFTWARE_LIST_ADD("cass_list", "tvc_cass")
+ MCFG_SOFTWARE_LIST_ADD("flop_list", "tvc_flop")
MACHINE_CONFIG_END
/* ROM definition */
diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c
index 9748c19b2c3..c489ca874cc 100644
--- a/src/mess/drivers/victor9k.c
+++ b/src/mess/drivers/victor9k.c
@@ -13,6 +13,12 @@
TODO:
+ - centronics
+ - expansion bus
+ - Z80 card
+ - Winchester DMA card (Xebec S1410 + Tandon TM502/TM603SE)
+ - RAM cards
+ - clock cards
- floppy 8048
- keyboard
- hires graphics
@@ -20,7 +26,6 @@
- brightness/contrast
- MC6852
- codec sound
- - hard disk (Tandon TM502, TM603SE)
*/
diff --git a/src/mess/layout/cnsector.lay b/src/mess/layout/cnsector.lay
new file mode 100644
index 00000000000..9c7c22c7baf
--- /dev/null
+++ b/src/mess/layout/cnsector.lay
@@ -0,0 +1,143 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_white"><rect><color red="0.95" green="0.95" blue="0.95" /></rect></element>
+ <element name="static_gray"><rect><color red="0.60" green="0.75" blue="0.63" /></rect></element>
+ <element name="static_red"><rect><color red="0.35" green="0.02" blue="0.04" /></rect></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.25" blue="0.20" /></led7seg>
+ </element>
+
+ <element name="lamp" defstate="0">
+ <disk state="1"><color red="1.0" green="0.25" blue="0.20" /></disk>
+ <disk state="0"><color red="0.2" green="0.0" blue="0.0" /></disk>
+ </element>
+
+ <element name="text_ship">
+ <text string="SHIP"><color red="0.95" green="0.95" blue="0.95" /></text>
+ </element>
+ <element name="text_speed">
+ <text string="SPEED"><color red="0.95" green="0.95" blue="0.95" /></text>
+ </element>
+
+ <element name="text_north">
+ <text string="NORTH" align="2"><color red="0.95" green="0.95" blue="0.95" /></text>
+ </element>
+ <element name="text_east">
+ <text string="EAST" align="1"><color red="0.95" green="0.95" blue="0.95" /></text>
+ </element>
+
+ <element name="text_depth">
+ <text string="DEPTH"><color red="0.95" green="0.95" blue="0.95" /></text>
+ </element>
+ <element name="text_range">
+ <text string="RANGE"><color red="0.95" green="0.95" blue="0.95" /></text>
+ </element>
+
+ <element name="text_n">
+ <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
+ <text string="N"><color red="0.88" green="0.85" blue="0.85" /></text>
+ </element>
+ <element name="text_s">
+ <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
+ <text string="S"><color red="0.88" green="0.85" blue="0.85" /></text>
+ </element>
+ <element name="text_e">
+ <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
+ <text string="E"><color red="0.88" green="0.85" blue="0.85" /></text>
+ </element>
+ <element name="text_w">
+ <rect><color red="0.35" green="0.02" blue="0.04" /></rect>
+ <text string="W"><color red="0.88" green="0.85" blue="0.85" /></text>
+ </element>
+
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="92" top="0" bottom="146" />
+ <bezel element="static_black">
+ <bounds left="0" right="92" top="0" bottom="146" />
+ </bezel>
+
+ <!-- digits -->
+
+ <bezel element="static_white"><bounds x="0" y="4" width="100" height="1" /></bezel>
+ <bezel element="static_white"><bounds x="0" y="12" width="100" height="1" /></bezel>
+
+ <bezel element="static_white"><bounds x="20" y="4.5" width="1" height="40" /></bezel>
+ <bezel element="static_white"><bounds x="41" y="4.5" width="1" height="40" /></bezel>
+
+ <bezel element="static_white"><bounds x="67" y="4.5" width="1" height="8" /></bezel>
+
+ <bezel element="static_white"><bounds x="20.5" y="36" width="80" height="1" /></bezel>
+ <bezel element="static_white"><bounds x="0" y="44" width="100" height="1" /></bezel>
+
+ <bezel element="text_ship"><bounds x="0" y="5" width="20" height="7" /></bezel>
+ <bezel element="text_speed"><bounds x="21" y="5" width="20" height="7" /></bezel>
+
+ <bezel element="text_north"><bounds x="47" y="5" width="19" height="7" /></bezel>
+ <bezel element="text_east"><bounds x="69" y="5" width="19" height="7" /></bezel>
+
+ <bezel element="text_depth"><bounds x="21" y="37" width="20" height="7" /></bezel>
+ <bezel element="text_range"><bounds x="57" y="37" width="20" height="7" /></bezel>
+
+
+ <bezel name="digit5" element="digit">
+ <bounds x="5" y="17" width="10" height="15" />
+ </bezel>
+
+ <bezel name="digit4" element="digit">
+ <bounds x="26" y="17" width="10" height="15" />
+ </bezel>
+
+ <bezel name="digit3" element="digit">
+ <bounds x="47" y="17" width="10" height="15" />
+ </bezel>
+ <bezel name="digit2" element="digit">
+ <bounds x="57" y="17" width="10" height="15" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds x="67" y="17" width="10" height="15" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="77" y="17" width="10" height="15" />
+ </bezel>
+
+
+ <!-- compass -->
+
+ <bezel element="static_gray"><bounds x="0" y="50" width="100" height="100" /></bezel>
+ <bezel element="static_red"><bounds x="0" y="55" width="100" height="86" /></bezel>
+
+ <bezel name="lamp0" element="lamp">
+ <bounds x="42" y="62" width="8" height="8" />
+ </bezel>
+ <bezel name="lamp1" element="lamp">
+ <bounds x="42" y="126" width="8" height="8" />
+ </bezel>
+ <bezel name="lamp2" element="lamp">
+ <bounds x="74" y="94" width="8" height="8" />
+ </bezel>
+ <bezel name="lamp3" element="lamp">
+ <bounds x="10" y="94" width="8" height="8" />
+ </bezel>
+
+ <bezel element="text_n"><bounds x="41" y="72" width="10" height="10" /></bezel>
+ <bezel element="text_s"><bounds x="41" y="114" width="10" height="10" /></bezel>
+ <bezel element="text_e"><bounds x="63" y="93" width="10" height="10" /></bezel>
+ <bezel element="text_w"><bounds x="21" y="93" width="10" height="10" /></bezel>
+
+
+ <!-- crop borders -->
+
+ <bezel element="static_black"><bounds x="92" y="0" width="10" height="160" /></bezel>
+ <bezel element="static_black"><bounds x="0" y="146" width="100" height="10" /></bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mess/layout/comp4.lay b/src/mess/layout/comp4.lay
new file mode 100644
index 00000000000..5cca5e96dd9
--- /dev/null
+++ b/src/mess/layout/comp4.lay
@@ -0,0 +1,133 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_darkred"><rect><color red="0.20" green="0.04" blue="0.01" /></rect></element>
+
+ <element name="cg1"><rect><color red="0.85" green="0.85" blue="0.85" /></rect></element>
+ <element name="cg2"><rect><color red="0.74" green="0.76" blue="0.86" /></rect></element>
+ <element name="cg3"><rect><color red="0.63" green="0.67" blue="0.87" /></rect></element>
+ <element name="cg4"><rect><color red="0.52" green="0.58" blue="0.88" /></rect></element>
+ <element name="cg5"><rect><color red="0.41" green="0.49" blue="0.89" /></rect></element>
+
+ <element name="text_r">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="R" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_5">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="5" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_4">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="4" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_3">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="3" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_2">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="2" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+ <element name="text_1">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="1" align="2"><color red="0.87" green="0.87" blue="0.87" /></text>
+ </element>
+
+ <element name="text_num">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="NUMBER" align="1"><color red="0.85" green="0.85" blue="0.85" /></text>
+ </element>
+ <element name="text_seq">
+ <rect><color red="0.20" green="0.04" blue="0.01" /></rect>
+ <text string="SEQUENCE" align="2"><color red="0.85" green="0.85" blue="0.85" /></text>
+ </element>
+
+ <element name="lamp" defstate="0">
+ <rect><color red="0.85" green="0.85" blue="0.85" /></rect>
+ <rect>
+ <color red="0.20" green="0.04" blue="0.01" />
+ <bounds x="0.1" y="0.12" width="0.8" height="0.76" />
+ </rect>
+ <disk state="1">
+ <color red="1.0" green="0.20" blue="0.15" />
+ <bounds x="0.31" y="0.25" width="0.38" height="0.5" />
+ </disk>
+ <disk state="0">
+ <color red="0.3" green="0.05" blue="0.03" />
+ <bounds x="0.31" y="0.25" width="0.38" height="0.5" />
+ </disk>
+ </element>
+
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="60" top="0" bottom="42" />
+ <bezel element="static_darkred">
+ <bounds left="0" right="60" top="0" bottom="42" />
+ </bezel>
+
+ <bezel element="cg1"><bounds x="17" y="2" width="26" height="35" /></bezel>
+ <bezel element="cg2"><bounds x="19" y="2" width="22" height="35" /></bezel>
+ <bezel element="cg3"><bounds x="21" y="2" width="18" height="35" /></bezel>
+ <bezel element="cg4"><bounds x="23" y="2" width="14" height="35" /></bezel>
+ <bezel element="cg5"><bounds x="25" y="2" width="10" height="35" /></bezel>
+
+ <bezel element="static_darkred"><bounds x="27" y="1" width="6" height="40" /></bezel>
+ <bezel element="static_darkred"><bounds x="32" y="1.5" width="20" height="7" /></bezel>
+
+ <bezel element="static_darkred"><bounds x="16" y="8" width="40" height="1" /></bezel>
+ <bezel element="static_darkred"><bounds x="16" y="15" width="40" height="1" /></bezel>
+ <bezel element="static_darkred"><bounds x="16" y="22" width="40" height="1" /></bezel>
+ <bezel element="static_darkred"><bounds x="16" y="29" width="40" height="1" /></bezel>
+ <bezel element="static_darkred"><bounds x="16" y="36" width="40" height="5" /></bezel>
+
+ <bezel element="text_r"><bounds x="36" y="1.5" width="7" height="7" /></bezel>
+
+ <bezel element="text_5"><bounds x="27" y="1.5" width="5" height="7" /></bezel>
+ <bezel element="text_4"><bounds x="27" y="8.5" width="5" height="7" /></bezel>
+ <bezel element="text_3"><bounds x="27" y="15.5" width="5" height="7" /></bezel>
+ <bezel element="text_2"><bounds x="27" y="22.5" width="5" height="7" /></bezel>
+ <bezel element="text_1"><bounds x="27" y="29.5" width="5" height="7" /></bezel>
+
+ <bezel element="text_num"><bounds x="8" y="36.5" width="22" height="3.5" /></bezel>
+ <bezel element="text_seq"><bounds x="30" y="36.5" width="22" height="3.5" /></bezel>
+
+ <bezel name="lamp4" element="lamp">
+ <bounds x="8" y="2" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp10" element="lamp">
+ <bounds x="8" y="9" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp2" element="lamp">
+ <bounds x="8" y="16" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp1" element="lamp">
+ <bounds x="8" y="23" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp0" element="lamp">
+ <bounds x="8" y="30" width="8" height="6" />
+ </bezel>
+
+ <bezel name="lamp9" element="lamp">
+ <bounds x="44" y="2" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp8" element="lamp">
+ <bounds x="44" y="9" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp7" element="lamp">
+ <bounds x="44" y="16" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp6" element="lamp">
+ <bounds x="44" y="23" width="8" height="6" />
+ </bezel>
+ <bezel name="lamp5" element="lamp">
+ <bounds x="44" y="30" width="8" height="6" />
+ </bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mess/layout/merlin.lay b/src/mess/layout/merlin.lay
index d9e47ebf09e..32d5691e253 100644
--- a/src/mess/layout/merlin.lay
+++ b/src/mess/layout/merlin.lay
@@ -256,7 +256,7 @@
<bezel name="lamp0" element="led">
<bounds x="34" y="20" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.0" inputmask="0x01">
+ <bezel element="button" inputtag="IN.0" inputmask="0x01">
<bounds x="34" y="20" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -267,7 +267,7 @@
<bezel name="lamp1" element="led">
<bounds x="10" y="44" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.0" inputmask="0x02">
+ <bezel element="button" inputtag="IN.0" inputmask="0x02">
<bounds x="10" y="44" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -277,7 +277,7 @@
<bezel name="lamp2" element="led">
<bounds x="34" y="44" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.0" inputmask="0x08">
+ <bezel element="button" inputtag="IN.0" inputmask="0x08">
<bounds x="34" y="44" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -287,7 +287,7 @@
<bezel name="lamp3" element="led">
<bounds x="58" y="44" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.0" inputmask="0x04">
+ <bezel element="button" inputtag="IN.0" inputmask="0x04">
<bounds x="58" y="44" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -298,7 +298,7 @@
<bezel name="lamp4" element="led">
<bounds x="10" y="68" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.1" inputmask="0x01">
+ <bezel element="button" inputtag="IN.1" inputmask="0x01">
<bounds x="10" y="68" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -308,7 +308,7 @@
<bezel name="lamp5" element="led">
<bounds x="34" y="68" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.1" inputmask="0x02">
+ <bezel element="button" inputtag="IN.1" inputmask="0x02">
<bounds x="34" y="68" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -318,7 +318,7 @@
<bezel name="lamp6" element="led">
<bounds x="58" y="68" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.1" inputmask="0x08">
+ <bezel element="button" inputtag="IN.1" inputmask="0x08">
<bounds x="58" y="68" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -329,7 +329,7 @@
<bezel name="lamp7" element="led">
<bounds x="10" y="92" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.1" inputmask="0x04">
+ <bezel element="button" inputtag="IN.1" inputmask="0x04">
<bounds x="10" y="92" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -339,7 +339,7 @@
<bezel name="lamp8" element="led">
<bounds x="34" y="92" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.2" inputmask="0x01">
+ <bezel element="button" inputtag="IN.2" inputmask="0x01">
<bounds x="34" y="92" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -349,7 +349,7 @@
<bezel name="lamp9" element="led">
<bounds x="58" y="92" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.2" inputmask="0x02">
+ <bezel element="button" inputtag="IN.2" inputmask="0x02">
<bounds x="58" y="92" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -360,7 +360,7 @@
<bezel name="lamp10" element="led">
<bounds x="34" y="116" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.2" inputmask="0x08">
+ <bezel element="button" inputtag="IN.2" inputmask="0x08">
<bounds x="34" y="116" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -371,7 +371,7 @@
<bezel element="panel_newgame">
<bounds x="21" y="156" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.3" inputmask="0x08">
+ <bezel element="button" inputtag="IN.3" inputmask="0x08">
<bounds x="21" y="156" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -379,7 +379,7 @@
<bezel element="panel_samegame">
<bounds x="47" y="156" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.2" inputmask="0x04">
+ <bezel element="button" inputtag="IN.2" inputmask="0x04">
<bounds x="47" y="156" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -387,7 +387,7 @@
<bezel element="panel_hitme">
<bounds x="21" y="182" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.3" inputmask="0x04">
+ <bezel element="button" inputtag="IN.3" inputmask="0x04">
<bounds x="21" y="182" width="20" height="20" />
<color alpha="0.2" />
</bezel>
@@ -395,7 +395,7 @@
<bezel element="panel_compturn">
<bounds x="47" y="182" width="20" height="20" />
</bezel>
- <bezel element="button" inputtag="O.3" inputmask="0x02">
+ <bezel element="button" inputtag="IN.3" inputmask="0x02">
<bounds x="47" y="182" width="20" height="20" />
<color alpha="0.2" />
</bezel>
diff --git a/src/mess/layout/starwbc.lay b/src/mess/layout/starwbc.lay
new file mode 100644
index 00000000000..0005b6c679a
--- /dev/null
+++ b/src/mess/layout/starwbc.lay
@@ -0,0 +1,127 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- define elements -->
+
+ <element name="static_black"><rect><color red="0.0" green="0.0" blue="0.0" /></rect></element>
+ <element name="static_yellow"><rect><color red="0.67" green="0.65" blue="0.1" /></rect></element>
+ <element name="static_red"><rect><color red="0.6" green="0.05" blue="0.0" /></rect></element>
+ <element name="static_gray"><rect><color red="0.66" green="0.66" blue="0.66" /></rect></element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.25" blue="0.23" /></led7seg>
+ </element>
+
+ <element name="lamp" defstate="0">
+ <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
+ <disk state="1">
+ <color red="1.0" green="0.25" blue="0.23" />
+ <bounds x="0.4" y="0.4" width="0.2" height="0.2" />
+ </disk>
+ <disk state="0">
+ <color red="0.2" green="0.05" blue="0.04" />
+ <bounds x="0.4" y="0.4" width="0.2" height="0.2" />
+ </disk>
+ </element>
+
+ <element name="nlamp" defstate="0">
+ <disk state="1"><color red="1.0" green="0.25" blue="0.23" /></disk>
+ <disk state="0"><color red="0.2" green="0.05" blue="0.04" /></disk>
+ </element>
+
+ <element name="text_a"><text string="A"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_b"><text string="B"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_c"><text string="C"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_d"><text string="D"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+
+ <element name="text_1"><text string="1"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_2"><text string="2"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_3"><text string="3"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_4"><text string="4"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+
+ <element name="text_alert"><text string="ALERT"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_combat"><text string="COMBAT"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_force"><text string="FORCE UNITS"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+ <element name="text_players"><text string="PLAYERS"><color red="0.69" green="0.69" blue="0.69" /></text></element>
+
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="165" top="0" bottom="105" />
+
+ <bezel element="static_yellow"><bounds x="3" y="17" width="10" height="83" /></bezel>
+ <bezel element="static_black"><bounds x="4" y="18" width="8" height="81" /></bezel>
+
+ <bezel element="static_red"><bounds x="17" y="3" width="83" height="10" /></bezel>
+ <bezel element="static_black"><bounds x="18" y="4" width="81" height="8" /></bezel>
+
+ <bezel element="static_yellow"><bounds x="3.5" y="38" width="9" height="1" /></bezel>
+ <bezel element="static_yellow"><bounds x="3.5" y="58" width="9" height="1" /></bezel>
+ <bezel element="static_yellow"><bounds x="3.5" y="78" width="9" height="1" /></bezel>
+
+ <bezel element="static_red"><bounds x="38" y="3.5" width="1" height="9" /></bezel>
+ <bezel element="static_red"><bounds x="58" y="3.5" width="1" height="9" /></bezel>
+ <bezel element="static_red"><bounds x="78" y="3.5" width="1" height="9" /></bezel>
+
+ <bezel element="text_a"><bounds x="4" y="24.5" width="8" height="8" /></bezel>
+ <bezel element="text_b"><bounds x="4" y="44.5" width="8" height="8" /></bezel>
+ <bezel element="text_c"><bounds x="4" y="64.5" width="8" height="8" /></bezel>
+ <bezel element="text_d"><bounds x="4" y="84.5" width="8" height="8" /></bezel>
+
+ <bezel element="text_1"><bounds x="24.5" y="4" width="8" height="8" /></bezel>
+ <bezel element="text_2"><bounds x="44.5" y="4" width="8" height="8" /></bezel>
+ <bezel element="text_3"><bounds x="64.5" y="4" width="8" height="8" /></bezel>
+ <bezel element="text_4"><bounds x="84.5" y="4" width="8" height="8" /></bezel>
+
+
+ <!-- lamp matrix -->
+
+ <bezel element="static_gray"><bounds x="17" y="17" width="83" height="83" /></bezel>
+
+ <bezel name="lamp20" element="lamp"><bounds x="20" y="20" width="17" height="17" /></bezel>
+ <bezel name="lamp21" element="lamp"><bounds x="40" y="20" width="17" height="17" /></bezel>
+ <bezel name="lamp22" element="lamp"><bounds x="60" y="20" width="17" height="17" /></bezel>
+ <bezel name="lamp23" element="lamp"><bounds x="80" y="20" width="17" height="17" /></bezel>
+
+ <bezel name="lamp24" element="lamp"><bounds x="20" y="40" width="17" height="17" /></bezel>
+ <bezel name="lamp25" element="lamp"><bounds x="40" y="40" width="17" height="17" /></bezel>
+ <bezel name="lamp26" element="lamp"><bounds x="60" y="40" width="17" height="17" /></bezel>
+ <bezel name="lamp27" element="lamp"><bounds x="80" y="40" width="17" height="17" /></bezel>
+
+ <bezel name="lamp40" element="lamp"><bounds x="20" y="60" width="17" height="17" /></bezel>
+ <bezel name="lamp41" element="lamp"><bounds x="40" y="60" width="17" height="17" /></bezel>
+ <bezel name="lamp42" element="lamp"><bounds x="60" y="60" width="17" height="17" /></bezel>
+ <bezel name="lamp43" element="lamp"><bounds x="80" y="60" width="17" height="17" /></bezel>
+
+ <bezel name="lamp44" element="lamp"><bounds x="20" y="80" width="17" height="17" /></bezel>
+ <bezel name="lamp45" element="lamp"><bounds x="40" y="80" width="17" height="17" /></bezel>
+ <bezel name="lamp46" element="lamp"><bounds x="60" y="80" width="17" height="17" /></bezel>
+ <bezel name="lamp47" element="lamp"><bounds x="80" y="80" width="17" height="17" /></bezel>
+
+
+ <!-- right side -->
+
+ <bezel element="static_gray"><bounds x="105" y="17" width="55" height="23" /></bezel>
+ <bezel element="static_black"><bounds x="106" y="18" width="53" height="21" /></bezel>
+ <bezel element="text_alert"><bounds x="106" y="18.5" width="53" height="8" /></bezel>
+
+ <bezel name="lamp5" element="nlamp"><bounds x="130.8" y="30.5" width="3.4" height="3.4" /></bezel>
+
+ <bezel element="static_gray"><bounds x="105" y="43" width="55" height="23" /></bezel>
+ <bezel element="static_black"><bounds x="106" y="44" width="53" height="21" /></bezel>
+ <bezel element="text_combat"><bounds x="106" y="44.5" width="53" height="8" /></bezel>
+
+ <bezel name="lamp4" element="nlamp"><bounds x="130.8" y="56.5" width="3.4" height="3.4" /></bezel>
+
+ <bezel element="static_gray"><bounds x="105" y="69" width="55" height="31" /></bezel>
+ <bezel element="static_black"><bounds x="106" y="70" width="53" height="29" /></bezel>
+ <bezel element="text_force"><bounds x="106" y="70.5" width="53" height="8" /></bezel>
+ <bezel element="text_players"><bounds x="106" y="90" width="53" height="8" /></bezel>
+
+ <bezel name="digit6" element="digit"><bounds x="126" y="79.7" width="6" height="9" /></bezel>
+ <bezel name="digit8" element="digit"><bounds x="132" y="79.7" width="6" height="9" /></bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mess/layout/stopthie.lay b/src/mess/layout/stopthie.lay
index b54c4d84e68..8efd28b6f8d 100644
--- a/src/mess/layout/stopthie.lay
+++ b/src/mess/layout/stopthie.lay
@@ -1,18 +1,32 @@
<?xml version="1.0"?>
<mamelayout version="2">
- <element name="background">
- <rect>
- <bounds left="0" top="0" right="1" bottom="1" />
- <color red="0.0" green="0.0" blue="0.0" />
- </rect>
+
+<!-- define elements -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.22" blue="0.18" /></led7seg>
</element>
- <view name="Default Layout">
+ <element name="text_bldg"><text string="BLDG."><color red="0.7" green="0.7" blue="0.7" /></text></element>
+ <element name="text_street"><text string="STREET"><color red="0.7" green="0.7" blue="0.7" /></text></element>
+ <element name="text_loc"><text string="LOC."><color red="0.7" green="0.7" blue="0.7" /></text></element>
+
+
+
+<!-- build screen -->
+
+ <view name="Internal Layout">
+ <bounds left="0" right="80" top="0" bottom="15" />
+
+ <bezel name="digit2" element="digit"><bounds x="20" y="0" width="10" height="15" /></bezel>
+ <bezel name="digit1" element="digit"><bounds x="40" y="0" width="10" height="15" /></bezel>
+ <bezel name="digit0" element="digit"><bounds x="50" y="0" width="10" height="15" /></bezel>
+
+
+ <bezel element="text_bldg"><bounds x="0" y="1.5" width="20" height="5.5" /></bezel>
+ <bezel element="text_street"><bounds x="0" y="7.5" width="20" height="5.5" /></bezel>
- <!-- Black background -->
- <bezel element="background">
- <bounds left="0" top="0" right="200" bottom="200" />
- </bezel>
+ <bezel element="text_loc"><bounds x="60" y="4.5" width="20" height="5.5" /></bezel>
</view>
</mamelayout>
diff --git a/src/mess/layout/ti1270.lay b/src/mess/layout/ti1270.lay
new file mode 100644
index 00000000000..5c411ba99d8
--- /dev/null
+++ b/src/mess/layout/ti1270.lay
@@ -0,0 +1,39 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
+ </element>
+
+ <view name="Internal Layout">
+ <bounds left="0" right="80" top="0" bottom="15" />
+
+ <bezel name="digit7" element="digit">
+ <bounds x="0" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit6" element="digit">
+ <bounds x="10" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit5" element="digit">
+ <bounds x="20" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit4" element="digit">
+ <bounds x="30" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit3" element="digit">
+ <bounds x="40" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit2" element="digit">
+ <bounds x="50" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds x="60" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="70" y="0" width="10" height="15" />
+ </bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mess/layout/ti30.lay b/src/mess/layout/ti30.lay
new file mode 100644
index 00000000000..d106c98135c
--- /dev/null
+++ b/src/mess/layout/ti30.lay
@@ -0,0 +1,42 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
+ </element>
+
+ <view name="Internal Layout">
+ <bounds left="0" right="90" top="0" bottom="15" />
+
+ <bezel name="digit0" element="digit">
+ <bounds x="0" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds x="10" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit2" element="digit">
+ <bounds x="20" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit3" element="digit">
+ <bounds x="30" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit4" element="digit">
+ <bounds x="40" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit5" element="digit">
+ <bounds x="50" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit6" element="digit">
+ <bounds x="60" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit7" element="digit">
+ <bounds x="70" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit8" element="digit">
+ <bounds x="80" y="0" width="10" height="15" />
+ </bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mess/layout/tisr16.lay b/src/mess/layout/tisr16.lay
new file mode 100644
index 00000000000..90e582f832c
--- /dev/null
+++ b/src/mess/layout/tisr16.lay
@@ -0,0 +1,51 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.15" blue="0.08" /></led7seg>
+ </element>
+
+ <view name="Internal Layout">
+ <bounds left="0" right="120" top="0" bottom="15" />
+
+ <bezel name="digit10" element="digit">
+ <bounds x="0" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit9" element="digit">
+ <bounds x="10" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit8" element="digit">
+ <bounds x="20" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit7" element="digit">
+ <bounds x="30" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit6" element="digit">
+ <bounds x="40" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit5" element="digit">
+ <bounds x="50" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit4" element="digit">
+ <bounds x="60" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit3" element="digit">
+ <bounds x="70" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit2" element="digit">
+ <bounds x="80" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit11" element="digit">
+ <bounds x="90" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds x="100" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="110" y="0" width="10" height="15" />
+ </bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mess/layout/wizatron.lay b/src/mess/layout/wizatron.lay
new file mode 100644
index 00000000000..d44016c2f66
--- /dev/null
+++ b/src/mess/layout/wizatron.lay
@@ -0,0 +1,68 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+
+<!-- note: the digits were very small, wide space between them, and not the same style as (MAME's-)default -->
+<!-- note 2: yes, the PLUS sign is supposed to be lopsided like that -->
+<!-- note 3: yes, the EQUALS sign is supposed to be that high up, but newer releases improved this -->
+
+ <element name="static_black">
+ <rect><color red="0.0" green="0.0" blue="0.0" /></rect>
+ </element>
+
+ <element name="digit" defstate="0">
+ <led7seg><color red="1.0" green="0.3" blue="0.2" /></led7seg>
+ </element>
+ <element name="digit14" defstate="0">
+ <led14seg><color red="1.0" green="0.3" blue="0.2" /></led14seg>
+ </element>
+
+
+ <view name="Internal Layout">
+ <bounds left="0" right="90" top="0" bottom="15" />
+
+ <bezel name="digit8" element="digit">
+ <bounds x="0" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit7" element="digit">
+ <bounds x="10" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit6" element="digit14">
+ <bounds x="20" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit5" element="digit">
+ <bounds x="30" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit4" element="digit">
+ <bounds x="40" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit3" element="digit">
+ <bounds x="50" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit2" element="digit">
+ <bounds x="60" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit1" element="digit">
+ <bounds x="70" y="0" width="10" height="15" />
+ </bezel>
+ <bezel name="digit0" element="digit">
+ <bounds x="80" y="0" width="10" height="15" />
+ </bezel>
+
+<!-- mask out DIVIDE sign -->
+
+ <bezel element="static_black">
+ <bounds x="24.5" y="1.80" width="1.8" height="2.00" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds x="24.3" y="5.1" width="1.75" height="1.3" />
+ </bezel>
+
+ <bezel element="static_black">
+ <bounds x="23.75" y="11.25" width="1.8" height="2.00" />
+ </bezel>
+ <bezel element="static_black">
+ <bounds x="23.95" y="8.65" width="1.75" height="1.3" />
+ </bezel>
+
+ </view>
+</mamelayout>
diff --git a/src/mess/machine/ngen_kb.c b/src/mess/machine/ngen_kb.c
new file mode 100644
index 00000000000..498a49dd7fb
--- /dev/null
+++ b/src/mess/machine/ngen_kb.c
@@ -0,0 +1,219 @@
+// Convergent NGEN keyboard device
+
+#include "ngen_kb.h"
+
+ngen_keyboard_device::ngen_keyboard_device(const machine_config& mconfig, const char* tag, device_t* owner, UINT32 clock) :
+ serial_keyboard_device(mconfig, NGEN_KEYBOARD, "NGEN Keyboard", tag, owner, 0, "ngen_keyboard", __FILE__),
+ m_keys_down(false)
+{
+}
+
+
+void ngen_keyboard_device::write(UINT8 data)
+{
+ // To be figured out
+ logerror("KB: received character %02x\n",data);
+}
+
+UINT8 ngen_keyboard_device::row_number(UINT8 code)
+{
+ if BIT(code,0) return 0;
+ if BIT(code,1) return 1;
+ if BIT(code,2) return 2;
+ if BIT(code,3) return 3;
+ if BIT(code,4) return 4;
+ if BIT(code,5) return 5;
+ if BIT(code,6) return 6;
+ if BIT(code,7) return 7;
+ return 0;
+}
+
+UINT8 ngen_keyboard_device::keyboard_handler(UINT8 last_code, UINT8 *scan_line)
+{
+ int i;
+ UINT8 code = 0;
+ UINT8 key_code = 0;
+ UINT8 retVal = 0;
+ UINT8 shift = BIT(m_io_kbdc->read(), 1);
+ UINT8 caps = BIT(m_io_kbdc->read(), 2);
+ UINT8 ctrl = BIT(m_io_kbdc->read(), 0);
+ i = *scan_line;
+ {
+ if (i == 0) code = m_io_kbd0->read();
+ else
+ if (i == 1) code = m_io_kbd1->read();
+ else
+ if (i == 2) code = m_io_kbd2->read();
+ else
+ if (i == 3) code = m_io_kbd3->read();
+ else
+ if (i == 4) code = m_io_kbd4->read();
+ else
+ if (i == 5) code = m_io_kbd5->read();
+ else
+ if (i == 6) code = m_io_kbd6->read();
+ else
+ if (i == 7) code = m_io_kbd7->read();
+ else
+ if (i == 8) code = m_io_kbd8->read();
+ else
+ if (i == 9) code = m_io_kbd9->read();
+
+ if (code != 0)
+ {
+ if (i==0 && shift==0) {
+ key_code = 0x30 + row_number(code) + 8*i; // for numbers and some signs
+ }
+ if (i==0 && shift==1) {
+ key_code = 0x20 + row_number(code) + 8*i; // for shifted numbers
+ }
+ if (i==1 && shift==0) {
+ if (row_number(code) < 4) {
+ key_code = 0x30 + row_number(code) + 8*i; // for numbers and some signs
+ } else {
+ key_code = 0x20 + row_number(code) + 8*i; // for numbers and some signs
+ }
+ }
+ if (i==1 && shift==1) {
+ if (row_number(code) < 4) {
+ key_code = 0x20 + row_number(code) + 8*i; // for numbers and some signs
+ } else {
+ key_code = 0x30 + row_number(code) + 8*i; // for numbers and some signs
+ }
+ }
+ if (i>=2 && i<=4 && (shift ^ caps)==0 && ctrl==0) {
+ key_code = 0x60 + row_number(code) + (i-2)*8; // for small letters
+ }
+ if (i>=2 && i<=4 && (shift ^ caps)==1 && ctrl==0) {
+ key_code = 0x40 + row_number(code) + (i-2)*8; // for big letters
+ }
+ if (i>=2 && i<=5 && ctrl==1) {
+ key_code = 0x00 + row_number(code) + (i-2)*8; // for CTRL + letters
+ }
+ if (i==5 && shift==1 && ctrl==0) {
+ if (row_number(code)<7) {
+ if (row_number(code)<3) {
+ key_code = (caps ? 0x60 : 0x40) + row_number(code) + (i-2)*8; // for big letters
+ } else {
+ key_code = 0x60 + row_number(code) + (i-2)*8; // for upper symbols letters
+ }
+ } else {
+ key_code = 0x40 + row_number(code) + (i-2)*8; // for DEL it is switched
+ }
+ }
+ if (i==5 && shift==0 && ctrl==0) {
+ if (row_number(code)<7) {
+ if (row_number(code)<3) {
+ key_code = (caps ? 0x40 : 0x60) + row_number(code) + (i-2)*8; // for small letters
+ } else {
+ key_code = 0x40 + row_number(code) + (i-2)*8; // for lower symbols letters
+ }
+ } else {
+ key_code = 0x60 + row_number(code) + (i-2)*8; // for DEL it is switched
+ }
+ }
+
+ if (i==6) {
+ switch(row_number(code))
+ {
+/* case 0: key_code = 0x11; break;
+ case 1: key_code = 0x12; break;
+ case 2: key_code = 0x13; break;
+ case 3: key_code = 0x14; break;*/
+ case 4: key_code = 0x20; break; // Space
+ case 5: key_code = 0x0A; break; // LineFeed
+ case 6: key_code = 0x09; break; // TAB
+ case 7: key_code = 0x0D; break; // Enter
+ }
+ }
+ if (i==7)
+ {
+ switch(row_number(code))
+ {
+ case 0: key_code = 0x1B; break; // Escape
+ case 1: key_code = 0x08; break; // Backspace
+ }
+ }
+ else
+ if (i==8)
+ {
+ key_code = row_number(code)+0x81;
+ if (ctrl) key_code+=0x10;
+ if (shift) key_code+=0x20;
+ }
+ else
+ if (i==9)
+ {
+ key_code = row_number(code)+0x89;
+ if (ctrl) key_code+=0x10;
+ if (shift) key_code+=0x20;
+ }
+ m_keys_down = true;
+ retVal = key_code;
+ }
+ else
+ {
+ *scan_line += 1;
+ if (*scan_line==10)
+ *scan_line = 0;
+ if(m_keys_down)
+ {
+ retVal = 0xc0;
+ m_keys_down = false;
+ }
+ }
+ }
+ // TODO: add scan code 0xc0 (all keys up)
+ return retVal;
+}
+
+static INPUT_PORTS_START( ngen_keyboard )
+ PORT_INCLUDE(generic_keyboard)
+
+ PORT_START("RS232_TXBAUD")
+ PORT_CONFNAME(0xff, RS232_BAUD_19200, "TX Baud") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
+ PORT_CONFSETTING( RS232_BAUD_19200, "19200") // TODO: Based on the RAM refresh timer (~78kHz) to be 19530Hz
+
+ PORT_START("RS232_STARTBITS")
+ PORT_CONFNAME(0xff, RS232_STARTBITS_1, "Start Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
+ PORT_CONFSETTING( RS232_STARTBITS_1, "1")
+
+ PORT_START("RS232_DATABITS")
+ PORT_CONFNAME(0xff, RS232_DATABITS_8, "Data Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
+ PORT_CONFSETTING( RS232_DATABITS_8, "8")
+
+ PORT_START("RS232_PARITY")
+ PORT_CONFNAME(0xff, RS232_PARITY_NONE, "Parity") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
+ PORT_CONFSETTING( RS232_PARITY_NONE, "None")
+
+ PORT_START("RS232_STOPBITS")
+ PORT_CONFNAME(0xff, RS232_STOPBITS_2, "Stop Bits") PORT_WRITE_LINE_DEVICE_MEMBER(DEVICE_SELF, serial_keyboard_device, update_serial)
+ PORT_CONFSETTING( RS232_STOPBITS_2, "2")
+INPUT_PORTS_END
+
+
+ioport_constructor ngen_keyboard_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(ngen_keyboard);
+}
+
+void ngen_keyboard_device::device_start()
+{
+ serial_keyboard_device::device_start();
+ set_rcv_rate(19200);
+}
+
+void ngen_keyboard_device::device_reset()
+{
+ serial_keyboard_device::device_reset();
+ m_keys_down = false;
+}
+
+void ngen_keyboard_device::rcv_complete()
+{
+ receive_register_extract();
+ write(get_received_char());
+}
+
+const device_type NGEN_KEYBOARD = &device_creator<ngen_keyboard_device>;
+
diff --git a/src/mess/machine/ngen_kb.h b/src/mess/machine/ngen_kb.h
new file mode 100644
index 00000000000..09efc237666
--- /dev/null
+++ b/src/mess/machine/ngen_kb.h
@@ -0,0 +1,30 @@
+// Convergent NGEN keyboard
+
+#ifndef NGEN_KB_H_
+#define NGEN_KB_H_
+
+#include "bus/rs232/keyboard.h"
+
+class ngen_keyboard_device : public serial_keyboard_device
+{
+public:
+ ngen_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ virtual ioport_constructor device_input_ports() const;
+ virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) {/* printf("TX: %i\n",state);*/ device_serial_interface::rx_w(state); }
+
+protected:
+ virtual void device_start();
+ virtual void device_reset();
+ virtual void rcv_complete();
+
+private:
+ virtual UINT8 keyboard_handler(UINT8 last_code, UINT8 *scan_line);
+ UINT8 row_number(UINT8 code);
+ void write(UINT8 data);
+
+ bool m_keys_down;
+};
+
+extern const device_type NGEN_KEYBOARD;
+
+#endif /* NGENKB_H_ */
diff --git a/src/mess/machine/victor9k_fdc.c b/src/mess/machine/victor9k_fdc.c
index 9d16f9ca244..4f2dcd3180a 100644
--- a/src/mess/machine/victor9k_fdc.c
+++ b/src/mess/machine/victor9k_fdc.c
@@ -11,9 +11,30 @@
/*
+ value error description
+
+ 01 no sync pulse detected
+ 02 no header track
+ 03 checksum error in header
+ 04 not right track
+ 05 not right sector
+ 06 not a data block
+ 07 data checksum error
+ 08 sync too long
+ 99 not a system disc
+
+*/
+
+/*
+
TODO:
- - disk error 2 (cannot find block header?)
+ - communication error with SCP after loading boot sector
+ - bp ff1a8
+ - patch ff1ab=c3
+ - data block checksum errors loading header track
+ - bp ff46a (ax = checksum read from disk, dx = calculated checksum)
+ - bit stream is offset by 1 bit at some point
- 8048 spindle speed control
- read PLL
- write logic
@@ -37,6 +58,19 @@
#define M6522_5_TAG "1k"
#define M6522_6_TAG "1h"
+// this is exactly the same decode as used in the Commodore 4040/8050 series drives
+#define GCR_DECODE(_e, _i) \
+ ((BIT(_e, 6) << 7) | (BIT(_i, 7) << 6) | (_e & 0x33) | (BIT(_e, 2) << 3) | (_i & 0x04))
+
+// Tandon TM-100 spindle @ 300RPM, measured TACH 12VAC 256Hz
+// TACH = RPM / 60 * SPINDLE RATIO * MOTOR POLES
+// 256 = 300 / 60 * 6.4 * 8
+#define SPINDLE_RATIO 6.4
+#define MOTOR_POLES 8
+
+// TODO wrong values here! motor speed is controlled by an LM2917, with help from the spindle TACH and a DAC0808 whose value is set by the SCP 8048
+const int victor_9000_fdc_t::rpm[] = { 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 254, 255, 257, 259, 260, 262, 264, 266, 267, 269, 271, 273, 275, 276, 278, 280, 282, 284, 286, 288, 290, 291, 293, 295, 297, 299, 301, 303, 305, 307, 309, 311, 313, 315, 318, 320, 322, 324, 326, 328, 330, 333, 335, 337, 339, 342, 344, 346, 348, 351, 353, 355, 358, 360, 362, 365, 367, 370, 372, 375, 377, 380, 382, 385, 387, 390, 392, 395, 398, 400, 403, 406, 408, 411, 414, 416, 419, 422, 425, 428, 430, 433, 436, 439, 442, 445, 448, 451, 454, 457, 460, 463, 466, 469, 472, 475, 478, 482, 485, 488, 491, 494, 498, 501, 504, 508, 511, 514, 518, 521, 525, 528, 532, 535, 539, 542, 546, 550, 553, 557, 561, 564, 568, 572, 576, 579, 583, 587, 591, 595, 599, 603, 607, 611, 615, 619, 623, 627, 631, 636, 640, 644, 648, 653, 657, 661, 666, 670, 674, 679, 683, 688, 693, 697, 702, 706, 711, 716, 721, 725, 730, 735, 740, 745, 750, 755, 760, 765, 770, 775, 780, 785, 790, 796, 801, 806, 812, 817, 822, 828, 833, 839, 844, 850, 856, 861, 867, 873, 878, 884 };
+
//**************************************************************************
@@ -74,7 +108,7 @@ const rom_entry *victor_9000_fdc_t::device_rom_region() const
//-------------------------------------------------
static ADDRESS_MAP_START( floppy_io, AS_IO, 8, victor_9000_fdc_t )
- AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READ(floppy_p1_r) AM_WRITENOP
+ AM_RANGE(MCS48_PORT_P1, MCS48_PORT_P1) AM_READWRITE(floppy_p1_r, floppy_p1_w)
AM_RANGE(MCS48_PORT_P2, MCS48_PORT_P2) AM_READWRITE(floppy_p2_r, floppy_p2_w)
AM_RANGE(MCS48_PORT_T0, MCS48_PORT_T0) AM_READ(tach0_r)
AM_RANGE(MCS48_PORT_T1, MCS48_PORT_T1) AM_READ(tach1_r)
@@ -88,6 +122,7 @@ ADDRESS_MAP_END
int victor_9000_fdc_t::load0_cb(floppy_image_device *device)
{
+ // DOOR OPEN 0
m_via4->write_ca1(0);
return IMAGE_INIT_PASS;
@@ -95,11 +130,13 @@ int victor_9000_fdc_t::load0_cb(floppy_image_device *device)
void victor_9000_fdc_t::unload0_cb(floppy_image_device *device)
{
+ // DOOR OPEN 0
m_via4->write_ca1(1);
}
int victor_9000_fdc_t::load1_cb(floppy_image_device *device)
{
+ // DOOR OPEN 1
m_via4->write_cb1(0);
return IMAGE_INIT_PASS;
@@ -107,6 +144,7 @@ int victor_9000_fdc_t::load1_cb(floppy_image_device *device)
void victor_9000_fdc_t::unload1_cb(floppy_image_device *device)
{
+ // DOOR OPEN 1
m_via4->write_cb1(1);
}
@@ -129,7 +167,9 @@ static MACHINE_CONFIG_FRAGMENT( victor_9000_fdc )
MCFG_CPU_IO_MAP(floppy_io)
MCFG_DEVICE_ADD(M6522_4_TAG, VIA6522, XTAL_30MHz/30)
+ MCFG_VIA6522_READPA_HANDLER(READ8(victor_9000_fdc_t, via4_pa_r))
MCFG_VIA6522_WRITEPA_HANDLER(WRITE8(victor_9000_fdc_t, via4_pa_w))
+ MCFG_VIA6522_READPB_HANDLER(READ8(victor_9000_fdc_t, via4_pb_r))
MCFG_VIA6522_WRITEPB_HANDLER(WRITE8(victor_9000_fdc_t, via4_pb_w))
MCFG_VIA6522_CA2_HANDLER(WRITELINE(victor_9000_fdc_t, wrsync_w))
MCFG_VIA6522_IRQ_HANDLER(WRITELINE(victor_9000_fdc_t, via4_irq_w))
@@ -209,8 +249,6 @@ victor_9000_fdc_t::victor_9000_fdc_t(const machine_config &mconfig, const char *
m_via4_irq(CLEAR_LINE),
m_via5_irq(CLEAR_LINE),
m_via6_irq(CLEAR_LINE),
- m_syn(0),
- m_lbrdy(1),
m_period(attotime::from_nsec(2130))
{
cur_live.tm = attotime::never;
@@ -259,8 +297,6 @@ void victor_9000_fdc_t::device_start()
save_item(NAME(m_via4_irq));
save_item(NAME(m_via5_irq));
save_item(NAME(m_via6_irq));
- save_item(NAME(m_syn));
- save_item(NAME(m_lbrdy));
}
@@ -305,11 +341,13 @@ void victor_9000_fdc_t::device_timer(emu_timer &timer, device_timer_id id, int p
break;
case TM_TACH0:
- // TODO
+ m_tach0 = !m_tach0;
+ if (LOG_SCP) logerror("TACH0 %u\n", m_tach0);
break;
case TM_TACH1:
- // TODO
+ m_tach1 = !m_tach1;
+ if (LOG_SCP) logerror("TACH1 %u\n", m_tach1);
break;
}
}
@@ -341,12 +379,58 @@ READ8_MEMBER( victor_9000_fdc_t::floppy_p1_r )
//-------------------------------------------------
+// floppy_p1_w -
+//-------------------------------------------------
+
+WRITE8_MEMBER( victor_9000_fdc_t::floppy_p1_w )
+{
+ /*
+
+ bit description
+
+ 0 L0MS0
+ 1 L0MS1
+ 2 L0MS2
+ 3 L0MS3
+ 4 L1MS0
+ 5 L1MS1
+ 6 L1MS2
+ 7 L1MS3
+
+ */
+
+ m_l0ms = data & 0x0f;
+ m_l1ms = data >> 4;
+}
+
+
+//-------------------------------------------------
// floppy_p2_r -
//-------------------------------------------------
READ8_MEMBER( victor_9000_fdc_t::floppy_p2_r )
{
- return m_p2; // TODO needed because of ORL/ANL P2, should be in mcs48.c
+ /*
+
+ bit description
+
+ 0
+ 1
+ 2
+ 3
+ 4
+ 5
+ 6 RDY0
+ 7 RDY1
+
+ */
+
+ UINT8 data = m_p2 & 0x3f;
+
+ data |= m_rdy0 << 6;
+ data |= m_rdy1 << 7;
+
+ return data;
}
@@ -393,11 +477,8 @@ WRITE8_MEMBER( victor_9000_fdc_t::floppy_p2_w )
int sel1 = BIT(data, 4);
if (m_sel1 != sel1) sync = true;
- //m_rdy0 = BIT(data, 6);
- //m_via5->write_ca2(m_rdy0);
-
- //m_rdy1 = BIT(data, 7);
- //m_via5->write_cb2(m_rdy1);
+ set_rdy0(BIT(data, 6));
+ set_rdy1(BIT(data, 7));
if (LOG_SCP) logerror("%s %s START0/STOP0/SEL0/RDY0 %u/%u/%u/%u START1/STOP1/SEL1/RDY1 %u/%u/%u/%u\n", machine().time().as_string(), machine().describe_context(), start0, stop0, sel0, m_rdy0, start1, stop1, sel1, m_rdy1);
@@ -486,13 +567,34 @@ void victor_9000_fdc_t::update_spindle_motor(floppy_image_device *floppy, emu_ti
} else if (stop && !floppy->mon_r()) {
if (LOG_SCP) logerror("%s: motor stop\n", floppy->tag());
floppy->mon_w(1);
+ t_tach->reset();
}
if (sel) {
da = m_da;
+ if (!floppy->mon_r()) {
+ float tach = rpm[da] / 60 * SPINDLE_RATIO * MOTOR_POLES;
+
+ if (LOG_SCP) logerror("%s: motor speed %u rpm / tach %0.1f hz (DA %02x)\n", floppy->tag(), rpm[da], tach, da);
+
+ t_tach->adjust(attotime::from_hz(tach*2), 0, attotime::from_hz(tach*2));
+ floppy->set_rpm(rpm[da]);
+ }
}
}
+void victor_9000_fdc_t::set_rdy0(int state)
+{
+ //m_rdy0 = state;
+ //m_via5->write_ca2(m_rdy0);
+}
+
+void victor_9000_fdc_t::set_rdy1(int state)
+{
+ //m_rdy1 = state;
+ //m_via5->write_cb2(m_rdy1);
+}
+
//-------------------------------------------------
// da_w -
@@ -513,6 +615,26 @@ WRITE8_MEMBER( victor_9000_fdc_t::da_w )
}
}
+READ8_MEMBER( victor_9000_fdc_t::via4_pa_r )
+{
+ /*
+
+ bit description
+
+ PA0 L0MS0
+ PA1 L0MS1
+ PA2 L0MS2
+ PA3 L0MS3
+ PA4
+ PA5
+ PA6
+ PA7
+
+ */
+
+ return m_l0ms;
+}
+
WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w )
{
/*
@@ -553,6 +675,26 @@ WRITE8_MEMBER( victor_9000_fdc_t::via4_pa_w )
}
}
+READ8_MEMBER( victor_9000_fdc_t::via4_pb_r )
+{
+ /*
+
+ bit description
+
+ PB0 L1MS0
+ PB1 L1MS1
+ PB2 L1MS2
+ PB3 L1MS3
+ PB4
+ PB5
+ PB6
+ PB7
+
+ */
+
+ return m_l1ms;
+}
+
WRITE8_MEMBER( victor_9000_fdc_t::via4_pb_w )
{
/*
@@ -601,7 +743,7 @@ WRITE_LINE_MEMBER( victor_9000_fdc_t::wrsync_w )
m_wrsync = state;
cur_live.wrsync = state;
checkpoint();
- if (LOG_VIA) logerror("%s %s ERASE %u\n", machine().time().as_string(), machine().describe_context(), state);
+ if (LOG_VIA) logerror("%s %s WRSYNC %u\n", machine().time().as_string(), machine().describe_context(), state);
live_run();
}
}
@@ -630,10 +772,7 @@ READ8_MEMBER( victor_9000_fdc_t::via5_pa_r )
*/
- UINT8 e = checkpoint_live.e;
- UINT8 i = checkpoint_live.i;
-
- return BIT(e, 6) << 7 | BIT(i, 7) << 6 | BIT(e, 5) << 5 | BIT(e, 4) << 4 | BIT(e, 2) << 3 | BIT(i, 1) << 2 | (e & 0x03);
+ return GCR_DECODE(checkpoint_live.e, checkpoint_live.i);
}
WRITE8_MEMBER( victor_9000_fdc_t::via5_pb_w )
@@ -802,8 +941,8 @@ WRITE8_MEMBER( victor_9000_fdc_t::via6_pb_w )
bit description
- PB0
- PB1
+ PB0 RDY0
+ PB1 RDY1
PB2 _SCRESET
PB3
PB4
@@ -813,6 +952,9 @@ WRITE8_MEMBER( victor_9000_fdc_t::via6_pb_w )
*/
+ set_rdy0(BIT(data, 0));
+ set_rdy1(BIT(data, 1));
+
// motor speed controller reset
if (!BIT(data, 2))
m_maincpu->reset();
@@ -882,30 +1024,18 @@ WRITE_LINE_MEMBER( victor_9000_fdc_t::via6_irq_w )
READ8_MEMBER( victor_9000_fdc_t::cs7_r )
{
- if (!checkpoint_live.lbrdy)
- {
- live_sync();
- cur_live.lbrdy = 1;
- if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
- m_lbrdy_cb(1);
- checkpoint();
- live_run();
- }
+ m_lbrdy_cb(1);
+
+ if (LOG_VIA) logerror("%s %s LBRDY 1 : %02x\n", machine().time().as_string(), machine().describe_context(), m_via5->read(space, offset));
return m_via5->read(space, offset);
}
WRITE8_MEMBER( victor_9000_fdc_t::cs7_w )
{
- if (!checkpoint_live.lbrdy)
- {
- live_sync();
- cur_live.lbrdy = 1;
- if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
- m_lbrdy_cb(1);
- checkpoint();
- live_run();
- }
+ m_lbrdy_cb(1);
+
+ if (LOG_VIA) logerror("%s %s LBRDY 1\n", machine().time().as_string(), machine().describe_context());
m_via5->write(space, offset, data);
}
@@ -1044,9 +1174,10 @@ void victor_9000_fdc_t::live_abort()
cur_live.write_start_time = attotime::never;
cur_live.brdy = 1;
- cur_live.lbrdy = 1;
+ cur_live.lbrdy_changed = true;
cur_live.sync = 1;
cur_live.syn = 1;
+ cur_live.syn_changed = true;
cur_live.gcr_err = 1;
}
@@ -1088,7 +1219,7 @@ void victor_9000_fdc_t::live_run(const attotime &limit)
// sync counter
if (sync) {
cur_live.sync_bit_counter = 0;
- cur_live.sync_byte_counter = 10;
+ cur_live.sync_byte_counter = 9;
} else if (!cur_live.sync) {
cur_live.sync_bit_counter++;
if (cur_live.sync_bit_counter == 10) {
@@ -1103,8 +1234,6 @@ void victor_9000_fdc_t::live_run(const attotime &limit)
// syn
int syn = !(cur_live.sync_byte_counter == 15);
- if (LOG) logerror("%s bit %u sync %u bc %u sbc %u sBC %u syn %u\n",cur_live.tm.as_string(),bit,sync,cur_live.bit_counter,cur_live.sync_bit_counter,cur_live.sync_byte_counter,syn);
-
// GCR decoder
if (cur_live.drw) {
cur_live.i = cur_live.drw << 10 | cur_live.shift_reg;
@@ -1114,6 +1243,9 @@ void victor_9000_fdc_t::live_run(const attotime &limit)
cur_live.e = m_gcr_rom->base()[cur_live.i];
+ attotime next = cur_live.tm + m_period;
+ if (LOG) logerror("%s:%s:%s bit %u sync %u bc %u sbc %u sBC %u syn %u i %03x e %02x\n",cur_live.tm.as_string(),next.as_string(),cur_live.edge.as_string(),bit,sync,cur_live.bit_counter,cur_live.sync_bit_counter,cur_live.sync_byte_counter,syn,cur_live.i,cur_live.e);
+
// byte ready
int brdy = !(cur_live.bit_counter == 9);
@@ -1122,16 +1254,12 @@ void victor_9000_fdc_t::live_run(const attotime &limit)
if (brdy != cur_live.brdy) {
if (LOG) logerror("%s BRDY %u\n", cur_live.tm.as_string(),brdy);
- if (LOG && !brdy)
+ if (!brdy)
{
- UINT8 e = cur_live.e;
- UINT8 i = cur_live.i;
-
- UINT8 data = BIT(e, 6) << 7 | BIT(i, 7) << 6 | BIT(e, 5) << 5 | BIT(e, 4) << 4 | BIT(e, 2) << 3 | BIT(i, 1) << 2 | (e & 0x03);
- logerror("%s BRDY %02x\n",cur_live.tm.as_string(),data);
+ cur_live.lbrdy_changed = true;
+ if (LOG_VIA) logerror("%s LBRDY 0 : %02x\n", cur_live.tm.as_string(), GCR_DECODE(cur_live.e, cur_live.i));
}
cur_live.brdy = brdy;
- if (!brdy) cur_live.lbrdy = 0;
syncpoint = true;
}
@@ -1144,6 +1272,7 @@ void victor_9000_fdc_t::live_run(const attotime &limit)
if (syn != cur_live.syn) {
if (LOG) logerror("%s SYN %u\n", cur_live.tm.as_string(),syn);
cur_live.syn = syn;
+ cur_live.syn_changed = true;
syncpoint = true;
}
@@ -1166,8 +1295,17 @@ void victor_9000_fdc_t::live_run(const attotime &limit)
}
case RUNNING_SYNCPOINT: {
- m_lbrdy_cb(cur_live.lbrdy);
- m_syn_cb(cur_live.syn);
+ if (cur_live.lbrdy_changed) {
+ m_lbrdy_cb(0);
+ cur_live.lbrdy_changed = false;
+ }
+
+ if (cur_live.syn_changed) {
+ m_syn_cb(cur_live.syn);
+ cur_live.syn_changed = false;
+ }
+
+ m_via5->write_ca1(cur_live.brdy);
cur_live.state = RUNNING;
checkpoint();
diff --git a/src/mess/machine/victor9k_fdc.h b/src/mess/machine/victor9k_fdc.h
index 721aa4aac82..e6aa51c2e85 100644
--- a/src/mess/machine/victor9k_fdc.h
+++ b/src/mess/machine/victor9k_fdc.h
@@ -63,13 +63,16 @@ public:
DECLARE_FLOPPY_FORMATS( floppy_formats );
DECLARE_READ8_MEMBER( floppy_p1_r );
+ DECLARE_WRITE8_MEMBER( floppy_p1_w );
DECLARE_READ8_MEMBER( floppy_p2_r );
DECLARE_WRITE8_MEMBER( floppy_p2_w );
DECLARE_READ8_MEMBER( tach0_r );
DECLARE_READ8_MEMBER( tach1_r );
DECLARE_WRITE8_MEMBER( da_w );
+ DECLARE_READ8_MEMBER( via4_pa_r );
DECLARE_WRITE8_MEMBER( via4_pa_w );
+ DECLARE_READ8_MEMBER( via4_pb_r );
DECLARE_WRITE8_MEMBER( via4_pb_w );
DECLARE_WRITE_LINE_MEMBER( wrsync_w );
DECLARE_WRITE_LINE_MEMBER( via4_irq_w );
@@ -97,6 +100,8 @@ protected:
virtual machine_config_constructor device_mconfig_additions() const;
private:
+ static const int rpm[0x100];
+
enum
{
TM_GEN,
@@ -135,9 +140,10 @@ private:
int sync_bit_counter;
int sync_byte_counter;
int brdy;
- int lbrdy;
+ bool lbrdy_changed;
int sync;
int syn;
+ bool syn_changed;
int gcr_err;
// write
@@ -165,6 +171,8 @@ private:
void update_stepper_motor(floppy_image_device *floppy, int stp, int old_st, int st);
void update_spindle_motor(floppy_image_device *floppy, emu_timer *t_tach, bool start, bool stop, bool sel, UINT8 &da);
+ void set_rdy0(int state);
+ void set_rdy1(int state);
int load0_cb(floppy_image_device *device);
void unload0_cb(floppy_image_device *device);
@@ -204,8 +212,6 @@ private:
int m_via4_irq;
int m_via5_irq;
int m_via6_irq;
- int m_syn;
- int m_lbrdy;
attotime m_period;
diff --git a/src/mess/mess.lst b/src/mess/mess.lst
index 4eb6d518518..3101241e88f 100644
--- a/src/mess/mess.lst
+++ b/src/mess/mess.lst
@@ -1063,26 +1063,31 @@ avigo_es // 1997 Avigo (Spanish)
avigo_it // 1997 Avigo (Italian)
// Texas Instruments Calculators
+tisr16 // 1974 SR-16
+ti1270
+ti30 // 1976 TI-30
+tiprog
+tibusan1
+wizatron
ti73 // 1990 TI-73
ti74 // 1985 TI-74
ti95 // 1986 TI-95
ti81 // 1990 TI-81 (Z80 2 MHz)
-ti81v2 // 1990 TI-81 (Z80 2 MHz)
+ti81v2 // 1990 TI-81 (Z80 2 MHz)
ti85 // 1992 TI-85 (Z80 6 MHz)
ti82 // 1993 TI-82 (Z80 6 MHz)
ti83 // 1996 TI-83 (Z80 6 MHz)
ti86 // 1997 TI-86 (Z80 6 MHz)
-ti83p // 1999 TI-83 Plus (Z80 6 MHz)
+ti83p // 1999 TI-83 Plus (Z80 6 MHz)
ti83pse // 2001 TI-83 Plus Silver Edition
-ti84p // 2004 TI-84 Plus
+ti84p // 2004 TI-84 Plus
ti84pse // 2004 TI-84 Plus Silver Edition
//ti84cse // 2013 TI-84 Plus C Silver Edition (color screen)
ti89 // 1998 TI-89
ti92 // 1995 TI-92
-ti92p // 1999 TI-92 Plus
+ti92p // 1999 TI-92 Plus
v200 // 2002 Voyage 200 PLT
-ti89t // 2004 TI-89 Titanium
-wizatron
+ti89t // 2004 TI-89 Titanium
evmbug
// Exelvision (founded by former TI employees)
@@ -2231,7 +2236,11 @@ swyft
mmd1
mmd2
mpf1p
+cnsector
+starwbc
+starwbcp
stopthie
+stopthiep
amico2k
jtc
jtces88
diff --git a/src/mess/mess.mak b/src/mess/mess.mak
index 1a78afa29c0..b9f6717acfa 100644
--- a/src/mess/mess.mak
+++ b/src/mess/mess.mak
@@ -132,6 +132,8 @@ CPUS += IE15
CPUS += 8X300
CPUS += ALTO2
#CPUS += W65816
+CPUS += ARC
+CPUS += ARCOMPACT
#-------------------------------------------------
# specify available sound cores; some of these are
@@ -730,6 +732,7 @@ DRVLIBS += \
$(MESSOBJ)/intv.a \
$(MESSOBJ)/isc.a \
$(MESSOBJ)/kaypro.a \
+ $(MESSOBJ)/kenner.a \
$(MESSOBJ)/koei.a \
$(MESSOBJ)/kyocera.a \
$(MESSOBJ)/luxor.a \
@@ -1329,6 +1332,9 @@ $(MESSOBJ)/isc.a: \
$(MESSOBJ)/kaypro.a: \
$(MESS_DRIVERS)/kaypro.o $(MESS_MACHINE)/kaypro.o $(MESS_MACHINE)/kay_kbd.o $(MESS_VIDEO)/kaypro.o \
+$(MESSOBJ)/kenner.a: \
+ $(MESS_DRIVERS)/starwbc.o \
+
$(MESSOBJ)/koei.a: \
$(MESS_DRIVERS)/pasogo.o \
@@ -1472,6 +1478,7 @@ $(MESSOBJ)/palm.a: \
$(MESS_DRIVERS)/palmz22.o \
$(MESSOBJ)/parker.a: \
+ $(MESS_DRIVERS)/cnsector.o \
$(MESS_DRIVERS)/merlin.o \
$(MESS_DRIVERS)/stopthie.o \
@@ -1946,7 +1953,7 @@ $(MESSOBJ)/skeleton.a: \
$(MESS_DRIVERS)/mx2178.o \
$(MESS_DRIVERS)/mycom.o \
$(MESS_DRIVERS)/myvision.o \
- $(MESS_DRIVERS)/ngen.o \
+ $(MESS_DRIVERS)/ngen.o $(MESS_MACHINE)/ngen_kb.o \
$(MESS_DRIVERS)/octopus.o \
$(MESS_DRIVERS)/onyx.o \
$(MESS_DRIVERS)/okean240.o \
@@ -2074,6 +2081,8 @@ $(MAME_DRIVERS)/cdi.o: $(MAME_LAYOUT)/cdi.lh
$(MESS_DRIVERS)/chessmst.o: $(MESS_LAYOUT)/chessmst.lh
$(MESS_DRIVERS)/chesstrv.o: $(MESS_LAYOUT)/chesstrv.lh \
$(MESS_LAYOUT)/borisdpl.lh
+$(MESS_DRIVERS)/cnsector.o: $(MESS_LAYOUT)/cnsector.lh
+$(MESS_DRIVERS)/comp4.o: $(MESS_LAYOUT)/comp4.lh
$(MESS_DRIVERS)/cp1.o: $(MESS_LAYOUT)/cp1.lh
$(MESS_DRIVERS)/cvicny.o: $(MESS_LAYOUT)/cvicny.lh
$(MESS_DRIVERS)/coco3.o: $(MESS_LAYOUT)/coco3.lh
@@ -2143,6 +2152,7 @@ $(MESS_DRIVERS)/simon.o: $(MESS_LAYOUT)/simon.lh
$(MESS_DRIVERS)/sitcom.o: $(MESS_LAYOUT)/sitcom.lh
$(MESS_DRIVERS)/slc1.o: $(MESS_LAYOUT)/slc1.lh
$(MESS_DRIVERS)/sms.o: $(MESS_LAYOUT)/sms1.lh
+$(MESS_DRIVERS)/starwbc.o: $(MESS_LAYOUT)/starwbc.lh
$(MESS_DRIVERS)/stopthie.o: $(MESS_LAYOUT)/stopthie.lh
$(MESS_DRIVERS)/super80.o: $(MESS_LAYOUT)/super80.lh
$(MESS_DRIVERS)/supercon.o: $(MESS_LAYOUT)/supercon.lh
@@ -2154,6 +2164,10 @@ $(MESS_DRIVERS)/tec1.o: $(MESS_LAYOUT)/tec1.lh
$(MESS_DRIVERS)/tecnbras.o: $(MESS_LAYOUT)/tecnbras.lh
$(MESS_DRIVERS)/ti74.o: $(MESS_LAYOUT)/ti74.lh \
$(MESS_LAYOUT)/ti95.lh
+$(MESS_DRIVERS)/ticalc1x.o: $(MESS_LAYOUT)/ti1270.lh \
+ $(MESS_LAYOUT)/ti30.lh \
+ $(MESS_LAYOUT)/tisr16.lh \
+ $(MESS_LAYOUT)/wizatron.lh
$(MESS_DRIVERS)/tk80.o: $(MESS_LAYOUT)/tk80.lh
$(MESS_DRIVERS)/tm990189.o: $(MESS_LAYOUT)/tm990189.lh \
$(MESS_LAYOUT)/tm990189v.lh
diff --git a/src/mess/tools/imgtool/modules/os9.c b/src/mess/tools/imgtool/modules/os9.c
index 0e502d4d416..b6e20da2da6 100644
--- a/src/mess/tools/imgtool/modules/os9.c
+++ b/src/mess/tools/imgtool/modules/os9.c
@@ -673,7 +673,7 @@ static imgtoolerr_t os9_diskimage_open(imgtool_image *image, imgtool_stream *str
return IMGTOOLERR_OUTOFMEMORY;
memset(info->allocation_bitmap, 0, info->allocation_bitmap_bytes);
- /* sectors per track and track size dont jive? */
+ /* sectors per track and track size don't jive? */
if (info->sectors_per_track != track_size_in_sectors)
return IMGTOOLERR_CORRUPTIMAGE;
diff --git a/src/mess/video/maria.c b/src/mess/video/maria.c
index 62af22ba947..7d9679561dc 100644
--- a/src/mess/video/maria.c
+++ b/src/mess/video/maria.c
@@ -4,6 +4,8 @@
- some history:
+ 2014-12-01 Mike Saarna, Robert Tuccitto Implemented "colorburst kill" bit
+ of the MARIA CTRL register.
2014-10-05 Mike Saarna, Robert Tuccitto Last Line DMA value corrected
to 6. GCC and Atari docs both show a difference between
Other Line and Last Line as +6 at the lowest part of the
@@ -317,6 +319,12 @@ void atari_maria_device::draw_scanline()
scanline[2 * i + 1] = m_maria_palette[d];
break;
}
+
+ if(m_color_kill) //remove color if there's no colorburst signal
+ {
+ scanline[2 * i] &= 0x0f;
+ scanline[2 * i + 1] &= 0x0f;
+ }
}
for (int i = 0; i < 160; i++) // buffer automaticaly cleared once displayed